Struts2基础

来源:互联网 发布:年薪百万知乎 编辑:程序博客网 时间:2024/04/30 08:59

访问过程

参照下图所示


这是struts访问过程


1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);

3、接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问ActionMapper来决定这个请求是否需要调用某个Action;

4、如果ActionMapper决定需要调用某个Action,StrutsPrepareAndExecuteFilter把请求的处理交给ActionProxy;

5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;

6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是 (但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper。

原文链接http://www.cnblogs.com/o-andy-o/archive/2012/04/06/2435400.html


配置文件讲解:

Struts2框架按照如下顺序加载struts2配置

框架本身:
*default.properties
—— 该文件保存在struts2-core-2.3.7.jar 中 org.apache.struts2包里面【保存常量设置】
*struts-default.xml
——该文件保存在struts2-core-2.3.7.jar【很多基本设置,基本beans,interceptor】
struts-plugin.xml
——该文件保存在struts-xxx-2.3.7.jar

后期配置:
*struts.xml
——该文件是web应用默认的struts配置文件【推荐关于struts2的配置都在此处】
struts.properties
——该文件是Struts的默认配置文件【不建议修改此文件】
*web.xml
——该文件是Web应用的配置文件【一般只配置StrutsPrepareAndExecuteFilter】


struts.xml中的相关配置

<constant name="struts.devMode" value="true" /><package name="p1" extends="struts-default" namespace = "/">    <action name="hello" class ="">        <result name = "success" type = "dispatcher">/success.jsp</result>    </action></package>

package name 包名,尽量唯一

struts-default是struts-default.xml定义的一个package,内含大量拦截器和结果集。该包是abstract(指的是包中没有任何action,就是抽象包)。
继承了struts-default的包就继承了它的所有内部定义。


namespace属性
Action的访问路径 = 包名称空间 namespace + Action name属性
namespace默认值 “”

*Action名称搜索顺序

获得请求路径的URI,例如url是:http://server/struts2/path1/path2/path3/test.action

  • 首先寻找namespace为/path1/path2/path3的package,
    如果存在这个package,则在这个package中寻找名字为test的action【若不存在test action方法,转向最后一步】,如果不存在这个package则转下一步骤;
  • 寻找namespace为/path1/path2的package,如果存在这个package,则在这个package中寻找名字为test的action【若不存在test action方法,转向最后一步】,如果不存在这个package,则转下一步骤;
  • 寻找namespace为/path1的package,如果存在这个package,则在这个package中寻找名字为test的action【若不存在action方法,转向最后一步】,如果仍然不存在这个package,转向最后一步。
  • 去默认的namaspace的package下面去找名字为test的action(默认的命名空间为空字符串“/”),如果还是找不到,页面提示找不到action。

Action name : 动作名称,一个包内的action名称必须唯一。
class: 动作类的全名,可选的,默认的是ActionSupport类
method: 动作类中的动作方法。可选的,默认是execute()方法


常量的配置(从default.properties中找)

指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法和freemarker 、velocity的输出

<constant name="struts.i18n.encoding" value="UTF-8"/>

该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开

<constant name="struts.action.extension"value="action"/>

设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭

<constant name="struts.serve.static.browserCache" value="false"/>

当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开

<constant name="struts.configuration.xml.reload" value="true"/>

开发模式下使用,这样可以打印出更详细的错误信息

<constant name="struts.devMode" value="true" />

默认的视图主题

<constant name="struts.ui.theme" value="simple" />

与spring集成时,指定由spring负责action对象的创建

<constant name="struts.objectFactory" value="spring" />

该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为 false

<constant name="struts.enable.DynamicMethodInvocation" value="false"/>

上传文件的大小限制

<constant name="struts.multipart.maxSize" value=“10701096"/>

include标签

不必全部写在一个配置文件中,可以将各个不同模块的配置包含进来,提高扩展性

<include file= "case.xml"></include>
0 0
原创粉丝点击