1、Struts2介绍
Struts2是一个基于MVC设计模式的Web应用框架,本质是一个Servlet
Struts2的主要功能
1、Action上,可以是一个普通的POJO
2、线程上,每一个Action对应一个实例,没有线程上的问题(Servlet单实例)
3、整个ONGL
4、使用值栈技术(ValueStack)技术
5、整合Spring AOP思想的拦截机制
2、Struts2的使用流程
1、导jar包
2、Action类的编写
3、struts.xml文件配置
4、web.xml文件配置过滤器
5、测试
3、Struts2的执行流程
1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;
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。
3、Sturts内部配置相关文件的介绍
1、defalut.properties:配置sturts常量,比如说编码
位置:
struts2-core-2.3.15.3.jar!/org/apache/struts2/default.properties
2、struts-default.xml: struts核心配置文件
truts2-core-2.3.15.3.jar!/struts-default.xml
3、struts-plugin.xml整个其他框架
4、struts.xml:用户自定义核心配置文件
5、web.xml:也可以配置struts常量
参考博客
http://blog.csdn.net/zzjjiandan/article/details/9837869
4、Struts.xml文件配置详解
<!-- 配置文件详解
1.<constant> 用于配置struts常量的
name:struts提供固定常量名称。此名称从 default.properties文件获得
value:常量值
例如:<constant name="struts.devMode" value="true"></constant>
2.<package> struts用于管理所有action类
name:给当前包进行唯一命名,必填项。用于其他包继承的。
例如:struts-default.xml/<package name="struts-default" abstract="true">
将struts已经完成的功能,作为一个包存在。名称是固定值struts-default。
namespace:action访问路径前缀。
例如:"/"
"/hello"
"/a/b/c"
""
extends:用于继承其他包的。
例如:<package extends="struts-default"> 当前action继承struts已经完成功能。
abstract:是否抽象,如果设置为true,表示没有具体action实现功能。(了解)
2.1 <action> 用于配置action类(请求处理类)
name:action名称,用于在请求路径进行访问
class:action类全限定类名
method:用于确定action类中需要执行的方法,默认值:execute
2.2 <result> 用于配置结果集
name:用于确定action类中,方法的返回值
text:标签体用于设置jsp路径
type:结果集类型
dispatcher:请求转发,从一个action到jsp页面,默认值。
redirect:重定向到jsp页面
redirectAction:重定向到另一个action
stream:以流的方法发送浏览器,用于文件下载。
chain:链,在一次请求中,从一个action到另一个action
2.3 <result-types> 用于配置结果集类型的,一般不用,但需要看的懂。
2.4 <interceptors> 用于配置拦截器
<interceptor> 用于注册拦截器的
<interceptor-stack> 拦截器栈,将已经注册的拦截器组合在一起,形成一个栈。
例如:<interceptor-stack name="defaultStack"> 声明一个拦截器栈,名称是:defaultStack
2.5 <default-interceptor-ref>用于确定当前默认拦截器的
例如:<default-interceptor-ref name="defaultStack"/> 将“defaultStack”拦截器栈,声明默认拦截器栈
2.6 <default-action-ref> 如果访问的action不存在,默认执行的aciton。
例如:/a/b/c/d/oneAction 此aciton没有配置,默认情况返回action找不到
如果配置<default-action-ref> 如果存在404时,不显示action找不到,而是指定action
2.7 <default-class-ref > 用于配置 默认action实现类
例如:<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
如果编写配置文件时没有声明class属性,及<action name=""> 将执行ActionSupport类。
3 <include> 将多个struts配置文件组合成一个。
struts.xml 入口配置文件,大家共用的。用于存放通用模块。
<include file="struts-user.xml" />
<include file="struts-book.xml" />
提供子配置文件
struts-user.xml
struts-book.xml
-->
5、HelloWorld
1、UserAction类
public class UserAction {
public String execute() {
return "success";
}
}
2、index.jsp
3、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>
<constant name="struts.devMode" value="true"></constant>
<constant name="sturts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="struts" namespace="/" extends="struts-default">
<action name="userAction" class="com.example.struts.UserAction">
<result name="success" type="">/a/success.jsp</result>
</action>
</package>
</struts>
4、success.jsp文件
5、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>