先搞清楚Spring和SpringMVC區別:
Spring是IOC和AOP的容器框架,即Spring是管理Bean的;而SpringMVC是基於Spring功能之上添加的Web框架。即SpringMVC依賴於Spring,
複習Spring Spring MVC 最近自己在用spring boot ;但這種基本的還是要理解。
- 1.Spring MVC流程
- 2.自定義類型轉換器
- 3.自己的類型轉換器:實例:SpringMVC 註解字符串解析成類屬性自動賦值,
- 4.Controller接受請求的方法(6種)常用前三
- 5.mvc模式 & Spring MVC工作原理
2.自定義類型轉換器
-
converter<tar,obj> 接口
tar表示源類型;obj目標類型 -
Formatter數據源必須是String,在Web應用更加合理。
3.字符串自動賦值給類屬:
當輸入“apple,10.58,200”時,表示在程序中自動創建一個new Goods,並將“apple”值自動賦值給goodsname屬性,將“10.58”值自動賦值給goodsprice屬性,將“200”值自動賦值給goodsnumber屬性。
1.實體類 GoodsModel
package dto/model;
public class GoodsModel {
private String goodsname;
private double goodsprice;
private int goodsnumber;
//省略setter和getter方法
}
2.控制器類
使用@RequestParam(“goods”)接收請求參數,
然後調用自定義類型轉換器GoodsConverter將字符串值轉換爲GoodsModel的對象gm
使用@RequestMapping("/converter")或者@RequestMapping("/formatter")
@Controller
@RequestMapping("/my")
public class ConverterController {
/*
@RequestMapping("/converter")
@RequestMapping("/formatter")
*/
@RequestMapping("/converter")
public String myConverter(@RequestParam("goods") GoodsModel gm, Model model){
model.addAttribute("goods",gm);
return "showGoods";
}
}
3.package: converter
GoodConverter.java 實現Converter<S,T>接口並且實現該方法
public class GoodsConverter implements Converter<String, GoodsModel>{
}
4.springmvc-servlet.xml
在配置文件中註冊自定義類型轉換器
<!-- 註冊類型轉換器GoodsConverter -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="converter.GoodsConverter"/>
</list>
</property>
</bean>
5.mvc模式 & Spring MVC工作原理
mvc模式
spring mvc 工作原理
四個星星:MVC四個接口:
- 所有請求都經過DispatcherServlet統一分發給各Controller;
- 請求到Controller的映射:藉助Spring MVC提供的HandlerMapping定位到具體的Controller;
- Controller處理用戶請求,返回ModelAndView對象給DispatcherServlet(前端控制器),ModelAndView:返回包含模型(Model)和視圖(View);
- ViewResolver:查找View對象,渲染頁面。
流程:
1.客戶端發出http請求(localhost:8880)到DispatcherServlet前端控制器
2.DispatcherServlet 通過 handlerMapping找對應的Controller
3.調用Controller
4.Controller通過Service處理用戶的請求
5.返回ModelAndView(return回的)處理結果給DispatcherServlet
6.處理視圖映射ViewResolver找到View對象要渲染頁面
7.通過Model將模型數據傳給視圖View顯示
8.返回請求
web.xml 部署DispatcherServlet:
其servlet對象springmvc初始化時,將在應用程序的WEB-INF目錄下查找一個配置文件
即WEB-INF下創建的springmvc-servlet.xml(springName-servlet.xml
<!--部署DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 表示容器在啓動時立即加載servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 處理所有URL-->
<url-pattern>/</url-pattern>
</servlet-mapping>
springmvc-servlet.xml
在基於註解之後不需要bean控制器類
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--LoginController控制器類,映射到“/login” -->
<bean name="/login" class="controller.LoginController"/>
<!--RegisterController控制器類,映射到“/register” -->
<bean name="/register" class="controller.RegisterController"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前綴 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 後綴 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
4.Controller接受請求的方法
springmvc-servlet.xml
@RequestMapping(" [ 請求的地址 ] ", method=“POST/GET”)在方法或者類上(默認post)
或者直接@PostMapping@GetMapping
自動掃描代替用bean來註冊:
<!-- 使用掃描機制,掃描控制器類,控制器類都在controller包及其子包下 -->
<context:component-scan base-package="controller"/>
1.通過@PathVariable接收URL中的請求參數
僅Get提交方式 @GetMapping或加method屬性的@RequestMapping
@RequestMapping(value="/register/{uname}/{upass}", method=RequestMethod.GET)
//必須加method屬性的
public String register(@PathVariable String uname,@PathVariable String upass, Model model) {
}
@GetMapping("/profile/{action}")
public String profile(@PathVariable(name = "action")String action,
Model model){
if("productions".equals(action)){}
}
2.通過@RequestParam接收請求參數
升級版”處理方法“
獲取時候與前端的name都需要一致:
“通過處理方法的形參接收請求參數”不會報404錯誤,而“通過@RequestParam接收請求參數”會404錯誤
3.通過@ModelAttribute接收請求參數
升級版”@RequestParam“
不需要使用model.addAttribute語句,自動數據綁定與模型數據展示
@ModelAttribute(“user”) UserForm user
將請求參數的輸入封裝到user對象中並且
創建UserForm實例,以“user”爲鍵值存儲在Model對象中,與“model.addAttribute(“user”, user)”語句功能一樣.
@ModelAttribute UserForm user (沒有制定鍵值)
默認model.addAttribute(“userForm”, user)
4.通過HttpServletRequest接收請求參數
@RequestMapping("/register")
public String register(HttpServletRequest request, Model model) {
String uname = request.getParameter("uname");
String upass = request.getParameter("upass");
5.通過處理方法的形參接收請求參數
6.通過實體bean接收請求參數
return:默認轉發
/轉發到一個視圖
return " str ";
/重定向到一個請求方法
return "redirect:/str";
/(同一個控制器類裏,可省略/str1/)
return "forward:/str1/str2";