流程文字概述
1、用戶發送請求至前端控制器DispatcherServlet
2、DispatcherServlet收到請求調用HandlerMapping處理器映射器。
3、處理器映射器找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。
4、DispatcherServlet調用HandlerAdapter處理器適配器
5、HandlerAdapter經過適配調用具體的處理器(Controller,也叫后端控制器)。
6、Controller執行完成返回ModelAndView
7、HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet
8、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
9、ViewReslover解析后返回具體View
10、DispatcherServlet根據View進行渲染視圖(即將模型數據填充至視圖中)。
11、DispatcherServlet響應用戶
2.如何解決POST請求中文亂碼問題,GET的又如何處理呢?
在web.xml中加入:
<filter>
????<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
????<url-pattern>/*</url-pattern>
</filter-mapping>
以上可以解決post請求亂碼問題。對于get請求中文參數出現亂碼解決方法有兩個:
修改tomcat配置文件添加編碼與工程編碼一致,如下:
<Connector?URIEncoding="utf-8"?connectionTimeout="20000"?port="8080"?protocol="HTTP/1.1"?redirectPort="8443"/>
?另外一種方法對參數進行重新編碼:
String?userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
ISO8859-1是tomcat默認編碼,需要將tomcat編碼后的內容按utf-8編碼
?
Springmvc與struts2的區別
1、?springmvc的入口是一個servlet即前端控制器,而struts2入口是一個filter過慮器。
?
2、?springmvc是基于方法開發的,而struts2是基于類開發的。
Springmvc將url和Controller方法進行映射。映射成功后springmvc生成一個Handler對象,對象中只有一個method。方法執行結束,形參數據銷毀。
3、?springmvc可以單例開發,且建議單例。
而struts2接收參數是通過成員變量接收參數,無法使用單例,只能使用多例。
4、?經過實際測試,struts2速度慢,在于使用struts標簽,而不是因為單例還是多例的問題。
如果使用struts建議使用jstl。
5、?Struts2有漏洞,springmvc目前還沒有漏洞出現。
如果使用struts2,建議下載最新包。
?
?
?
springMVC中幾個常用的注解
@RequestMapping(value="/item/param/{itemId}", produces=MediaType.TEXT_HTML_VALUE+";charset=utf-8")
Value:設置其你去路徑
Produce:設置響應編碼
{itemId}:表示請求過來的參數名字叫itemId
?
@ResponseBody
加在方法上,表示返回Json格式的數據
?
@PathVariable(value=itemId)?Long id
結合第一個注解來看,這里涉及到restful風格,若是id改成itemId,那么可以省略value=itemId,注解還是需要加上的
?
?@RequestParam(defaultValue="60")Long pageSize
若是形參名字和傳遞過來的參數名字相同,就可以簡單封裝了,不需要這個注解
若是不同,則會用到這個注解,里面有value屬性,可以接受參數并賦予自定義形參
defaultValue 是給默認值得
?
@RequestBody如果請求過來的參數是json數據,這個注解可以把json數據轉成pojo
?
參數里面還可以傳遞一個Model model對象
可一個通過model.addAttribute("item", item)往頁面傳值
?
還可以傳遞httprequest和httpresponse兩個對象