Struts2

来源:互联网 发布:描绘网络的 电影 编辑:程序博客网 时间:2024/06/05 03:22

struts1的不足

需要编写的代码过多,严重的继承依靠,容易引起“类爆炸”

单元测试困难

—解决方案—

POJO IN ACTION

struts2

官网地址:http://struts.apache.org

下载struts2..-all.zip

Struts2工作流程
请求在Struts2框架中的处理大概分为以下几个步骤:
1 客户端初始化一个指向Servlet容器的请求;
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:
SiteMesh Plugin)
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被
表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

Struts2环境搭建

1、配置Struts2所需jar包

2、 web.xml中加入Struts2框架启动配置

3、准备Struts2的配置文件

配置Struts2所需jar包

由于struts2的版本在不断更新变化,所需要的基本包也在不断的变化中,最好的方式是参看apps文件包中的struts2-blank.war

其中:
struts2-core-2.x.x.jar :Struts 2框架的核心类库
xwork-core-2.x.x.jar :XWork类库,Struts 2在其上构建
ognl-x.x.x.jar :对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性
freemarker-2.3.x.jar :Struts 2的UI标签的模板使用FreeMarker编写
commons-logging-1.x.x.jar :ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。
commons-fileupload-1.2.1.jar 文件上传组件,2.1.6版本后必须加入此文件

web.xml中加入Struts2框架启动配置

在struts1中, struts框架是通过Servlet启动的。

在struts2中,struts框架是通过Filter启动的。他在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>    <url-pattern>/*</url-pattern></filter-mapping>

准备Struts2的配置文件

Struts2默认的配置文件为struts.xml ,该文件需要存放在WEB-INF/classes下,该文件的配置模版如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd">< struts>< /struts>

为方便开发,将dtd导入到MyEclipse中。

细节描述

struts.xml中的package标签:
—作用:package是整个配置的核心部分。每个package,从语义上讲,其实代表了每一个独立的模块。在这个模块中,你可以定义独立的拦截器、结果类型和action的定义。
1、name属性:
为每个package设置一个唯一的标识,这个标识在所有的package定义中不能重复。
2、extends属性:
指定本package继承另外一个package的所有的配置。当使用了继承以后,就无需对父package中已经声明过的配置定义做再次的定义。如果重复定义,那么这些重复定义声明将覆盖父package中的相关定义。
3、 namespace属性:
对于action配置进行逻辑划分。如果不指定namespace,默认使用一个空字符串作为namespace,也可以使用“/”等字符串来表示namespace。该属性会影响到请求url的地址。

Action类无需做任何继承,只要是个普通JavaBean对象即可。特别注意:struts2中的Action是非单例的,即每次请求都会得到一个Action对象(这是与struts1不同的)。

Action需要一个execute方法充当请求方法。
该方法形如:public String execute();
1、该方法名字默认叫execute,可以更改,但是要特别配置或是在请求url中指明;

2、该方法不能有参数;

3、该方法返回类型通常是String类型,用以指代返回的页面;但也允许是void,struts2将会默认返回一个空白页面。

0 0