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>  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM