首页 > 其他分享 >访问前台页面${pageContext.request.contextPath}/el表达式失效问题解决

访问前台页面${pageContext.request.contextPath}/el表达式失效问题解决

时间:2023-09-14 15:32:31浏览次数:31  
标签:xml el 版本 web app contextPath request JSP xsd


最近在做项目整合这个问题,然后在项目整合的时候,遇到了好多问题,这是其中一个,在此留作记录吧,虽然关键点不是我处理好的。


访问前端页面,我先描述一下具体出现的现象:我访问前端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

 

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声明部分吧,如下: 



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)

标签:xml,el,版本,web,app,contextPath,request,JSP,xsd
From: https://blog.51cto.com/u_16021118/7470709

相关文章

  • Training language models to follow instructions with human feedback
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!NeurIPS 2022 Abstract将语言模型做得更大并不能从本质上使它们更好地遵循用户的意图。例如,大型语言模型可能生成不真实、有害或对用户毫无帮助的输出。换句话说,这些模型与其用户不一致。在本文中,我们展示了一种通......
  • dell服务器配置idrac IP
    一、通过系统设置去配置idrac的IP,接上服务器的电源,开机,开机大概会加载3到5分钟(前面一两分钟可以不按,等界面提示),一直按F2,配置iDRAC地址:1、开机启动期间,按“F2=SystemSetup”(系统设置)2、选择“iDRACSettings”(iDRAC设置)3、选择“Network”(网络设置)4、退出并保存配置5、从......
  • 从零开始使用vue2+element搭建后台管理系统(实现按钮权限控制)
    思路:登录后请求用户信息接口,后端返回用户信息中包括权限数组,数据格式belike: 前端对用户信息进行存储(对没错又是假接口)://获取用户信息asyncgetUserInfo(mobile){try{this.loading=true;constres=awaitgetInfo(mobile);......
  • 调用excel数据自动生成word文档
    应用场景:相信很多时候,您是否有过和博主一样在WORD里面重复制作某种资料的工作。比如给定了一份模板,需要根据不同内容制作出不同的word,但模板是一样的。一般情况下就是老老实实的一份一份的去填写(但人力填写难保证不出错,精力有限)。那么有没有可以自动生完成word的办法呢?答案是肯定......
  • (Windows Hadoop环境配置)IDEA:ERROR util.Shell: Failed to locate the winutils bina
    ERRORutil.Shell:Failedtolocatethewinutilsbinaryinthehadoopbinarypath出错原因:还没有在windows上配置hadoop环境变量。解决:在windows上配置hadoop环境变量参考:windows下缺少windutils.exe和hadoop.dll的解决方法_winuntil.exe_许你常欢的博客-CSDN博客下载好对......
  • Office学习之excel
    报了一个简知学office课程,贵了点,还是能学到不少东西的,当然如果你勤奋好学这些资料网上应该也有,我比较懒。之前也学了一部分,但是前面学后面忘,尤其是excel用的不多的情况下,很快就忘了,就想着把一些知识点记录下来知识点一:数据表格内容叠在一起,一列列的双击太费事,将鼠标放在空白处然......
  • How to delete a file in Node.js All In One
    HowtodeleteafileinNode.jsAllInOnedelete/removefs.unlinkSyncfs.unlinkSync(path)path<string>|<Buffer>|<URL>Synchronous(unlink(2).Returnsundefined.fs.unlinkfs.unlink(path,callback)path<string>|<B......
  • Cisco Nexus 9000v 虚拟机换机系统软件 NX-OS Release 10.4(1)F 发布 - 学习 Nexus 和
    CiscoNexus9000vSwitch,NX-OSRelease10.4(1)F请访问原文链接:https://sysin.org/blog/cisco-nexus-9000v/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgNX-OSSystemSoftwareReleaseDateCiscoNX-OSRelease10.4(1)F2023-08-18CiscoNX-OSRel......
  • 16个桌面Linux用户必须要知道的Shell命令
    有些人仍然会有这中愚蠢的想法,他们认为使用Linux就必须使用Linuxshell命令。胡说!你可以不懂得任何Linux命令,比如说ps,grep,ls等,但是你仍然可以使用很多现代的Linux桌面发行版。Linux的系统管理员与桌面用户不一样,他们不像桌面用户一样使用Cinnamon,GNOME,Unity,或者KDE,他们所......
  • 部署错误解决(An error occurred while processing your request.)
     Anerroroccurredwhileprocessingyourrequest.RequestID:00-613112becd7848f0226b77690eb71d00-3769cb0d7144d878-00DevelopmentModeSwappingtoDevelopmentenvironmentwilldisplaymoredetailedinformationabouttheerrorthatoccurred.TheDevelo......