经过长时间的优化改进,struts的功能越来越丰富,除了提供基础的mvc框架支持,其功能:struts标签,编码动作,处理表格,表格验证,消息资源文件,异常处理,通配符方法选择,注释,拦截器,单元测试,http会话,ajax和json等技术方面都有支持,从而使得struts作为通用mvc框架的选择之一。
mvc特点:
1.多个视图对应一个模型,可以减少代码复制与代码维护
2.模型返回的数据与显示逻辑分离,显示技术可以使用jsp,Velocitym疤或者Excel文档等
3.应用分为三层,可以降低各层之间的耦合等等
struts应用开发流程:
1.在web.xml文件中定义核心Filter拦截用户请求:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.如果以POST方式提交请求,则定义包含表单数据的JSP页面,如果以GET方式提交请求,则省略这步
3.定义处理用户请求的Action类,该类继承ActionSupport,其原理为:核心Servlet或Filter接受到用户请求后,会对用户请求进行简单处理(解析,封装参数等),然后通过反射来创建Action实例,并调用Action的指定方法来处理用户请求,可以利用两种解决方案创建Action实例:利用配置文件和利用约定
4.配置Action和物理结果和物理视图资源之间的对应关系
<action name="login" class="action.LoginAction">
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
sturts2运行流程:
现在说下struts的示例应用:
登录处理
登录处理:
1.新建loginForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><s:text name="loginPage"/></title>
</head>
<body>
<s:form action="login">
<s:textfield name="username" key="user"/>
<s:textfield name="password" key="pass"/>
<s:submit key="login"/>
</s:form>
</body>
</html>
2.加载国际化资源文件,在struts.xml中配置:
<!-- 指定全局国际化资源文件-->
<constant name="struts.custom.i18n.resource" value="mess"/>
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
3.新建mess.properties文件:
loginPage=登录页面
errorPage=错误页面
succPage=成功页面
failTip=对不起,您不能登录!
user=用户名
pass=密码
login=登录
4.新建LoginAction类:
public class 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;
}
//定义处理用户请求的execute方法
public String execute(){
//如果用户名为test,密码为test则登录成功
if(getUsername().equals("test") && getPassword().equals("test")){
ActionContext.getContext().getSession().put("user", getUsername());
return SUCCESS;
}
return ERROR;
}
}
5.配置struts.xml页面
<action name="login" class="action.LoginAction">
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
6.登录http://localhost:8080/ssh/loginForm,输入用户名和密码