21 - SpringMVC學習(2) ——案例分析

在這裏插入圖片描述

1 URL處理器映射【瞭解】

1.1 BeanNameUrlHandlerMapping

  • 功能:尋找Controller ,根據url請求去匹配bean的name屬性,從而獲取Controller
    在這裏插入圖片描述

1.2 SimpleUrlHandlerMapping

  • 功能:尋找Controller
  • 根據瀏覽器url匹配簡單url的key,key就是Controller的id找到Controller

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

1.3 ControllerClassNameHandlerMapping

  • 功能:尋找Controller ,根據類名(MyController)類名.do來訪問,類名首字母小寫
  • 不需要配置訪問路徑,默認的就是類名

在這裏插入圖片描述

在這裏插入圖片描述

2 處理器適配器

注意:兩個處理器適配器可以共存

2.1 SimpleControllerHandlerAdapter

功能:執行controller,調用controller裏面方法,返回modelAndView

2.2 HttpRequestHandlerAdapter

執行控制器
負責調用實現HttpRequestHandler接口的控制器
在這裏插入圖片描述

在這裏插入圖片描述

public class HttpController implements HttpRequestHandler {

    @Override
    public void handleRequest(HttpServletRequest req,
                              HttpServletResponse resp) throws ServletException, IOException {

        req.setAttribute("name","Mike");
        req.getRequestDispatcher("/WEB-INF/views/user/userlist.jsp").forward(req,resp);

    }
}

在這裏插入圖片描述

3 命令控制器【瞭解】

springmvc通過命令設計模式接受頁面參數.

  1. 添加頁面
    在這裏插入圖片描述
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加用戶</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/command.do" method="post">
    用戶名:<input type="text" name="username"><br>
    密碼:<input type="text" name="password"><br>
    性別:<input type="text" name="gender"><br>
    生日:<input type="text" name="birthday"><br>
    <input type="submit">
</form>

</body>
</html>
  1. 添加用戶控制器
package com.tzb.backoffice.web.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UserAddController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {

        ModelAndView mav = new ModelAndView("user/useradd");

        return mav;
    }
}

  1. 顯示錶單信息 info.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>info</title>
</head>
<body>
顯示錶單提交的數據:<br>
用戶名:${user.username}<br>
密碼: ${user.password}<br>

</body>
</html>
  • Command控制器
    在這裏插入圖片描述
package com.tzb.backoffice.web.controller;

import com.tzb.backoffice.model.User;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class CommandController extends AbstractCommandController {

    public CommandController() {
        // 告訴 springmvc 把表單的數據存在 User 模型
        this.setCommandClass(User.class);
    }

    @Override
    protected ModelAndView handle(HttpServletRequest req,
                                  HttpServletResponse resp,
                                  Object o, BindException e) throws Exception {
        User user = (User) o;

        System.out.println(user);

        ModelAndView mav = new ModelAndView();
        mav.setViewName("user/info");
        mav.addObject("user", user);

        return mav;
    }
}


  1. DispatcherServlet-servlet.xml
    在這裏插入圖片描述

  1. 測試
    在這裏插入圖片描述
    在這裏插入圖片描述

4 亂碼問題

  • web.xml
<!-- 配置編碼過濾器  -->
    <filter>
        <filter-name>EncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章