首先,处理器的实现和url映射,均使用注解方式。
package com.duxd.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
// 该注解标识了这个类是个Controller,也可用实现Controller接口来获得相同效果
@Controller
public class HelloController {
// 该注解可将url映射到下面的方法
@RequestMapping("/Hello")
视图解析器和注解扫描的配置
<!-- 配置视图解析器 -->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!-- 结果视图的前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 结果视图的后缀 -->
<property name="suffix" value=".jsp"/>
</bean>
<!-- 扫描该包下的注解 -->
<context:component-scan base-package="com.duxd.controller" />
一.通过设置视图解析器和ModelAndView对象
@RequestMapping("/Hello")
public ModelAndView Hello(HttpServletRequest req, HttpServletResponse resp) {
// 重定向,视图解析器的路径设置无效
// ModelAndView mv = new ModelAndView("redirect:/Index.jsp");
// 转发,视图解析器的路径设置无效
// ModelAndView mv = new ModelAndView("forward:/Index.jsp");
// 也是转发,视图解析器的路径设置有效
ModelAndView mv = new ModelAndView();
// 封装要显示到视图的数据
mv.addObject("msg", "Hello Spring MVC Annotation!");
// 视图名(根据视图解析器的设置,寻找WEB-INF/jsp/Hello.jsp,而不是寻找根目录下的Hello.jsp)
mv.setViewName("Hello");
return mv;
}
二.通过Servlet API转发和重定向,视图解析器不干扰路径
@RequestMapping("/Hello1")
public void Hello1(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
// resp.getWriter().print("Hello Spring MVC use HttpServlet API!");
// PrintWriter out = resp.getWriter();
// out.print("Hello Spring MVC use HttpServlet API!");
// 实现重定向
resp.sendRedirect("Index.jsp");
// 实现转发
// req.getRequestDispatcher("Index.jsp").forward(req, resp);
}
三.通过Spring MVC转发或重定向,视图解析器干扰路径
@RequestMapping("/Hello2")
public String Hello2() {
// 转发
// return "Index.jsp";
// 等同于return "forward:Index.jsp"
// 重定向
return "redirect:Index.jsp";
}
四.通过Spring MVC转发,使用视图解析器
@RequestMapping("/Hello3")
public String Hello3() {
// 转发,视图解析器的路径设置有效
return "Index";
// 没有重定向或者说视图解析器的路径无效
}