訪問前台頁面${pageContext.request.contextPath}/el表達式失效問題解決


訪問前台頁面${pageContext.request.contextPath}/el表達式失效問題解決

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/AinUser/article/details/71439806

最近在做項目整合這個問題,然后在項目整合的時候,遇到了好多問題,這是其中一個,在此留作記錄吧,雖然關鍵點不是我處理好的。

 

訪問前端頁面,我先描述一下具體出現的現象:我訪問前端jsp頁面的時候,jquery文件,js,css樣式等都會失效,也就是沒有引入到jsp頁面當中。

查看瀏覽器console的時候,發現${pageContextrequest.contextPath}並沒有生效,而是現實${^&^%Sd}一對亂碼在里面

 

首先分析一下,前台頁面報404這個問題,肯定是路徑有問題,但是如果你的文件代碼是原模原樣的copy過來的話,就又會有疑問了,同時也就排除了代碼錯誤的查詢點。

然后我再網上查詢了一番,有叫輸出一下<% =request.getContextPath();%>的,還有的叫在page上面加上:<%@ page isELIgnored="false" %>

后面的這招確實很管用,但是如果頁面引用的文件很多的話,就不能通過這種方法根本性的解決問題。

 

然后我找到了一篇文章上面說出了:引入el表達式失效的問題,我覺得這個說的是我的問題的關鍵點

el表達式失效,導致$符號不起作用才會出現上面的這種情況,具體的解決辦法:

那篇文章上面說:是因為web.xml文件中的標頭版本不對

2.3.xsd中默認的isELIgnored=“”“true”  以上版本就不會出現這種問題

 

我的是因為web.xml文件標頭文件不對,我重新在原來的項目中拷貝了一下,調整了一下沖突,就ok了

我覺得如果我不貼出webxml的標頭,還是有人會去搜一下,可能又是麻煩什么的一大堆了

<?xml version="1.0 encoding="UTF-8"?>

<web-app xmls:xsi="http"//www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

version="3.0">

 

下面這個是我借鑒的這篇文章

 

把web.xml  中Web-App版本修改到2.4

 

 

 

[html]  view plain  copy
 
  在CODE上查看代碼片派生到我的代碼片
  1. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  2.    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  3.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  5. 修改后的Web.xml...Web-App  
  6. <web-app xmlns="http://java.sun.com/xml/ns/j2ee"  
  7.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  8.    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"  
  9.    version="2.4">     

 

為什么要修改,原因是jboss-4.0.5太低了....如果是jboss-4.2.5.就不用修改.

 

以下是網上找到的.只試了修改Web.xml.成功了.

 

 

Tomcat 5.5使EL表達式不被解析。

 

現象

代碼${userSession.user_name}是JSP中的一個代碼片段;

如果部署到tomcat5.5中,不會顯示出session中的變量user用戶名,而只會把 ${userSession.user_name}打印出來,猜測很可能是tomcat5.5的bug,不解析(或屏蔽了)EL表達式。

 原因

如果web.xml中聲明部分的schema版本為2.5或者以上,而tomcat使用的是5.5.x以下的版本的時候就會出現在頁面直接顯示而不解析jstl/el表達式。如果web.xml中聲明部分的schema版本為2.5或者以上,tomcat使用使用的是6.0以上則不出現這種問題。

 解決方案

(1)升級tomcat容器至tomcat6(推薦方法)。

(2)修改web.xml中聲明部分的schema版本為2.4  (已驗證,果然可以~)。

(3)在使用了EL表達式的所有JSP頁面的中加入page指令添加 isELIgnored="false",

       形如:<%@ page    isELIgnored="false"  %>(比較麻煩)。

-----------------------------------------------------------------------------------------

jsp頭一定要加上isELIgnored="false",否el會不被執行。

如:

<%@ page language="Java" contentType="text/JavaScript; charset=UTF-8" 

        isELIgnored="false" buffer="24kb" pageEncoding="UTF-8"%>

  好久沒用EL表達式了。由於以前做項目都是用struts2的標簽。最近做一個項目用公司以前的老項目的框架。所以用的就是struts1.而struts1的標簽我一個都不會。只好決定用JSTL標簽。取值就只能用EL表達式了。

 -----------------------------------------------------------------------------------------

原因是JSp頁面的isELIgnored值不知道被誰給改了。

 解決辦法:1,在JSP頁面上面加上<%@ page isELIgnored="false"%>

