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通過命令設計模式接受頁面參數.
- 添加頁面
<%@ 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>
- 添加用戶控制器
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;
}
}
- 顯示錶單信息
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;
}
}
DispatcherServlet-servlet.xml
- 測試
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>