這是一個spring mvc初學者可能會遇到的問題。代碼如下:
@Controller
@RequestMapping(value="/home")
public class HomeController {
@RequestMapping(value = "/index")
public ModelAndView Index(Model model)
{
model.addAttribute("msg", "hello,springmvc");
return new ModelAndView("index");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;">
<title>Insert title here</title>
</head>
<body>
${msg}
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
運行結果不是我們希望的hello,springmvc
,而是${msg}
。
導致這個結果的原因是JSP的版本問題,有可能你的項目目前的默認版本是1.2,這個版本默認是不開啓EL表達式的。
解決辦法有兩個,最直接的辦法是,在JSP頁面的上方加入一個標籤,開啓EL表達式
<%@ page isELIgnored="false" %>
- 1
當然,如果每個頁面都要加這麼一行的話也很不爽,你可以將你的web.xml中的web-app節點加上下面的屬性
<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_3_1.xsd"
version="3.1">
......
</web-app>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
就會使用JSP2.0,而JSP2.0默認是開啓EL表達式的。
我在寫這篇博客是也很糾結,解決問了以後,本來想重現一下錯誤,把代碼改回來,改回來後卻發現EL表達式也可以解析了。不得已,爲了搞明白到底是爲什麼,我又新建了一個項目,把主要的代碼拷貝過來,問題又重現了。我改完web.xml文件,並沒有馬上生效,而是等了幾秒種後我又刷新頁面才生效的。我又把web.xml中的代碼撤銷,重新部署,EL表達式也神奇般地解析了