关于jsp不支持EL的问题以及如何查看servlet和jsp的版本

博主练习代码时,JSP使用EL表达式遇到问题,给出两种解决方法。在maven项目web.xml添加代码提示错误,发现是2.3版本采用DTD约束,用4.0版本头信息替换可解决。还介绍了查看servlet和jsp版本的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天练习书上一个代码,发现一个小问题。

代码是这样的:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" errorPage="error.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>加法网页</title>
    </head>
    <body>
      ${param.a}+${param.b} = ${param.a + param.b}
    </body>
</html>

想像中的(正确的)结果是这样的:
在这里插入图片描述但是此代码显示出来的结果是这样的:
在这里插入图片描述解决此问题有以下两种方法:
方法一:在jsp代码开头中添加如下一行,当即解决。但是每一次都要记得添加,不太方便。

<%@ page isELIgnored="false"%>

方法二:在web.xml中添加如下代码(好方法),这个方法好处在于,以后在jsp中使用EL表达式不用每一个都指定"isELIgnored="false""。

<jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <el-ignored>false</el-ignored>
        </jsp-property-group>
    </jsp-config>

这里的<el-ignored>标签为false来决定使用EL

但是这时又遇到一个问题:
我用maven创建的项目web.xml如下:

!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>
  <display-name>Archetype Created Web Application</display-name>
</web-app>

直接添加方法二的代码,提示错误,为什么呢?原来以上为web.xml的2.3版本,其采用的是DTD约束,因为只有web.xml版本为2.4及其以上时默认支持EL表达式,2.3或以下版本(isELIgnored默认为“true”),则不会执行EL。

<?xml version="1.0" encoding="UTF-8"?>
<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>

目前试了许多办法,唯一解决的就是用4.0版本的头信息替换2.3的头信息,但是只是此项目解决,创建新项目还是要亲自去改头信息。(最好先查询自己的tomcat目录下webapps/ROOT/WEB-INF下的web.xml再决定和其相同的头信息,不要随便修改)
列如我改成对应的4.0版本这样:

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <display-name>Archetype Created Web Application</display-name>
</web-app>

然后知道web.xml的版本时,看到有人说到servlet,jsp的版本,就去查看了下。
方法为:进入自己tomcat下的lib在目录,找到jsp-api.jarservlet-api.jar分别解压它们,

sudo jar -xvf jsp-api.jar

然后lib下出现一个目录META-INF,进入并打开其下的MANIFEST.MF这个文件会看到最后一行,所以我的jsp版本为2.3
在这里插入图片描述同理,解压Tomcat下lib下的servlet-api.jar,

sudo jar -xvf servlet-api.jar

接下来依然进入lib下的META-INF,

gedit MANIFEST.MF

打开MANIFEST.MF后看到,我的servlet版本为4.0
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值