访问前台页面${pageContext.request.contextPath}/el表达式失效问题解决
访问前台页面${pageContext.request.contextPath}/el表达式失效问题解决
最近在做项目整合这个问题,然后在项目整合的时候,遇到了好多问题,这是其中一个,在此留作记录吧,虽然关键点不是我处理好的。
访问前端页面,我先描述一下具体出现的现象:我访问前端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
- <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 - xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 - 修改后的Web.xml...Web-App
 - <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
 - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 - xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
 - 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声明部分吧,如下:
- web-app_2_2.xsd
 - <?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">
 - <?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">
 - web-app_2_3.xsd
 - <?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">
 - <?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">
 - web-app_2_4.xsd
 - <?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">
 - <?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">
 - web-app_2_5.xsd
 - <?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">
 - <?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)
访问前台页面${pageContext.request.contextPath}/el表达式失效问题解决的更多相关文章
- JSP之项目路径问题(${pageContext.request.contextPath},<%=request.getContextPath()%>以及绝对路径获取)
		
本随笔这是作为一个记录使用,以备后查.项目完成之后本地部署OK,本地Linux部署OK,都可以正常的访问,可是当我把它部署到服务器上面的时候,首页可以正常访问,可是当发出请求的时候却报错误了,说找不到 ...
 - 关于在JSP页面中为什么一定要用${pageContext.request.contextPath}来获取项目路径,而不能用${request.contextPath}?
		
这里的疑问在于pageContext和request都是JSP中的内置对象之一,为什么不直接用${request.contextPath}来获取项目路径? 出现这种疑问,其实是将JSP的内置对象和EL ...
 - ${pageContext.request.contextPath} JSP取得绝对路径
		
一.问题 JSP中究竟采用绝对路径还是采用相对路径随着所采用技术的越来越复杂,这个问题也变得越来越难以解决. 1)采用相对路径遇到的问题 相对路径固然比较灵活,但如果想复制页面内的代 ...
 - pageContext.request.contextPath 和 request.getContextPath()
		
作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的. El表达式的写法:${pageContext.request.contextPath} jsp的写法:<%=request.g ...
 - 关于${pageContext.request.contextPath}的理解 (转载)
		
${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> . 也就是取出部署的应用程 ...
 - ${pageContext.request.contextPath}无法解析
		
摘要 突然出现无法解析${pageContext.request.contextPath}的问题,在点击<a href="${pageContext.request.contextPa ...
 - 上下文路径request.getContextPath();与${pageContext.request.contextPath}
		
(1) request.getContextPath();与${pageContext.request.contextPath}都是获取上下文路径: 1. request.getContextPath ...
 - ${pageContext.request.contextPath}是JSP取得绝对路径(转载)
		
${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> . 也就是取出部署的应用程 ...
 - ${pageContext.request.contextPath}的解释以及和request.contextPath的区别
		
JSP中究竟采用绝对路径还是采用相对路径随着所采用技术的越来越复杂,这个问题也变得越来越难以解决. 1)采用相对路径遇到的问题 l 相对路径固然比较灵活,但如果想复制页面内的代码却变得比较困难,因为不 ...
 
随机推荐
- 《基于Nginx的中间件架构》学习笔记---1.环境配置
			
一.环境调试确认 (四项确认) 1.确认系统网络 ping www.baidu.com 2.确认yum可用 yum list|grep gcc 3.确认关闭iptables规则 iptables -L ...
 - 单击Gridview中LinkButton,获取当前行索引及某单元格值,进行相关处理
			
1.在Gridview中添加模板列,在其中加入Linkbuttion,增加CommandName属性 (设置命令名),并赋值 <asp:TemplateField HeaderText=&quo ...
 - 7-OKHttp使用详解,步骤挺详细的,适合初学者使用!
			
OKHttp使用详解,步骤挺详细的,适合初学者使用! 一,OKHttp介绍 okhttp是一个第三方类库,用于android中请求网络. 这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Squ ...
 - idea中快捷键设置为eclipse中快捷键
			
打开file-settings,然后搜索key,在keymap中选择eclipse (1) (2)
 - rbac集成  权限分配。之用户管理
			
流程都是一样的.就不在详细的记录.只写一点需要注意的地方! 或者 可以改进的地方! 1. 用户表中 只有. name password email 三个字段. 但是添加用户的页面,应该还要有确认密码 ...
 - Struts2把数据封装到集合中之封装到Collection中
			
数据封装到集合中,可以封装到集合中,也可以封装到Map中.该篇博客主要讲解数据封装到集合中的封装到Collection中. 1. 封装复杂类型的参数(集合类型 Collection .Map接口等) ...
 - jqPaginator分页(每次只取一页数据)
			
应用技术点:jqPaginator.template7.bootstrap.css 参考网址: jqPaginator:http://jqpaginator.keenwon.com/#a3 templ ...
 - go 语言实现一个简单的 web 服务器
			
学习Go语言的一些感受,不一定准确. 假如发生战争,JAVA一般都是充当航母战斗群的角色.一旦出动,就是护卫舰.巡洋舰.航母舰载机.预警机.电子战飞机.潜艇等等浩浩荡荡,杀将过去.(JVM,数十个JA ...
 - Apache Commons configuration使用入门
			
使用Commons Configuration可以很好的管理我们的配置文件的读写, 官网:http://commons.apache.org/configuration 需要用到commons-la ...
 - hdu 5692(dfs+线段树) Snacks
			
题目http://acm.hdu.edu.cn/showproblem.php?pid=5692 题目说每个点至多经过一次,那么就是只能一条路线走到底的意思,看到这题的格式, 多个询问多个更新, 自然 ...