一、添加国际化支持

默认的struts-deault.xml文件中已经定义了国际化拦截器,内容如下

<!—定义国际化拦截器-->
<interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>

该拦截器会在Action执行前执行,默认情况下,会读取用户请求中的request_locale参数,并将参数值存入session(key=WW_TRANS_I18N_LOCALE)

通过改变拦截器的两个参数,可以改变默认值(parameterName:request_locale,attributeName:WW_TRANS_I18N_LOCALE)

使用国际化拦截器的方法如下:

1、配置struts.custom.i18n.resources常量,可以在struts.properties文件中做以下配置(globalMessages是起的一个名字)

#在属性文件中定义BaseName
struts.custom.i18n.resources=globalMessages

2、按照basename_language_country.properties的命名规则添加资源文件

下面添加两个资源文件,汉语(中国)globalMessages_zh_CN.properties

result=\u7ED3\u679C
英语(美国)globalMessages_en_US.properties
result=Result

3、引用方式

继承了ActionSupport的Action文件中

System.out.println(getText("result"));

JSP文件中

<s:text key="result"/>

4、补充

除了可以在struts.properties中配置struts.custom.i18n.resources常量,还可以在struts.xml文件中配置

<!-- I18N资源文件为globalMessages -->
<constant name="struts.custom.i18n.resources" value="globalMessages" />

或者在web.xml文件中配置

<!--定义struts.custom.i18n.resources常量-->
<init-param>
<param-name>struts.custom.i18n.resources</param-name>
<param-value>globalMessages</param-value>
</init-param>

二、对Action做粗略的性能评估

在struts.xml配置文件的<action></action>之间,加入

<interceptor-ref name="timer"></interceptor-ref>

在默认情况下,所有的Action都会调用默认的拦截器栈——defaultStack,使用上面的interceptor-ref可以覆盖默认的拦截器或拦截器栈,

指定的Action将会调用这里指定的拦截器timer,这个拦截器由内置的struts-default.xml文件定义。

这时再访问该Action,进行了两次访问,控制台输出了下面的结果

2012-1-17 12:35:59 com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
信息: Executed action [//i18n!execute] took 234 ms.
2012-1-17 12:36:08 com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
信息: Executed action [//i18n!execute] took 109 ms.

首次运行时,timer拦截器要进行一些初始化工作,第一次的时间是不准确的。通过后面的时间,可以进行一些粗略的性能评估。

三、自定义拦截器

1、创建拦截器类,Struts 2 的拦截器是一个实现了com.opensymphony.xwork2.interceptor.Interceptor接口的类,

也可以通过继承com.opensymphony.xwork2.interceptor.AbstractInterceptor来间接实现

2、实现或覆盖父类的intercept方法,实现拦截器的处理逻辑。

在intercept方法中,可以通过ActionContext.getContext()的静态方法中取得JavaServlet相关的对象,例如取得Session可以

ActionContext.getContext().getSession()

在intercept方法中,可以调用参数中ActionInvocation对象的invoke调用action继续处理用户请求,也可以用return直接返回一个逻辑视图(不再执行action)

3、注册到配置文件

在struts.xml文件中添加新建的拦截器信息,在<package></package>之间添加

<interceptors>
<interceptor name="" class=""></interceptor>
</interceptors>

其中name是为自定义拦截器起得名字,class是添加的类的路径

4、使用自定义拦截器

同(二、对Action做粗略的性能评估),在<action></action>之间加入interceptor-ref标签

Struts 2学习笔记——拦截器相关的更多相关文章

  1. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

  2. SpringMVC 学习笔记(拦截器的配置))

    在设置SpringMVC的拦截器时,需要在SpringMVC中配置 拦截器对象,拦截器的的对象要 实现 HandlerInterceptor 接口 拦截器类的设置: public class inte ...

  3. 1.5(Spring MVC学习笔记) 拦截器(Interceptor)

    一.拦截器 1.1拦截器简介 Spring中的拦截器类似Servlet中的过滤器(Filter),主要用于拦截用户请求, 并进行一定的处理操作(如验证权限.记录日志.设置编码方式等). 1.2拦截器实 ...

  4. [原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. struts 2学习笔记—初学struts 2

    首先我学习了struts 1.x与struts 2的区别: 1.struts 1.x的控制器类必须从Action类继承. 2.struts 2的控制器类可以是一个普通的类,也可以是ActionSupp ...

  6. struts的学习笔记

    Struts 2是在WebWork2基础发展而来的. 注意:struts 2和struts 1在代码风格上几乎不一样. Struts 2 相比Struts 1的优点: 1.在软件设计上Struts 2 ...

  7. DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析

    DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析 彭会锋 本篇主要针对不太熟悉的TZ 故障捕获 和 DB 死区产生两个子模块进行学习研究 感觉TI的寄存器命名还是有一定规律可循的 SEL ...

  8. Struts2基础学习(五)—拦截器

    一.概述 1.初识拦截器      Interceptor 拦截器类似前面学过的过滤器,是可以在action执行前后执行的代码,是我们做Web开发经常用到的技术.比如:权限控制.日志等.我们也可以将多 ...

  9. Struts(十八):通过CURD来学习PrepareInterceptor拦截器

    PrepareInterceptor拦截器的用法: 1.若Action实现了Preparable接口,则Action方法需实现prepare()方法: 2.PrepareInterceptor拦截器S ...

随机推荐

  1. 移动端使用rem适配及相关问题

    移动端适配方案,说多也很多.可以使用百分比布局,但百分比与em都是基于父元素进行计算的,在实际应用中不是很方便.使用rem不仅可以设置字体大小,块大小也可以设置.而且可以良好的适配各种终端,所以这方案 ...

  2. 1117 冲刺一(Day 1)

    冲刺一(第一天) 项目需求确定 现阶段我们进行的项目是到店点餐系统.主要是开发手机端app为用户提供方便快捷的点餐服务.免去顾客到店后遇到因吃饭的人太多而找不到服务人员点餐的窘境.减少了服务人员因为忙 ...

  3. Lua学习笔记(一)-----C#和lua的交互

    一直以来对Lua热更新技术很感兴趣,在上周开始了对Lua的学习,主要学的是uLua. 直接上干货 准备工作: LuaInterface包括两个核心库一个是LuaInterface.dll,一个是Lua ...

  4. C#正则提取html图片等

    去除html标记,比较实用,分享给大家. ///   <summary>   ///   去除HTML标记   ///   </summary>   ///   <par ...

  5. Set,List,Map,Vector,ArrayList的区别(转)

    JAVA的容器---List,Map,Set Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtab ...

  6. mysql数据引擎的概念介绍

    什么是数据库引擎?每种数据库的数据格式,内部实现机制都是不同的,要利用一种开发工具访问一种数据库,就必须通过一种中介程序,这种开发工具与数据库之间的中介程序就叫数据库引擎. 如果你是个赛车手并且按一下 ...

  7. shell 脚本 exit 1 报错:numeric argument required问题解决

    原因是在window环境编辑会有特殊字符,解决办法:sed -i'' "s/\r//" file_name

  8. nodejs安装心得

    首先下载nodejs,http://nodejs.org/download/ 配置系统环境变量 管理员运行cmd, 输入命令 node -v 查看版本 安装npm Npm安装命令 npm-1.3.15 ...

  9. 安装Nexus

  10. Android菜鸟成长记12 -- ORMLite的简单使用

    在我们的开发中,为了提高开发效率,我们一般都会使用到框架,ormilte则是我们必不可少的数据库框架. 对于ORMLite我也是今天才刚刚接触,我们先从一个简单的项目来了解它吧. ORMLite ja ...