一、什么是Struts2
struts2是以WebWork为核心,采用拦截器机制来处理用户请求,从而使业务逻辑控制与Servlet API完全脱离开
struts2是一个可重用的MVC2设计框架。基于Action的struts2框架把servlet和jsp组件整合在一起,把用户的页面请求和处理分拆成处理逻辑和表现逻辑。这就是业界流行的所谓的MVC模式,叫做Model2
在MVC模式中,servlet是控制器,集中处理所有的客户端页面请求。它们把所请求的URL与被称为Action的工作单元映射到一起。
Action的工作就是访问HTTP会话、HTTP请求、和表单参数等,然后调用业务逻辑,即把响应映射到以pojo形式的模型上执行相应的处理
Action返回的结果会通过配置文件映射到jsp页面,jsp会渲染给客户
二、框架构成
struts2框架主要由3部分组成:
1)核心控制器FilterDispatcher:该控制器实际上是一个Filter,并充当Web应用的门户,负责拦截所有的用户请求。让用户的请求到达时,Filter会将所有扩展名为action(*.action)的请求交由struts2框架处理,框架会根据所请求的action名决定调用那个业务逻辑组件
2)业务逻辑器
3)用户业务逻辑组件
struts2中还有一些拦截器,它们负责将httpservletRequest请求参数解析出来并传入Action中,然后回调Action的execute方法处理用户请求。
架构如下:
Struts2的所有action都定义在配置文件struts2.xml中,每一个Action都有一个name属性和一个class属性,前者决定该ACTION的请求名,后者决定该action的具体实现类
三、实例
在Eclipse中新建Dynamic Web Project
1、 导入Struts2开发所需的jar包(最少6个包)
到WebContent/WEB-INF/lib下
目录结构:
2、 配置web.xml文件
3、 在src下新建struts.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstrutsPUBLIC"-//ApacheSoftware Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<packagename="login"namespace="/login"extends="struts-default">
<actionname="loginAction"class="com.sun.test">
<resultname="input">login.jsp</result>
<resultname="success">welcome.jsp</result>
<resultname="failture">failture.jsp</result>
</action>
</package>
</struts>
注意:
<package>标签用于声明Action所属的包,struts2是通过包来组织Action的,一个package中可以包含多个<action>
<package>中的namespace属性设置了jsp页面所在的路径,namespace=”/login”表示jsp页面在login文件夹中
<action>标签配置一个Action类,它的名字是”loginAction” 相应的类为com.sun.test(com/sun文件夹下的test.java)
<action>的子标签<result>用于声明页面跳转控制。默认的跳转方式为dispatcher,即服务器内部跳转
如果execute(默认)的返回值为”success”就跳转到welcome.jsp,若返回值为”failture”则跳转到failure.jsp
4、新建action类
其中包括属性的声明、getter、setter方法、execute方法(当然还可以定义其他方法)
package com.sun;
importjava.util.Date;
importcom.opensymphony.xwork2.ActionSupport;
public classtest extends ActionSupport{
private String username, password;
private String msg;
public String execute() throws Exception {
if (username.equals("admin")&& password.equals("123456")) {
msg = "登录成功,欢迎您:" + username ;
return "success";
} else {
msg = "登录失败,用户" + username + "不存在或口令有误!";
return "failure";
}
}
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 getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
5、 新建jsp页面
注:
<s:form>用于组织表单数据,其中的action=”loginAction” 指交给处理的目标,也就是name=”loginAction”的Action,重要的是这里也要配置namespace,否则会出现找不到Action的异常
在浏览器中输入:http://localhost:8080/strutstest/login/login.jsp
就可以访问了