JFinal拦截器Interceptor

今天我们先来看一看 Interceptor 
Interceptor 是 JFinal AOP 的实现方式,通过实现 Interceptor 接口以及使用@Before
annotation 可以细粒度地进行配置。Interceptor 并非线程安全的,线程安全拦截器需要继承 PrototypeInterceptor 来实现。
①先来回顾Controller的用法
创建 TestInterceptorController类 extends Controller
在Config中配置路由 me.add("/interceptor",TestInterceptorController.class);
②新建Interceptor 继承 PrototypeInterceptor  
public class MyInterceptor extends PrototypeInterceptor {
 @Override
 public void doIntercept(ActionInvocation ai) {
  System.out.println("Before action invoking");
  ai.invoke();
  System.out.println("After action invoking");
 }
}
③配置使用:
拦截器的配置有三种:
一是在Config进行全局拦截配置:
@Override
 public void configInterceptor(Interceptors me) {
  me.add(new MyInterceptor());
 }
二是使用注解在Controller层面进行配置
@Before(MyInterceptor.class)
public class TestInterceptorController extends Controller{

 public void index() {
    System.out.println("Running in invoking");
  renderText("Hello TestInterceptor!!");
 }
}
以上两种方法执行后
控制台显示结果:

三是使用注解在Action方法上配置:
创建新拦截器
public class ActionIntercetor extends PrototypeInterceptor {
 @Override
 public void doIntercept(ActionInvocation ai) {
  System.out.println("这是ActionIntercetor拦截器");
  ai.invoke();
 }
}
Controller中加上action方法 test
@Before(ActionIntercetor.class)
 public void test(){
  renderText("Action拦截器");
 }
控制台:Action级别,Controller级别跟全局一起用的结果,先执行全局,再执行Controller,最后是Action的。

另外注解和Config中的add方法是可以配置多个拦截器的。


④好,我们来看看拦截器的应用:乱码问题解决

我们使用get的方式传中文给服务器,看看会有什么情况发生
我们发现返回了乱码
如果这样做呢?
发现没问题好的,我们尝试解决一下test方法里面的乱码问题:
Controller ctrl = ai.getController();
  System.out.println(ai.getMethodName());
  System.out.println(ctrl.getParaMap());
  ai.invoke();
我们发现JFinal给我们封装的比较好,无法得知客户端是用get还是post的方法提交的,这解决起来有点棘手。
查过资料后有两个解决方案:
一是改源码
一个奇怪的问题,在jfinal1.1.6的时候,我使用get方法执行 ”delete/1-你好“ 没问题

但是在 jfinal 1.3,同样的代码,"你好"在controller中看到的是乱码

我的环境是glassfish,一直没有变过,只是版本进行过升级,页面设置的也是utf-8。

找到问题了,是因为1.1.6在JfinalFiter使用的是request.getServletPath(),在1.3中修改为request.getRequestURI(),

String target = request.getRequestURI();

应修改为 String target = URLDecoder.decode(request.getRequestURI(),encoding);就好了

二是客户端做处理:

在get请求的时候,在url提交前进行一下urlEncode

但尝试过使用urlEncode发现未奏效,时间问题就没再探讨,各位有谁能解决GET请求乱码问题还请多交流。
























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值