客户端发送一个http请求------------------>读取Web.xml中的过滤链,包括:ActionContextClearUp过滤器、其他web应用过滤器以及SrutsPrepareAndExcuteFilter过滤器(必备的)---------------->Action映射器将查找需要调用的Action对象,并返回Action对象的代理(如通过连接找到<a href="ognl.action">测试</a>)----------------->读取struts.xml配置文件中的相关配置,在经过一系列的拦截过滤后,Action容器调用指定的Action对象,将返回相应的jsp或freemaker等结果视图。-------------------->经过一系列的过滤拦截,HTTP请求回应给客户端。
二、开发struts所必需要的类库文件。
名称 | 说明 |
struts2-core-2.1.14.jar | Struts 的核心类库 |
xwork-core-2.1.6.jar | Xwork的核心类库 |
ognl-2.7.3.jar | Ognl表达式语言类库 |
commons-logging-1.0.4.jar | Log4j日志支持类库 |
freemarker-2.3.15.jar | Freemarker模板语言支持类库 |
commons-io-1.3.2.jar | 处理IO操作的工具类库 |
commons-fileupload-1.2.1.jar | 文件上传支持类库 |
(1)新建web项目。然后将Struts2的支持类库文件添加到WEB-INF目录的lib文件夹中。
(2)在web.xml文件中声明struts2提供的过滤器,类名为 org.apache.struts2.dispatcher.ng.filter.StrutsPreparedAndExecuteFilter.关键代码如下:
<!-- Struts2过滤器 -->
<filter>
<!-- 过滤器名称 -->
<filter-name>struts2</filter-name>
<!-- 过滤器类 -->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- Struts2过滤器映射 -->
<filter-mapping>
<!-- 过滤器名称 -->
<filter-name>struts2</filter-name>
<!-- 过滤器映射 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
(3)在web项目源码文件夹中,创建名称为struts.xml的配置文件,并在该文件中配置Action对象。代码如下:
<struts>
<!--声明常量 -->
<constant name="struts.devMode" value="true"></constant>
<package name="myPackage" extends="struts-default" namespace="/">
<!-- 定义action -->
<action name="ognl" class="com.lyq.action.OGNLAction">
<!-- 结果映射 -->
<result name="success">success.jsp</result>
</action>
</package>
</struts>
说明:1、<package> 标签:声明一个包,通过name属性指定包的名称为myPackage,并通过extends属性指定此包继承于struts-default包。
2、<action>标签:用于定义Action对象,它的name属性用于指定访问此Action的URL。
3、<result>子元素:用于定义处理结果和资源之间的映射关系。
技巧:在struts.xml文件中,Struts2的Action配置需要放置在包空间内,它类似于Java中的包的概念。通常情况下,声明的包需要继承于struts-default包。
(4)新建一个java类继承ActionSupport。并在其中添加一些代码和属性。核心代码如:
public class OGNLAction extends ActionSupport {
private static final long serialVersionUID=1L;
private String name;//普通属性对象
private Student student; //学生对象
Map<String,Object> request;
public OGNLAction() {
student = new Student();//实例化学生对象
student.setId(1); //对学号赋值
student.setName("张三");
name="朱云";
request =(Map<String,Object>) ActionContext.getContext().get("request");
}
......
}
(5)创建一个页面xx.jsp,在该页面中编写一个超链接,用于访问上面所定义的Action对象,此链接所指向地址为ognl.action。
<a href="ognl.action">测试</a>
在struts2中,Action对象的默认访问后缀为“.action” ,并非绝对的。后面可更改。
四、结果。
以上为笔者学习笔记,仅为加深学习印象。如有错误,还请留言指教。