以下内容是基于导入struts2-2.3.32.jar包来讲的

1.struts2配置文件加载的顺序

  struts2的StrutsPrepareAndExecuteFilter拦截器中对Dispatcher进行了初始化,在Dispatcher类的init方法中定义了配置文件的加载顺序,加载的顺序依次是:

0.web.xml

1.default.properties文件
  作用:定义了struts2框架中所有常量
  位置: struts2-core-2.3.32.jar/org/apache/struts2/default.properties

2. struts-default.xml
  作用:配置了bean,interceptor,result等。
  位置:在struts的core核心jar包.struts2-core-2.3.32.jar/struts-default.xml

  struts-plugin.xml
  它是struts2框架中所使用的插件的配置文件。

  struts.xml
  我们的struts2所使用的配置文件。

3.自定义的struts.properties
  就是可以自定义常量。

注意:后加载文件中的配置会将先加载文件中的配置覆盖。

2.struts2结果集

struts-default.xml 默认的结果集

在我们的struts.xml中的<result>标签中的type中可以使用,不写的时候默认dispatcher转发

3.拦截器

struts-default.xml 默认就有拦截器

  1. AliasInterceptor alias 在不同请求之间将请求参数在不同名字件转换,请求内容不变
  2. ChainingInterceptor chain 让前一个Action的属性可以被后一个Action访问,chain类型的result结合使用。
  3. CheckboxInterceptor checkbox 添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox
  4. CookiesInterceptor cookies 使用配置的name,value来是指cookies
  5. ConversionErrorInterceptor conversionError 将错误从ActionContext中添加到Action的属性字段中。
  6. CreateSessionInterceptor createSession 自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。
  7. DebuggingInterceptor debugging 提供不同的调试用的页面来展现内部的数据状况。
  8. ExecuteandWaitInterceptor execAndWait 在后台执行Action,同时将用户带到一个中间的等待页面。
  9. ExceptionInterceptor exception 将异常定位到一个画面
  10. FileUploadInterceptor fileUpload 提供文件上传功能
  11. I18nInterceptor i18n 记录用户选择的locale
  12. LoggerInterceptor logger 输出Action的名字
  13. MessageStoreInterceptor store 存储或访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等。
  14. ModelDrivenInterceptor model-driven 如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中。
  15. ScopedModelDriven scoped-model-driven 如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用ActionsetModel方法将其放入Action内部。
  16. ParametersInterceptor params 将请求中的参数设置到Action中去。
  17. PrepareInterceptor prepare 如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。
  18. ScopeInterceptor scope Action状态存入sessionapplication的简单方法。
  19. ServletConfigInterceptor servletConfig 提供访问HttpServletRequestHttpServletResponse的方法,以Map的方式访问。
  20. StaticParametersInterceptor staticParams struts.xml文件中将中的中的内容设置到对应的Action中。
  21. RolesInterceptor roles 确定用户是否具有JAAS指定的Role,否则不予执行。
  22. TimerInterceptor timer 输出Action执行的时间
  23. TokenInterceptor token 通过Token来避免双击
  24. TokenSessionInterceptor tokenSession Token Interceptor一样,不过双击的时候把请求的数据存储在Session
  25. ValidationInterceptor validation 使用action-validation.xml文件中定义的内容校验提交的数据。
  26. WorkflowInterceptor workflow 调用Actionvalidate方法,一旦有错误返回,重新定位到INPUT画面
  27. ParameterFilterInterceptor N/A 从参数列表中删除不必要的参数
  28. ProfilingInterceptor profiling 通过参数激活profile

自定义拦截器:

A.实现Interceptor接口,创建拦截器类

  1. package com.rong.web.intercept;
  2.  
  3. import com.opensymphony.xwork2.ActionInvocation;
  4. import com.opensymphony.xwork2.interceptor.Interceptor;
  5.  
  6. public class OneIntercepter implements Interceptor {
  7. private static final long serialVersionUID = -1077492315481012347L;
  8.  
  9. @Override
  10. public void destroy() {
  11. System.out.println("OneIntercepter destroy!");
  12. }
  13.  
  14. @Override
  15. public void init() {
  16. System.out.println("OneIntercepter init!");
  17. }
  18.  
  19. @Override
  20. public String intercept(ActionInvocation invocation) throws Exception {
  21. System.out.println("OneIntercepter放行前执行代码!");
  22. //invoke方法是放行!放行执行的是Action要执行的方法,如execute方法。
  23. invocation.invoke();
  24. System.out.println("OneIntercepter放行后执行代码!");
  25. //如果没有放行,则返回该字符串的视图结果有效;否则无效,无效时,采用的是放行Action里执行方法的返回值。
  26. return "error";
  27. //return null;
  28. }
  29.  
  30. }

