JSP页面中使用${pageContext.request.contextPath},出现乱码,404问题

一、问题

在JSP页面中使用${pageContext.request.contextPath}来访问资源路径时候出现如下问题

  1. 在浏览器的地址栏出现乱码

EL表达式未解析

  1. 浏览器页面出现404问题,访问不到对应的资源路径

二、问题分析

  • 针对问题1,可以看出地址中出现乱码并且包含URL编码(%7B、%7D),通过URL解码,我们可以得到%7B、%7D分别为“{”、“}”。也就是说这个EL语句${pageContext.request.contextPath}并未解析,那这个错误的路径自然会出现404问题。(查看源码验证,和我们想的一致,如下图所示)

查看源码验证

  • 问题变成了EL表达式语言在浏览器不解析问题,通过查阅资源得到,2.4之前的web.xml中EL表达式默认是不解析的,所以在2.4之前的web项目中,需要显式的声明解析EL表达式。(我在此处使用的是2.3的版本,是Maven默认骨架创建的)

三、解决方法

  • 方法1:在jsp文件的<%@ page %>中添加isELIgnored属性值设置为false。此方法只能作用在当前jsp文件上,如果需要设置更多页面支持EL表达式,需要每个页面添加isELIgnored=“false”属性值。
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  • 方法2:如下所示,修改web项目版本到2.4及以上。这个引用头我是根据此篇博客由IDEA重新生成的。此方法,所有的jsp文件都自动支持使用EL表达式。
<!-- 引入此web.xml头信息 --->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

如果在<web-app>标签上,有如下文档约束需要删掉

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值