标签:
问题是这样:在搭建springMVC环境的时候,笔者写了一个简单的Controller如下:
@Controller public class HelloController { @RequestMapping(value = "/hello.do", method = RequestMethod.GET) public String hello(Model model) { model.addAttribute("hello", "hello_SpringMVC"); model.addAttribute("message", "Hello SpringMVC"); return "hello"; } }
调用这个控制器,返回hello.jsp,页面代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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>Insert title here</title> </head> <body> ${hello}<br> ${message}<br> ${hello123 } </body> </html>
正常情况下页面应该会输出字符串信息,可是实际上输出结果是未经解析的EL表达式。
笔者查看了日志,发现hello和message都正确的转发到了hello.jsp中,可是EL表达式为什么没有正确的解析呢?
经过查阅资料,有四种情况下EL表达式是无法正确别解析的,
分别是:
web.xml
is not declared as Servlet 2.4 or higher. (web.xml中servlet版本没有声明在2.4以上)
@page
is configured with isELIgnored=true
. (页面上配置了<%@ page isELIgnored="true" %> )
<el-ignored>true</el-ignored>
in <jsp-config>
. (web.xml中显式地配置了忽略EL表达式)最终发现我的web.xml中声明的servlet版本是2.3,所以默认是不自动解析EL表达式的。
而我的web.xml这样是使用了maven-archetype-webapp创建的缘故。
<!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> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
只要更改成如下即可, 版本最好是你项目中使用的JSP版本,
<?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_3_0.xsd" id="WebApp_ID" version="3.0"> ... </web-app>
总结一下:页面无法解析EL表达式是因为web.xml中JSP版本在2.4一下,而我在项目中使用的是JSP3.0,原因在于工程是通过maven-archetype-webapp创建的,而这个maven工程默认还在使用JDK1.5。
标签:
原文地址:http://www.cnblogs.com/frank-pei/p/5136492.html