首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring MVC 頁面跳轉方式全總結:原生 API、ModelAndView、ModelMap 與 重導向/轉發語法

     編輯:Java 相關知識

基礎配置

<!-- web.xml -->
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- dispatcher-servlet.xml -->
<context:component-scan base-package="com.xxx" />
<!-- 視圖解析器 (有無影響跳轉寫法) -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

1. 原生 Servlet API 方式

1.1 直接輸出響應

@RequestMapping("/resp")
public void handle(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    resp.getWriter().println("hello HttpServletResponse");
}

1.2 sendRedirect 重導向

@RequestMapping("/resp")
public void handle(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    resp.sendRedirect("index.jsp"); // 瀏覽器 URL 變化
}

1.3 forward 轉發

@RequestMapping("/resp")
public void handle(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    req.setAttribute("message", "it's forward");
    req.getRequestDispatcher("index.jsp").forward(req, resp); // URL 不變
}

2. 返回 String 視圖名 (有/無視圖解析器)

場景寫法效果
無視圖解析器return "home.jsp";轉發到 home.jsp
return "forward:index.jsp";轉發
return "redirect:index.jsp";重導向
有視圖解析器return "home";解析為 /WEB-INF/jsp/home.jsp 並轉發
return "forward:index";轉發到 index (經解析器)
return "redirect:hello";重導向到 /hello (匹配 @RequestMapping)

3. ModelAndView 方式 (需視圖解析器)

@Controller
public class HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "hello myfirst mvc"); // 模型數據
        mv.setViewName("hello");                  // 視圖名 → /WEB-INF/jsp/hello.jsp
        return mv;
    }
}

4. ModelMap / Model 方式 (現代推薦)

@RequestMapping("/modelmap")
public String modelHello(String name, ModelMap map) {
    map.addAttribute("name", name);
    return "index.jsp"; // 無視圖解析器時寫全名;有解析器寫邏輯名
}

也可用 Model、@ModelAttribute 綁定表單對象。

核心差異總結

方式需視圖解析器攜帶數據靈活度推薦度
原生 API否request.setAttribute高(完全控制)特殊場景
String 返回視情況Model/Map/ModelMap高✅ 推薦
ModelAndView是addObject中傳統項目
ModelMap/Model視情況addAttribute高✅ 現代首選

關鍵前綴語法

  • forward:viewName → RequestDispatcher.forward()
  • redirect:viewName → HttpServletResponse.sendRedirect()
  • 有視圖解析器時,viewName 為邏輯名;無解析器時為物理路徑
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved