struts2中已经有此拦截器了,但是这个拦截器的配置太麻烦,还要配置是否开启和日志的级别。本人认为太复杂,没有必要。
统计每个action的执行时间,在测试开发的过程中需要用到。所以将此拦截器的代码简化,并将log4j的日志级别提高到info。一旦测试通过在实际的生产环境中就直接将此拦截器从配置文件中去掉即可。详细的java代码如下:
-
packagecom.work.core.interceptor;
-
-
-
importorg.apache.commons.logging.Log;
-
importorg.apache.commons.logging.LogFactory;
-
importcom.opensymphony.xwork2.ActionInvocation;
-
importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;
-
-
-
publicclassTimerInterceptorextendsAbstractInterceptor{
-
-
-
privatestaticfinallongserialVersionUID=6017311502566041661L;
-
privatestaticfinalLoglog=LogFactory.getLog(TimerInterceptor.class);
-
publicStringintercept(ActionInvocationinvocation)throwsException{
-
longstartTime=System.currentTimeMillis();
- Stringresult=invocation.invoke();
-
longexecutionTime=System.currentTimeMillis()-startTime;
-
StringBuffermessage=newStringBuffer(100);
-
message.append("Executedaction[");
- Stringnamespace=invocation.getProxy().getNamespace();
-
if((namespace!=null)&&(namespace.trim().length()>0)){
-
message.append(namespace).append("/");
- }
- message.append(invocation.getProxy().getActionName());
-
message.append("!");
- message.append(invocation.getProxy().getMethod());
-
message.append("]took").append(executionTime).append("ms.");
-
if(log.isInfoEnabled()){
- log.info(message.toString());
- }
-
returnresult;
- }
- }
分享到:
相关推荐
本例中的`TimerInterceptor`主要用于记录每个Action执行的时间,并将该时间保存到全局上下文中供后续使用。下面是其实现的具体细节: 1. **类定义**:`TimerInterceptor`继承自`AbstractInterceptor`,这是Struts2...
2. **性能监控**:通过拦截器可以统计Action的执行时间,进行性能分析。 3. **权限验证**:拦截器可以实现用户登录检查,防止未授权的访问。 4. **数据校验**:在Action执行前,拦截器可以对输入数据进行校验,确保...
- 每个拦截器都有`intercept()`方法,该方法会在Action执行前后被调用。 - 拦截器链按照配置的顺序执行,如果一个拦截器没有抛出异常,那么就会调用下一个拦截器,直到所有的拦截器都执行完毕或者有拦截器抛出了...
- 日志和性能监控:记录请求信息,统计Action执行时间。 - 数据校验:验证表单数据的合法性。 - 事务管理:在Action执行前后开启和关闭事务。 ### 6. 示例项目 提供的`StrutsInterceptor`压缩包应该包含了使用...
Struts2 拦截器是框架中的一个重要组成部分,它允许开发者在Action执行前后插入自定义的处理逻辑,实现如日志记录、权限检查、事务管理等通用功能,无需在每个Action类中重复编写相同的代码。拦截器是基于Java的动态...
5. Action执行完毕后,按相反顺序执行每个拦截器的`returning`方法。 6. 最终,Dispatcher将结果返回给用户。 **五、拦截器的常见用途** 1. **数据验证**:在Action执行前检查用户输入的有效性。 2. **权限控制**:...
1. **进入**:请求到达Action之前,先按顺序执行拦截器栈中的每个拦截器的`intercept()`方法。 2. **Action执行**:所有前置拦截器执行完毕后,Action的实际业务逻辑被执行。 3. **退出**:Action执行完成后,再按...
拦截器通过组合形成拦截器栈,每个拦截器按照栈的顺序执行,从而实现复杂的功能。 **拦截器的工作原理** 当一个请求到达Struts2框架时,首先会经过ActionInvocation对象,这个对象负责调用实际的动作方法。拦截器栈...
通过定义一系列拦截器并设置它们的执行顺序,你可以实现如日志记录、权限验证、性能监控等通用功能,而无需在每个Action中重复编写这些代码。 二、拦截器的结构与工作原理 1. 拦截器栈:Struts2中的拦截器不是单独...
拦截器是在Action执行前后插入的代码片段,可以用来执行如日志记录、权限检查、事务管理等通用任务,避免在每个Action中重复编写这些代码。在本示例中,拦截器可能被用来验证用户输入、执行性能统计或处理异常。 ...
4. **性能监控**: 计算Action执行时间,统计请求频率等。 5. **数据校验**: 在Action执行前,对请求参数进行验证。 总的来说,Struts2的拦截器机制使得开发者能够轻松地添加自定义行为,提高了代码的复用性和模块化...
每个拦截器都遵循"先入后出"的原则,即最先添加的拦截器最后执行,最后一个添加的最先执行。 2. **执行流程**:当请求到达Action时,Struts 2会根据配置的拦截器栈执行拦截器。每个拦截器都有`intercept()`方法,该...
拦截器栈是由多个拦截器按照特定顺序组成的,每个拦截器都有自己的名字和属性。例如: ```xml <action name="*" class="com.example.MyAction"> <result>success.jsp </action> ``` 在这个例子中...
它通过Action类来处理用户的请求,每个Action对应一个特定的业务操作。当用户发送请求时,Struts2框架会根据配置的Action Mapping找到对应的Action来执行。 拦截器在Struts2中扮演着关键的角色。它们是一系列实现了...
请求会依次经过每个拦截器,直到到达实际的动作类(Action)。 2. **拦截器配置**:配置拦截器通常需要在struts-config.xml配置文件中进行,定义拦截器的类名、参数以及拦截器链的顺序。这使得开发者可以根据项目...
多个拦截器可以按顺序组成一个拦截器栈,对每个Action的执行过程进行拦截。 6. **动态方法访问**:Struts2允许动态地决定调用哪个Action方法,这基于请求参数。例如,请求URL可能包含一个表示方法名称的参数,...
一个拦截器栈就是一个拦截器的有序集合,每个拦截器都有自己的执行顺序。Struts2默认提供了一些内置拦截器,如`params`、`exception`、`validation`等,它们可以按需添加到拦截器栈中。 3. **自定义拦截器** ...