前几天练习书上一个代码,发现一个小问题。
代码是这样的:
<%@ 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.jar
和servlet-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