struts.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <package name="default" namespace="/" extends="struts-default" >
  7.  
  8. <interceptors>
  9. <!-- 配置自定义拦截器 -->
  10. <interceptor name="oneInterceptor" class="com.rong.web.intercept.OneIntercepter">
  11. </interceptor>
  12. <!-- 配置自定义的拦截器栈 -->
  13. <interceptor-stack name="oneStack">
  14. <!-- 必须要有引用默认的拦截器栈 -->
  15. <interceptor-ref name="defaultStack"></interceptor-ref>
  16. <!-- 引用自定义的拦截器 -->
  17. <interceptor-ref name="oneInterceptor"></interceptor-ref>
  18. </interceptor-stack>
  19. </interceptors>
  20. <default-interceptor-ref name="oneStack"></default-interceptor-ref>
  21. <action name="action" class="com.rong.web.action.MyAction">
  22. <result>/one.jsp</result>
  23. </action>
  24. </package>
  25. </struts>

多个拦截器的情况:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <package name="default" namespace="/" extends="struts-default" >
  7.  
  8. <interceptors>
  9. <!-- 配置自定义的多个拦截器 -->
  10. <interceptor name="oneInterceptor" class="com.rong.web.intercept.OneIntercepter">
  11. </interceptor>
  12. <interceptor name="twoInterceptor" class="com.rong.web.intercept.TwoIntercepter">
  13. </interceptor>
  14. <!-- 配置自定义的拦截器栈 -->
  15. <interceptor-stack name="oneStack">
  16. <!-- 必须要有引用默认的拦截器栈 -->
  17. <interceptor-ref name="defaultStack"></interceptor-ref>
  18. <!-- 引用自定义的拦截器 -->
  19. <interceptor-ref name="oneInterceptor"></interceptor-ref>
  20. <interceptor-ref name="twoInterceptor"></interceptor-ref>
  21. </interceptor-stack>
  22. </interceptors>
  23. <default-interceptor-ref name="oneStack"></default-interceptor-ref>
  24. <action name="action" class="com.rong.web.action.MyAction">
  25. <result>/one.jsp</result>
  26. </action>
  27. </package>
  28. </struts>

拦截器栈——拦截器链

以栈的方式穿过拦截器链——一来一回(后进先出)

B.继承AbstractInterceptor抽象类,创建拦截器类

  1. package com.rong.web.intercept;
  2.  
  3. import com.opensymphony.xwork2.ActionInvocation;
  4. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
  5.  
  6. public class ThreeIntercepter extends AbstractInterceptor {
  7. private static final long serialVersionUID = -7964326236393832363L;
  8.  
  9. @Override
  10. public String intercept(ActionInvocation invocation) throws Exception {
  11. System.out.println("ThreeIntercepter intercept before!");
  12. invocation.invoke();
  13. System.out.println("ThreeIntercepter intercept after!");
  14. return null;
  15. }
  16. }
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <package name="default" namespace="/" extends="struts-default" >
  7. <interceptors>
  8. <!-- 配置自定义的多个拦截器 -->
  9. <interceptor name="oneInterceptor" class="com.rong.web.intercept.OneIntercepter">
  10. </interceptor>
  11. <interceptor name="twoInterceptor" class="com.rong.web.intercept.TwoIntercepter">
  12. </interceptor>
  13. <interceptor name="threeInterceptor" class="com.rong.web.intercept.ThreeIntercepter">
  14. </interceptor>
  15. <!-- 配置自定义的拦截器栈 -->
  16. <interceptor-stack name="oneStack">
  17. <!-- 必须要有引用默认的拦截器栈 -->
  18. <interceptor-ref name="defaultStack"></interceptor-ref>
  19. <!-- 引用自定义的拦截器 -->
  20. <interceptor-ref name="oneInterceptor"></interceptor-ref>
  21. <interceptor-ref name="twoInterceptor"></interceptor-ref>
  22. <interceptor-ref name="threeInterceptor"></interceptor-ref>
  23. </interceptor-stack>
  24. </interceptors>
  25. <default-interceptor-ref name="oneStack"></default-interceptor-ref>
  26. <action name="action" class="com.rong.web.action.MyAction">
  27. <result>/one.jsp</result>
  28. </action>
  29. </package>
  30. </struts>

4.常量配置

常量配置是放在default.properties文件里

A.URL后缀修改

默认的:

在struts.xml更改:

更改后使用rjl、do、action后缀或者没有后缀都可以访问网页

B.是否开启动态方法调用

略。详细请点击:http://www.cnblogs.com/57rongjielong/p/8157966.html

C.指定默认编码集

默认的:一般不修改,看实际情况是否需要更改

D.设置浏览器是否缓存静态内容

开发阶段一般关闭,上线(生产)阶段打开

E.系统是否自动重新加载文件

开发阶段最好打开,打开后效果仍然不明显。

F.开发模式

默认关闭:

修改并且添加两个文件:

G.视图主题

默认:

更改:

H.指定由spring负责action对象的创建

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

I.上传文件的大小限制

J.自动加载国际化资源文件

当国际化资源修改时,自动加载国际化资源文件,默认值为false

