Struts2
据说Struts2已过时,没办法,学校要学,还是偶尔听下
1、struts2介绍
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
2、struts2的简单使用
-
创建web项目,导入jar包
-
创建一个index.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <a href="${pageContext.request.contextPath}/hello.action"> struts2 test </a> </body> </html>
-
编写Action类
public class HelloAciton { public String execute () { System.out.println("hello action execute..."); return null; } }
-
编写配置文件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的包--> <package name="demo1" extends="struts-default" namespace="/"> <-- 配置Action--> <action name="hello" class="com.pre.struts2.HelloAciton" > </action> </package> </struts>
-
在web.xml中配置前端控制器
<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> <!-- 所有请求都有struts2处理--> <url-pattern>/*</url-pattern> </filter-mapping>
-
直接运行:
页面将出现空白页
-
更改struts.xml,HelloAction.java文件
<?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> <package name="demo1" extends="struts-default" namespace="/"> <action name="hello" class="com.pre.struts2.HelloAciton" > <result name="success" type="dispatcher">/success.jsp</result> </action> </package> </struts>
public class HelloAciton { public String execute () { System.out.println("hello action execute..."); return "success"; } }
- 再次访问页面:
页面显示处理success.jsp的内容
3、struts2的执行流程
当用户访问某一个Action的时候,先经过核心过滤器,在核心过滤器中执行一组拦截器(这组拦截器实现部分功能),执行目标Action,根据Action的返回值,进行页面跳转。
4、struts2常见配置
常用配置文件加载顺序
-
default.properties
-
struts-default.xml
-
struts-plugin.xml
-
struts.xml
-
struts.properties
-
web.xml
后配置的常量的值会覆盖先配置的常量的值
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的常量配置
-
struts.xml中配置
<struts> <!--常量配置--> <constant name="struts.action.extension" value="action"/> <package name="demo1" extends="struts-default" namespace="/"> <action name="hello" class="com.pre.struts2.HelloAciton" > <result name="success" type="dispatcher">/success.jsp</result> </action> </package> </struts>
-
web.xml中配置
<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>test</param-value> </init-param> </filter>
5、实现Action控制器的方式
直接写一个普通的Action类,添加一个execute方法
public class HelloAciton {
public String execute () {
System.out.println("hello action execute...");
return "success";
}
}
实现一个Action接口
import com.opensymphony.xwork2.Action;
public class ActionDemo2 implements Action {
@Override
public String execute() throws Exception {
System.out.println("ActionDemo2 execute.......");
return "success";
}
}
注意不要导错包了
继承ActionSupport
import com.opensymphony.xwork2.ActionSupport;
public class ActionDemo3 extends ActionSupport {
@Override
public String execute() {
System.out.println("ActionDemo3 execute.......");
return "success";
}
}
6、Action的访问
-
通过method指定
<struts> <constant name="struts.action.extension" value="action"/> <package name="demo1" extends="struts-default" namespace="/"> <!--method=test表示执行HelloAction类中的test方法--> <action name="hello" class="com.pre.struts2.HelloAciton" method="test"> <result name="success" type="dispatcher">/success.jsp</result> </action> </package> </struts>
-
通过通配符的方式进行配置
不学了,没意思的技术