Struts2配置
2011-8-23
冰上浮云
Struts2版本:struts-2.2.3
Struts2框架的大概处理流程:
1、加载类(FilterDispatcher)
2、读取配置(struts配置文件中的Action)
3、派发请求(客户端发送请求)
4、调用Action(FilterDispatcher从struts配置文件中读取与之相对应的Action )
5、启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证)
6、处理业务(回调Action的execute()方法)
7、返回响应(通过execute方法将信息返回到FilterDispatcher)
8、查找响应(FilterDispatcher根据配置查找响应的是什么信息如:SUCCESS、ERROER,将跳转到哪个jsp页面)
9、响应用户(jsp--->客户浏览器端显示)
必须加载的包:
freemarker-2.3.16.jar
ognl-3.0.1.jar
struts2-core-2.2.3.jar
xwork-core-2.2.3.jar
commons-logging-1.1.1.jar
commons-lang-2.5.jar
commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
javassist-3.11.0.GA.jar
Struts2处理流程:
JSP用于显示处理结果,可以采用JSTL这类struts2的标签来简化前段实现。
FilerDispatcher是前端JSP显示与后端逻辑处理Action的一个接口。用于把前端JSP的请求按照配置正确的指定到相应的Action,处理完后返回一个相应给FilterDispatcher,让他来决定向哪个页面送出处理结果。在web.xml中对FilterDispatcher进行配置。配置代码如下:
<!-- 增加struts2所需要的过滤器,以便在服务器启动时,拦截URL请求 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器有了后需要指定一个映射文件,把前端页面的请求定位到具体的Action进行处理,把处理结果返回给处理结果页面。这个映射就放在class目录下struts.xml文件中。具体映射代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//ApacheSoftware Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<packagename="struts2" extends="struts-default">
<actionname="login" class="com.test.action.LoginAction">
<resultname="success">/result.jsp</result>
<resultname="input">/login2.jsp</result>
<resultname="error">/login2.jsp</result>
</action>
</package>
</struts>
建立login2.jsp页面,该页面使用JSTL标签实现页面呈现:
引入标签库:<%@ taglib prefix="s"uri="/struts-tags"%>
代码:
<s:formaction="login">
<s:textfield name="username"label="用户名"></s:textfield>
<s:password name="password"label="密码"></s:password>
<s:submit label="登录"></s:submit>
</s:form>
编写请求处理的LoginAction,该类Action必须继承com.opensymphony.xwork2.ActionSupport
LoginAction代码:
packagecom.test.action;
importcom.opensymphony.xwork2.ActionSupport;
publicclass LoginAction extends ActionSupport {
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;
}
public String execute()throws Exception{
if("hello".equals(this.getUsername().trim())&&"123456".equals(this.getPassword().trim())){
return this.SUCCESS;
}else{
this.addFieldError("username","username or password is error.");
return this.ERROR;
}
}
//重写ActionSupport类中的validate()方法;实现表单验证
@Override
public void validate() {
if(null==this.getUsername()||"".equals(this.getUsername().trim())){
this.addFieldError("username","userName request is null");
}
if(null==this.getPassword() ||"".equals(this.getPassword().trim())){
this.addFieldError("password","password request is null");
}
}
}
该Action实现了表单验证,当输入为空是就会向login2.jsp页面的JSTL标签返回错误信息并显示。简化了出错处理的步骤。