创建一个Struts2的web项目

Posted 十木禾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建一个Struts2的web项目相关的知识,希望对你有一定的参考价值。

###前言

从零开始一步一步的搭建一个Struts2的web项目。

工具:eclipse

###搭建过程

首先,创建一个动态的Web工程,结构如下:

工程目录

然后我们加入一些项目所需的jar包,将其放入WEB-INF下面的lib目录下面,然后加入到项目中:

jar包下载地址:http://mirrors.hust.edu.cn/apache/struts/2.5.13/struts-2.5.13-all.zip

这里包含了基本的所有需要的jar包,我们选取一些我们这个最简单的项目需要的。

jar

接着我们来配置 web.xml

我们再这里配置一个权限过滤器,过滤所有的路径,加入如下代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>HelloStruts2</display-name>
  
  <filter>
  	<filter-name>hellostruts</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  
  <filter-mapping>
  	<filter-name>hellostruts</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

web.xml配置完成之后,我们来进行一些struts的配置。

在 src 目录下创建 struts.xml,加入如下代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
</struts>

在 src 目录下面创建一个 Struts2 的 Action(下图中的HelloStrutsAction),继承ActionSupport基类。

Action

Action中加入如下代码:

package com.struts.trio;

import com.opensymphony.xwork2.ActionSupport;

public class HelloStrutsAction extends ActionSupport {

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return "index";
	}

}

上面的代码中我们重写了基类中用以处理用户请求execute()方法。
上述方法的返回值为index,那么程序要怎样识别并返回相应的界面呢?

所以就需要定义逻辑视图与物理资源之间的映射

struts.xml中增加如下代码:

<struts>
	<!-- 定义逻辑视图与物理视图之间的联系 -->
	<package name="trio" extends="struts-default">
		<action name="index" class="com.struts.trio.HelloStrutsAction">
			<!-- 将index映射到物理地址 -->
			<result name="index">/index.jsp</result>
		</action>
	</package>
	<!-- end -->
</struts>

这时候就会返回WebContent目录下面的index.jsp文件了。
我们新建这个index.jsp文件,加入如下代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>hello struts2 login success!</h1>
</body>
</html>

到这里,一个Struts2的项目就完成了,放在服务器上面跑一下,如果最终结果如下,说明你也创建成功了!

成功

上面主要是一个Struts2的大致模型,关于这个Action的用法见下面:

###数据交互

现在就会用到上面刚搭建的那个架构来进行数据的交互。

我们来设计一个应用场景,定义需求如下:

  • 这是一个用户登录的页面(用户名,密码)
  • 登录成功,跳转到 success.jsp
  • 登陆失败,跳转到 failure.jsp

我们就在上面的基础上来完成这个需求:

首先我们将index.jsp改成一个含有登录表单的文件:

引入Struts2的标签库:

   <!-- 引入struts的标签库-->
<%@ taglib uri="/struts-tags" prefix="s"%>

最后代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   <!-- 引入struts的标签库-->
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
</head>
<body>
	<s:form action="index">
		<s:textfield name="username" key="用户名"></s:textfield>
		<s:textfield name="password" key="密    名"></s:textfield>
		<s:submit key="登录"></s:submit>
	</s:form>
</body>
</html>

注1:更多有关Struts2标签的可以参考:Struts2标签

注2:表单中的提交地址(index),与struts.xml中此处的配置相对应:

action

说明,点击按钮,数据会传到com.struts.trio.HelloStrutsAction这个Action中。

接下来我们来接受前台传过来的数据:

当用户名为:admin,密码为:123456 时候登录成功,反之失败。

则,Action中的代码修改为如下:

package com.struts.trio;

import com.opensymphony.xwork2.ActionSupport;

public class HelloStrutsAction extends ActionSupport {
	
	//定义请求参数的 username 和password
	//与前台jsp中表单中的name属性相同
	private String username;
	private String password;
	
	public String getUsername() {
		return username;
	}


	public void setUsername(String username) {
		this.username = username;
	}


	public String getPassword() {
		return password;
	}


	public void setPassword(String password) {
		this.password = password;
	}

	
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		String userName=this.getUsername();
		String userPassword=this.getPassword();
		
		if(userName.equals("admin")&&userPassword.equals("123456")){
			ActionContext.getContext().getSession()
				.put("user", userName);	//用户名存储在 session 用于返回界面显示
			return "success";
		}
		return "failure";
	}
}

因为Action的返回值发生了改变,则struts.xml中的相应的映射改为:

<struts>
	<!-- 定义逻辑视图与物理视图之间的联系 -->
	<package name="trio" extends="struts-default">
		<action name="index" class="com.struts.trio.HelloStrutsAction">
			<result name="success">/jsp/success.jsp</result>
			<result name="failure">/jsp/failure.jsp</result>
		</action>
	</package>
	<!-- end -->
</struts>

接下来我们创建两个返回界面相应的 jsp 文件:

返回界面

在登陆失败界面直接显示:登陆失败
在登录成功界面显示:XXX(用户名)登录成功

对应的failure.jsp就不过多说明,那么success,jsp文件该怎样输出后台存入 session的用户名呢?

			ActionContext.getContext().getSession()
				.put("user", userName);	//用户名存储在 session 用于返回界面显示

上面就是存储用户名的代码了,可知存储的key为"user"
我们使用JSP中的EL表达式获取session中的值,部分代码如下:

</head>
<body>
<h1>${session.user} 登录成功</h1>
</body>

好了,这个简单的实例就算是写完了,查看一下自己的项目是否能正确的跑起来吧!

###项目测试

运行项目,输入用户名密码

登录

点击登录

登录成功

显示登录成功,至此,实例完成!

以上是关于创建一个Struts2的web项目的主要内容,如果未能解决你的问题,请参考以下文章

struts2的配置方法

[Java web]Spring+Struts2+Hibernate整合过程

Struts2 maven项目简单案例

Struts2 第三个程序 namespacce的用法

第二个Struts2程序 应用动态Action

Struts2 表单提交与execute()方法的结合使用