首先,處理器的實現和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";
// 沒有重定向或者說視圖解析器的路徑無效
}