<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>

 C標簽有兩種加載方式1:<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

                             2:<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>

 這里必須用第二種才能解析。

 

 -----------------------------------------------------------------------------------------

 

今天也碰到el表達式無法解析的事情,於是在網上查詢了下,盜取了一篇,說的挺詳細的! 

web.xml聲明部分一般分為如下版本的xsd, 

web-app_2_2.xsd 

web-app_2_3.xsd 

web-app_2_4.xsd 

web-app_2_5.xsd 

 

更詳細的列出各版本web.xml聲明部分吧,如下: 

 

[html]  view plain  copy
 
  在CODE上查看代碼片派生到我的代碼片
  1. web-app_2_2.xsd   
  2. <?xml version="1.0" encoding="UTF-8"?>     
  3. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/dtd/web-app_2_2.dtd">     
  4.    
  5. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/dtd/web-app_2_2.dtd">   
  6.    
  7. web-app_2_3.xsd   
  8. <?xml version="1.0" encoding="UTF-8"?>     
  9. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">     
  10.    
  11. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">   
  12.    
  13. web-app_2_4.xsd   
  14. <?xml version="1.0" encoding="UTF-8"?>     
  15. <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">     
  16.    
  17. <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   
  18.    
  19. web-app_2_5.xsd   
  20. <?xml version="1.0" encoding="UTF-8"?>     
  21. <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">     
  22.    
  23. <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">   

 

 

 

確定web.xml里的xsd版本之后一定要在JSP的聲明(<%@page %>)部分加一行,如下: 

<%@ page isELIgnored="false" %> 

這樣設為false才能解析EL表達式。 

經過各版本的test之后.... 

注意!! 其中servlets 2.4(我沒記錯的話JSP 2.0出來之后的第一個版本),這個版本的isELIgnored默認設置為false。所以使用web.xml里用web-app_2_4.xsd聲明的時候在JSP頁面不用特意聲明。

 

 

------------------------------------------------------------

 

原因:問題在web.xml配置文件上,web.xml聲明部分一般分為如下版本的xsd, 

         web-app_2_2.xsd 

         web-app_2_3.xsd 

         web-app_2_4.xsd 

         web-app_2_5.xsd 

         具體聲明代碼就不列出,網上可以找到,查找以前項目的web.xml文件也可以。 在jsp頁面的<%@ page isELIgnored="false" %>聲明中,將isELIgnored屬性設為false,EL表達 式才可以正常顯示,在2.4版本之前的版本,isELIgnored默認為true,所以只能在JSP頁面設置這個屬性為false才可以。2.4版本中isELIgnored屬性默認為false,因此EL表達式可以直接使用。 

 

方法:1.JSP頁面中<%@ page isELIgnored="false" %>,每個頁面都如此,就會很麻煩。 

         2.將web.xml中的聲明改為2.4版本,如下: 

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd"> 

 

下面是官方Documention中isELIgnored Attribute的詳解: 

The isELIgnored Attribute 

• Format 

– <%@ page isELIgnored="false" %> 

– <%@ page isELIgnored="true" %> 

Purpose 

– To control whether the JSP 2.0 Expression Language 

(EL) is ignored (true) or evaluated normally (false). 

• Notes 

– If your web.xml specifies servlets 2.3 (corresponding to 

JSP 1.2) or earlier, the default is true 

• But it is still legal to change the default—you are permitted 

to use this attribute in a JSP-2.0-compliant server 

regardless of the web.xml version. 

– If your web.xml specifies servlets 2.4 (corresponding to 

JSP 2.0) or earlier, the default is false 

 

PS: 我本來的版本是2.5,以前也沒出過此類問題,感覺可能是Tomcat的版本不一樣造成的問題,在Tomcat中的web.xml中貌似也有可以配置EL可用的定義。這種小問題雖然不起眼,但寫程序時感覺還是很容易遇到的,而且只有在親自寫代碼時才會碰到,書上是找不到的,所以積少成多,也許這就是經驗積累的過程吧! 

 

PS: 2.5版本的也是默認true,要在每個使用EL表達式的JSP設定isELIgnored為false, 

另,引入JSTL可以在本地放置uri="/WEB-INF/c.tld"文件,也可以引入網上的解析文件uri="http://java.sun.com/jsp/jstl/core",同時別忘了需要2個jar包(jstl.jar和standard.jar)

 

 

http://hi.baidu.com/tylzyoudi/item/f690dc17d3d00f0fd1d66d68


免責聲明!

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



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