码迷,mamicode.com
首页 > Web开发 > 详细

JSP页面EL表达式不解析

时间:2016-01-16 23:43:58      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

问题是这样:在搭建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表达式是无法正确别解析的,

分别是:

  1. Application server in question doesn‘t support JSP 2.0. (应用服务器不支持JSP2.0)
  2. The web.xml is not declared as Servlet 2.4 or higher.  (web.xml中servlet版本没有声明在2.4以上)
  3. The @page is configured with isELIgnored=true. (页面上配置了<%@ page isELIgnored="true" %> )
  4. The web.xml is configured with <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。

JSP页面EL表达式不解析

标签:

原文地址:http://www.cnblogs.com/frank-pei/p/5136492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!