Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
Struts2是一个基于MVC设计模式的WEB层框架
简单实现功能
- 创建一个JSP页面
<h3><a href="${pageContext.request.contextPath }/demo01.action">进入action</a></h3>
- 编写Action类
public class Demo01 {
public String execute(){
System.out.println("hello action!");
return null;
}
}
- 对Action进行配置
在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>
<!-- struts2 为了管理Action的配置,通过包进行管理 -->
<!-- 配置Struts2的包 -->
<package name="demo01" extends="struts-default" namespace="/">
<!-- 配置action -->
<action name="demo01" class="com.sssddd.struts.demo.Demo01">
<!-- 配置页面的跳转 -->
<result name="success">/demo01/success.jsp</result>
</action>
</package>
</struts>
- 配置前端控制器,在web.xml 中
<!-- 配置struts2核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 改写Action中方法的返回值
public class Demo01 {
public String execute(){
System.out.println("hello action!");
return "success";
}
}
- 改写struts.xml
在action中添加result
<action name="demo01" class="com.sssddd.struts.demo.Demo01">
<!-- 配置页面的跳转 -->
<result name="success">/demo01/success.jsp</result>
</action>
- 创建success.jsp
点击超链接,控制台显示hello struts!,客户端跳转到success.jsp
Struts2 的执行流程
请求–> 核心过滤器(StrutsPrepareAndExecuteFilter)–>执行一组拦截器(完成部分功能)–>Action–>Result
加载顺序
default.properties
struts-default.xml
struts-plugin.xml
struts.xml
struts.properties
web.xml
注意:后配置的常量的值会覆盖先配置的常量的值
Action的配置
- package的相关配置
- package标签称为包,这个包与Java中的包的概念不一致。包为了更好管理action的配置。
- package标签的属性
name :包的名称,只有在一个项目中不重名即可。
extends :继承哪个包,通常值为struts-default。
namespace :名称空间,与标签中的name属性共同决定访问路径。
名称空间有三种写法:
带名称的名称空间 :namespace=”/aaa”
跟名称空间 :namespance=”/”
默认名称空间 :namespace=””
abstract :抽象的,用于其他包的继承。
- action相关配置
action标签配置Action类。
action标签的属性
name :与namespace共同决定访问路径
class :Action类的全路径
method :执行Action中的哪个方法的方法名,默认值execute
converter :用于设置类型转换器
常量的配置
- struts2提供了很多的常量,在default.properties中
- 可有三个位置进行修改
-
struts.xml中进行修改
<!-- 配置常量,设置扩展名 --> <constant name="struts.action.extension" value="action"></constant>
-
struts.properties中进行修改
-
web.xml中进行修改
<!-- 配置struts2核心过滤器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <!-- 配置常量 --> <init-param> <param-name>struts.action.extension</param-name> <param-value>action</param-value> </init-param> </filter>
-
Action的写法
- Action类是POJO的类
public class Demo01 {
public String execute(){
System.out.println("hello action!");
return "success";
}
}
- Action类实现了一个Action的接口
/**
* 在Action接口中提供了五个常量(五个逻辑视图的名称)
* * SUCCESS : 成功
* * ERROR :失败
* * LOGIN :登录出错页面跳转
* * INPUT :表单校验的时候出错
* * NONE :不跳转
* @author Dell
*
*/
public class Demo02 implements Action {
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return null;
}
}
- Action类继承ActionSupport类(常用)
public class Demo03 extends ActionSupport {
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return null;
}
}
Action的访问
- 通过method设置
<package name="demo03" extends="struts-default" namespace="/">
<action name="userFind" class="com.itheima.struts.demo03.UserAction" method="find"></action>
<action name="userUpdate" class="com.itheima.struts.demo03.UserAction" method="update"></action>
<action name="userDelete" class="com.itheima.struts.demo03.UserAction" method="delete"></action>
</package>
- 通过通配符的方式进行配置(常用)
<package name="demo03" extends="struts-default" namespace="/">
<action name="user_*" class="com.itheima.struts.demo03.UserAction" method="{1}"></action>
</package>
- 动态方式访问
<package name="demo03" extends="struts-default" namespace="/">
<action name="*_*" class="com.itheima.struts.demo03.{1}" method="{2}"></action>
</package>