6月2日,晴。“梅子金黄杏子肥,麦花雪白菜花稀。日长篱落无人过,唯有蜻蜓蛱蝶飞”。
在前面的WelcomeController 实例中,见第八天 框架之痛-Spring MVC(一),在WelcomeController.java 中返回 ModelAndView mav = new ModelAndView("hello.jsp" ) 参数为 hello.jsp ,它会对应于当前项目根目录下的 hello.jsp 页面。但 spring mvc 为我们提供了一个特别的视图定位方式,下面改进前面的WelcomeController 实例。
改进一 :在myOneMVC-servlet.xml 中修改代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<bean name="/hello.html" class="edu.eurasia.controller.WelcomeController"></bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
改进二 :在WelcomeController.java 重新定义返回的 ModelAndView 对象
package edu.eurasia.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class WelcomeController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("hello");
mav.addObject("message", "Hello World!!!");
return mav;
}
}
改进三 :在/WEB-INF/jsp 目录下建立hello.jsp 页面
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
${message }
</body>
</html>
进行上面三个改进操作后,重新访问hello.html 会访问到WEB-INF/jsp/hello.jsp 页面。
项目结构图
简析视图定位 :
当返回 ModelAndView 对象名称为hello 时,会给hello 加上前后缀变成/WEB-INF/jsp/hello.jsp 。因此在给前后缀赋值时,应特别注意它和返回的 ModelAndView 对象能否组成一个正确的文件全路径。根据ModelAndView 对象返回页面时,会结合一些配置。这里就是结合了视图定位方式,给viewName加上前后缀进行定位。