文章目录
  1. 1. struts2
  2. 2. 搭建struts2开发环境
    1. 2.1. 导入JAR文件
    2. 2.2. struts.xml
    3. 2.3. web.xml
  3. 3. 第一个struts2应用
    1. 3.1. 配置文件struts.xml
    2. 3.2. HelloWorldAction
    3. 3.3. jsp页
  4. 4. struts2的处理流程
  5. 5. 为多个应用指定多个struts配置文件

struts2

Struts2是在WebWork2基础上发展而来,属于MVC框架。优点:

  1. 提供了拦截器,可以进行AOP编程;
  2. 提供了类型转换器,可以把特殊的请求参数转换成需要的类型;
  3. struts2的应用可以不依赖于 ServletAPI和strutsAPI,无侵入式设计;
  4. 提供支持多种表现层技术,如JSP等等
  5. struts2的输入校验可以对指定方法进行校验
  6. 提供全局范围、包范围和Action范围的国际化资源文件管理实现。

    搭建struts2开发环境

    导入JAR文件

    可以从http://struts.apache.org/download.cgi#struts2015下载struts.2.x.x-all.zip。下载完成之后解压文件。开发struts2应用需要依赖的JAR文件在lib文件夹下,不同的应用需要的JAR包是不同的。下面给出开发struts2程序需要的最少的JAR:
    1
    2
    3
    4
    5
    6
    struts2-core-2.x.x.jar:struts2框架的核心类库
    xwork-core-2.x.x.jar:XWork类库,struts2在其上面构建
    ognl-2.6.x.jar:对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性
    freemarker-2.3.x.jar:struts2的UI标签的模板使用FreeMarker编写
    commons-logging-1.1.x.jar:ASF出品的日志包,struts2框架使用这个日志包来支持Log4j和JDK1.4+的日志记录
    commons-fileupload-1.2.1.jar:文件上传组件,2.1.6之后必须加入此文件。

struts.xml

struts2的默认配置文件为struts.xml,

1
2
3
4
5
6
7
8
<?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>

web.xml

框架通过Filter(在web.xml中配置)启动。需要在web.xml中配置,

1
2
3
4
5
6
7
8
<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>

StrutsPrepareAndExecuteFilter中的init()方法将会读取类路径下默认的配置文件struts.xml完成初始化操作。
struts2读取到struts.xml的内容之后,会以JavaBean的形式存放在内存中,以后每次struts2对用户的请求处理将会使用内存中的数据,而不会每次都去读取struts.xml完成初始化操作。

第一个struts2应用

第一步不做太难的,从HelloWorld做起

配置文件struts.xml

1
2
3
4
5
6
7
8
9
10
11
<?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>
<package name="zjustruts" namespace="/test" extends="struts-default">
<action name="helloworld" class="cn.zju.struts.HelloWorldAction" method="execute">
<result name="success">/WEB-INF/page/MyJsp.jsp</result>
</action>
</package>
</struts>

HelloWorldAction

HelloWorldAction类的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class HelloWorldAction {

private String message;

public String getMessage() {
return message;
}

public String execute(){
message = "我的第一个struts应用";
return "success";
}
}

jsp页

在jsp也中,通过${message}即可获得action传递过来的值。
最后,发布到服务器,通过http://localhost:8080/struts01/test/helloworld进行访问。
注:在配置文件中,action中配置的method返回值都是String类型的,浏览器在请求时只要请求http://localhost:8080/struts01/test/helloworld即可,不需要具体知道hello.jsp路径。

struts2的处理流程

struts2的处理流程图
StrutsPrepareAndExecutFilter是struts2框架的核心控制器,它负责拦截由

1
<url-pattern>/*</url-pattern>

指定的所有用户请求,当请求到达时,该Filter会过滤用户的请求。默认的情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入struts框架处理,否则框架就会忽略这个请求。当请求转入struts框架处理时会先经过一系列的拦截器,然后再到Action。

注:与struts1不同的是,struts2对用的每一次请求都会创建一个Action,所以上struts2中的Action是线程安全的。

为多个应用指定多个struts配置文件

有时为了提供struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个,然后在struts.xml文件中包含其他配置文件:

1
2
3
4
<struts>
<include file="struts-user.xml"/>
<include file="struts-order.xml"/>
</struts>

文章目录
  1. 1. struts2
  2. 2. 搭建struts2开发环境
    1. 2.1. 导入JAR文件
    2. 2.2. struts.xml
    3. 2.3. web.xml
  3. 3. 第一个struts2应用
    1. 3.1. 配置文件struts.xml
    2. 3.2. HelloWorldAction
    3. 3.3. jsp页
  4. 4. struts2的处理流程
  5. 5. 为多个应用指定多个struts配置文件