Struts2(四)的更多相关文章

  1. Struts2(四)——页面相关内容

    上篇博客总结了数据流转各个方面的内容,这篇重点说一下框架对于界面上知识. 一,说到页面,记得在总体介绍中,说到Struts2比Struts1的一方面优势就是它支持更多的视图技术(Freemarker, ...

  2. struts2(四) ognl表达式、值栈、actionContext之间的关系

    今天来说说ognl表达式在struts2中的运用. --wh 一.什么是Ognl? 通过百度百科查询到的解释,其中详细的说明了OGNL的作用. 下面我们就对OGNL这5个作用进行讲解 1.存取对象的任 ...

  3. 框架学习之Struts2(四)---拦截器和标签

    一.拦截器概述 1.1 在struts2框架中封装了很多功能,struts2里面封装的功能都是在拦截器里面,struts2里面又很多拦截器,但不是每次这些拦截器都执行,每次执行型默认的拦截器. 默认拦 ...

  4. Struts2(四)Action一接收参数

    一.属性接收参数并输出 导入struts2的包,导入需要的包 和struts.xml配置文件 <?xml version="1.0" encoding="UTF-8 ...

  5. Struts2 (四) — 拦截器

    一.拦截器 1.概述 1.1什么是拦截器 ​ 在struts2中,拦截器(Interceptor)是用来动态拦截Action执行的对象. ​ 拦截器有点类似以前Servlet阶段的Filter(过滤器 ...

  6. Struts2(四):在Action中如何访问Web资源

    1.什么WEB资源? HttpServletRequest,HttpServletRespone,HttpApplication,ServletContext,HttpSession等原生Servle ...

  7. Struts2 四、Struts2 处理流程

    1. 一个请求在Struts2框架中的处理步骤: a) 客户端初始化一个指向Servlet容器的请求: b) 根据Web.xml配置,请求首先经过ActionContextCleanUp过滤器,其为可 ...

  8. 浅谈Struts2(四)

    一.Struts2的拦截器(Intercept) 作用:把多个Action中的共有代码,提取至拦截器,从而减少Action中的冗余代码. 1.Action拦截器 a.编写interceptor类 pu ...

  9. Struts2(四)Struts2配置文件的配置

    Struts2的常见配置 1.Struts2的配置文件的加载顺序: 每次从客户端发送到请求到服务器都要先从Struts2的核心过滤器StrutsPrepareAndExeccuteFilter,这个过 ...

  10. Struts2(四.注册时检查用户名是否存在及Action获取数据的三种方式)

    一.功能 1.用户注册页面 <%@ page language="java" contentType="text/html; charset=UTF-8" ...

随机推荐

  1. 详解Linux运维工程师高级篇(大数据安全方向).

    hadoop安全目录: kerberos(已发布) elasticsearch(已发布)http://blog.51cto.com/chenhao6/2113873 knox oozie ranger ...

  2. go语言带cookie的net客户端请求与[]byte转string

    前些日子参加了一个叫Advent of Code的编程大赛,每天一道题,快活似神仙.这每道题都有自己的拼图数据输入puzzle input,要做题就需要用到该数据,把数据复制过来感觉又太麻烦,于是就兴 ...

  3. Go学习笔记02

    前言 上篇内容,介绍了如何在不同的系统上安装 Go 开发环境和部分参数的配置,也简单介绍了 package 的概念.导入方式和我对包的初始化过程的理解,关于初始化顺序的理解,可能有错误,后期会有修改, ...

  4. scala (5) 可变序列和不可变序列

    /** * 序列分为可变长和不可变长,序列其实就是list,底层是链表结构 * 特点:插入有序,可重复,增加和移除元素很快,查询慢 * 不可变长序列:List * 可变长序列:ListBuffer * ...

  5. PL/SQL轻量版(一)——入门介绍

    一.概述 1.概念对比: SQL:结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目 ...

  6. 20155234 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步骤 (一)单元测试 ...

  7. [BZOJ3218]a + b Problem-[主席树+网络流-最小割]

    Description 传送门 Solution 此处我们按最小割的思路考虑. 暴力:S->i表示该点选黑色的权值b[i]:i->T表示该点选白色的权值w[i].考虑如果某个点i受点j为白 ...

  8. 微信小程序:页面跳转时传递数据到另一个页面

    一.功能描述 页面跳转时,同时把当前页面的数据传递给跳转的目标页面,并在跳转后的目标页面进行展示 二.功能实现 1. 代码实现 test1页面 // pages/test1/test1.js Page ...

  9. Yii 2.0 使用片段缓存

    网站首页footer中的菜单标题是从数据库读取并显示处理的. 也就是 <footer>标题里面是foreach.这样每个人打开网站就查询遍历效率会很低. <footer class= ...

  10. Linux系统中Oracle11g数据库的安装与验证

    1.查看Linux系统的位数 2.下载Oracle10g数据库软件 https://blog.csdn.net/xiezuoyong/article/details/81197688 (需要注册Ora ...