一、添加国际化支持

默认的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. 【JAVA】【Eclipse】出现This element neither has attached source nor attached Javadoc...的解决方法

    This element neither has attached source nor attached Javadoc and hence no Javadoc could be found Ec ...

  2. sql2000添加表注释,列注释 及修改 删除 注释

    --创建表--create table 表(a1 varchar(10),a2 char(2)) --为表添加描述信息EXECUTE sp_addextendedproperty 'MS_Descri ...

  3. spring quartz 定时器时间格式设置

    "0/10 * * * * ?" 10秒执行一次 "0 0 12 * * ?"每天中午十二点触发"0 15 10 ? * *"每天早上10: ...

  4. jsp调试小技巧

    console.log($("#toolbar")); 打印对象可知道这个对象的参数信息

  5. Data Transformation / Learning with Counts

    机器学习中离散特征的处理方法 Updated: August 25, 2016 Learning with counts is an efficient way to create a compact ...

  6. Android之sqlite的使用 (转载)

    Android中的SQLite使用 首先创建数据库类 public class DatabaseHelper extends SQLiteOpenHelper {       private stat ...

  7. Android Studio中清单文件改versionCode和versionName没效果的原因

    在Android Studio中,项目的versionCode 和versionName 的控制不是在AndroidManifest.xml清单文件中更改的,而是在项目的build.gradle中更改 ...

  8. UNIX域套接字(unix domain)

    UNIX域套接字用于在同一台机器上运行的进程之间的通信. UNIX域套接字提供流和数据报两种接口. 说明:UNIX域套接字比因特网套接字效率更高.它仅赋值数据:不进行协议处理,如添加或删除网络报头.计 ...

  9. MySQL大数据量快速分页实现(转载)

    在mysql中如果是小数据量分页我们直接使用limit x,y即可,但是如果千万数据使用这样你无法正常使用分页功能了,那么大数据量要如何构造sql查询分页呢?     般刚开始学SQL语句的时候,会这 ...

  10. asp.net LINQ实现数据分页

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...