使用intellj idea 启动tomcat测试一个简单war包,测试里面一个spring mvc 页面, 使用jstl方式时出现一个怪问题,记录下:
index.jsp页面内容如下:
<%@ page import="java.util.Date" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!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>Index</title> </head> <body> <p> Hello Spring MVC!!! </p> <p> <% Date now1 = new Date(); %> 服务器时间1: <fmt:formatDate value="<%=now1%>" pattern="yyyy-MM-dd HH:mm:ss" /> </p> <p> 服务器时间2: <fmt:formatDate value="${now2}" pattern="yyyy-MM-dd HH:mm:ss" /> </p> </body> </html> IndexController内容:
@Controller public class IndexController { @RequestMapping(value = {"", "/index"}) public ModelAndView dicts() { ModelAndView mv = new ModelAndView("index"); mv.addObject("now2", new Date()); return mv; } }
测试结果,出现错误:
Unable to convert string [${now2}] to class [java.util.Date] for attribute [value]: [Property Editor not registered with the PropertyEditorManager]
如果把jsp页面中 “服务器时间2xxxx” 这行注释掉又一切正常,这就奇怪了。
后来在网上找到解决方案:发现有由于web.xm
声明的问题:
原来声明:
<!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 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" metadata-complete="true" version="3.0"> 。。。。 </web-app>
便不会出现这个问题了。网上有说是因为Tomcat的支持web.xml的Servlet是2.5版本。
记录下!
DONE!