在测试eatj这个免费jsp服务器时,见此博客,我用elcipse Java EE Luna (4.4.1) 新建了一个maven web工程,写了一个最简的servlet和一个页面,在页面中取request的attribute值时发现用
<% String name = String.valueOf(request.getAttribute("name")); %>
能取到值,而用el表达式
${name}
就取不到值。
上网查找资料看到了这个csdn博客,就看了一下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>
啊,生成的竟然是servlet 2.3的(并且还使用dtd
来约束xml文档内容)。 在这时需要在Jsp页面里添加
<%@ page isELIgnored="false" %>
来使页面使用el表达式。 而我此时就纳闷了,以前写的javaweb工程里不需要添加这句代码的呀,想了一下可能是servlet版本的问题,立刻把web.xml的头部改成了servlet2.5的。之后就直接能使用el表达式了。修改后的web.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns: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_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Archetype Created Web Application</display-name>
</web-app>