jfinal的绝对路径和action请求路径添加文件夹名称而导致"404 not found"的问题

转载自:http://blog.csdn.net/alan_liuyue/article/details/70224648

  一、发现问题

    在使用jfinal框架的时候,有的jsp页面的action请求是正常的,但有的jsp页面有时候会出现一个问题,

就是请求的action或者url会和上一个path的action添加jsp所在的文件夹名称而导致在新的action无法获得相

应请求出现404的问题,例如:

    正常jsp的请求:Main/User/userIndex,url为:http://localhost:88/test/Main/User/userIndex;

    出现问题的jsp页面的请求:Main/Company/companyIndex,访问的url为:

http://localhost:88/test/Main/User/Main/Company/companyIndex;叠加了文件夹的名称从而导致action的

404问题;


    那么,问题出现在哪里呢?

    首先,由于正常jsp页面请求的时候,action是能够正常访问到的,这就说明,jfinal的路由配置是没有

问题的;

    其次,jfinal的action拦截器是在捕获正确的action之后才触发的,所以与Interceptor拦截器无关;

    那么,问题就出现在jsp页面上了,然后自己在仔细翻阅了一下jfinal的api使用手册,搜索一下网页上关

于jfinal对jsp页面的设计方面的问题,然后找到了问题:

    问题所在:

    原来,jfinal的jsp页面请求的action路径都默认以根路径为访问前提,如果在根目录下有自创的文件夹,

则在访问的时候action路径会自动加上jsp所在文件夹的路径名称,所以视图层一般都需要设置项目的根路径

basePath作为访问的前提,也就是说,必须在jsp页面添加绝对路径的设置,在head添加:

 

 String path = request.getContextPath();  
    String basePath = request.getScheme() + "://"  
            + request.getServerName() + ":" + request.getServerPort()  
            + path + "/";  
       %>  

 加入上面这个然后访问的action就正常了。


    二、解决问题

    然后,另外一个问题又来了,是不是我的每个jsp页面都要添加这几行代码,是不是太麻烦了?

有没有什么解决的方法?

    这里提供几个解决jfinal绝对路径basePath的方法:

    1.将basePath的这几行代码分离出来,单独作为一个jsp页面,然后在每个jsp页面的头部都插入进去,

    使用方法:

    basePath的jsp路径为:/jspUtil/basePathUtil.jsp 则在请求action的jsp页面头部可以使用:

    <%@ include file="/jspUtil/basePathUtil.jsp"%>引用该jsp页面;


    2.在jfinal的处理器上配置basePath,然后在页面上直接引用就可以了,

    使用方法:jfinal的处理器配置如下:

/** 配置处理器 */  
     public void configHandler(Handlers me) {  
         me.add(new ContextPathHandler("basePath"));  

然后在jsp的页面引用如下:

<span style="font-size:18px;">       <a href="${basePath}/Main/User/userIndex">用户测试</a></span>  

 

posted @ 2017-06-27 14:29  icuke  阅读(1868)  评论(0编辑  收藏  举报