我正在使用Struts 2.使用拦截器,我在每个页面执行开始时创建一个数据库连接。
例如,如果用户转到“myAction.do”,它将创建数据库连接,然后调用myAction.do
方法。
我现在正在寻找的是拦截器或在页面执行后自动调用方法的任何其他方式,这将关闭数据库连接。
这可能吗?
答案 0 :(得分:5)
在拦截器中,您可以编写预处理和后处理逻辑。
预处理逻辑将在操作执行之前执行 执行动作后执行后处理逻辑。
Struts2提供了非常强大的控制请求的机制 使用拦截器。拦截器负责大部分 请求处理。它们在之前和之前由控制器调用 在调用动作之后,它们位于控制器和之间 行动。拦截器执行日志记录,验证,文件等任务 上传,双重保护等。
无论你在执行动作后执行的invocation.invoke();
之后写什么
答案 1 :(得分:1)
在http://blog.agilelogicsolutions.com/2011/05/struts-2-interceptors-before-between.html
中详细说明你可以有拦截器:
如网站所述,此处为代码示例
拦截之前
public class BeforeInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// do something before invoke
doSomeLogic();
// invocation continue
return invocation.invoke();
}
}
}
在行动和结果之间
public class BetweenActionAndResultInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// Register a PreResultListener and implement the beforeReslut method
invocation.addPreResultListener(new PreResultListener() {
@Override
public void beforeResult(ActionInvocation invocation, String resultCode) {
Object o = invocation.getAction();
try{
if(o instanceof MyAction){
((MyAction) o).someLogicAfterActionBeforeView();
}
//or someLogicBeforeView()
}catch(Exception e){
invocation.setResultCode("error");
}
}
});
// Invocation Continue
return invocation.invoke();
}
}
}
查看后渲染
public class AfterViewRenderedInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// do something before invoke
try{
// invocation continue
return invocation.invoke();
}catch(Exception e){
// You cannot change the result code here though, such as:
// return "error";
// This line will not work because view is already generated
doSomeLogicAfterView();
}
}
}
}