SpringMVC學習第一天
SpringMVC
JavaEE體系
結構
什麼
是mvc?
原始的mvc:
Mvc:
什麼
springmvc?
Springmvc是一個web層mvc框架,類似struts2.
S
pringmvc
和spring關係
?
Springmvc是spring的一部分。
S
pringmvc執行
原理
(流程)
Struts2:
控制層:strutsPrepareAndExcuteFilter –前端控制器 /*
l 接受請求
l 轉發請求
前端控制器攔截請求?需求幹什麼事?
尋找Action層執行請求。
ActionMapping:尋找Action,建立代理物件。
Springmvc:
那些需要自己開發,那些需要配置:
S
pringmv
c入門案例
建立web工程,且匯入jar
匯入spring,springmvc,log4j.
配置web.xml(前端控制器)
DispatcherServlet.
載入預設springmvc配置檔案
載入classpath配置檔案:
配置處理器對映器(springmvc.xml)
自定義Controller
配置自定義bean(springmvc.xml)
配置處理器介面卡(springmvc.xml)
返回邏輯檢視,檢視解析器解析檢視
配置檢視解析器:
根據程式碼分析執行流程
處理器適配原始碼
處理器
對映器
BeanNameUrlHandlerMapping
功能:預設的對映器,複雜尋找Controller。
根據bean(Controller)的name屬性的匹配daoController
需要在springmvc定義:
SimpleUrlHandlerMapping
ControllerClassNameUrlHandlerMapping
三個處理器對映器可以共存?
可以。
處理器
是配置器
SimpleControllerHandlerAdapter
功能:執行Controller。呼叫Controller方法。
HttpRequestHandlerAdapter
功能:執行實現介面HttpRequestHandler的Controller。
定義自定義bean
在springmvc.xml
定義處理器介面卡
控制
器
(命令
控制器
)
分析器:springmvc命令設計模式接受引數。
定義命令控制器
傳送引數頁面
跳轉到add頁面
由於add頁面在web-inf下面,不能直接方法,必須通過Controller轉發。
定義Controller進行轉發:
在springmvc配置檔案配置訪問地址
亂碼
解決
Get請求
Post亂碼
配置spring編碼過濾器:characterEncodingFilter。
時間型別轉換
註解入門
建立一個web工程,且匯入jar
Web.xml
同上(略)
前端控制器:DispatcherServlet
編碼過濾器:CharacterEncodingFilter。
Springmvc
定義Controller
訪問
http://localhost:8080/springmvc1018_day01_02/hello.do
註解訪問流程
RequestMapping
功能:請求對映,和瀏覽器請求進行匹配。匹配成功找到Controller。
requestMapping(“/hello.do)
requestMapping(“hello”)
requestMapping(value=”/hello.do”)
requestMapping(value=”/hello.do”,method=RequestMethod.GET)
requestMapping(value=”/hello.do”,method=RequestMethod.POST)
requestMapping(value=”/hello.do”,method={RequestMethod.POST, RequestMethod.GET})
根路徑
requestMapping(“/user”)
UserController{
requestMapping(“save”)
save(){}
requestMapping(“update”)
update(){}
requestMapping(“delete”)
delete(){}
}
requestMapping(“/items”)
ItemsController{
requestMapping(“save”)
save(){}
requestMapping(“update”)
update(){}
requestMapping(“delete”)
delete(){}
}
接受引數
基本型別(int)
頁面
程式碼
接受String型別和int
頁面
程式碼
Pojo型別
頁面
程式碼
包裝型別
定義包裝類
頁面
接受引數方法
集合List
頁面
接受引數方法
集合Map
頁面
接受引數
有了struts2,為什麼使用springmvc?
實現機制:
Struts2:過濾器
Springmvc:servlet
Servlet速度比過濾器快。
執行效率:
單例:springmvc
建立一個Controller,建立方法裡面幾個物件。1+N
多例:struts2
N個Action物件,ActionContext,ValueStack,ActionSupport,Model。
封裝引數:
Struts:基於屬性進行封裝。
Springmvc:基於方法封裝。方法屬性是區域性變數,方法結束,變數銷燬。顆粒度更細。
查詢
列表
回顯:使用回顯引數:Model====application。
使用c標籤迴圈list集合:需要jstl的jar包:
//查詢列表回顯
@RequestMapping("list")
public String list(Model model){
List<User> list = new ArrayList<User>();
User user1 = new User();
user1.setUsername("普京");
user1.setSex("女");
user1.setAddress("俄羅斯");
user1.setBirthday(new Date());
user1.setId(1);
User user2 = new User();
user2.setUsername("普京2");
user2.setSex("男");
user2.setAddress("俄羅斯2");
user2.setBirthday(new Date());
user2.setId(2);
User user3 = new User();
user3.setUsername("普京3");
user3.setSex("男");
user3.setAddress("俄羅斯3");
user3.setBirthday(new Date());
user3.setId(3);
list.add(user1);
list.add(user2);
list.add(user3);
model.addAttribute("list", list);
return"list";
}
頁面獲取集合值:
R
estfull
Restfull軟體架構模式:無副檔名,無引數。
Url模版對映
去掉副檔名
約定:利用servlet可以攔截目錄功能 和 url 模版對映
改寫請求:
requestParam
.Redirect
Contrller方法返回結果重定向到一個url地址,如果方式:
return "redirect:/user/userlist.do";
注意:
¨ redirect:list.do 與 redirect:/user/list.do" 同一個類
在同一個類裡面進行跳轉。上面2個都可以實現跳轉。但是有區別:
第一個是同一個根路徑下面跳轉。第二個是在專案路徑下進行跳轉。
¨ 不同的類進行跳轉
不同的類進行跳轉只能使用:redirect:/items/list.do進行跳轉。即是從專案路徑下來查詢。
redirect方式相當於“response.sendRedirect()”,轉發後瀏覽器的位址列變為轉發後的地址,因為轉發即執行了一個新的request和response。
由於新發起一個request原來的引數在轉發時就不能傳遞到下一個url,如果要傳引數可以/user/userlist.do後邊加引數,如下:
/user/userlist.action?groupid=2&…..
5.Forward
controller方法執行後繼續執行另一個controller方法。
本類:return “forward:list.do” 或者 return ”forward:/user/list.do“
跨類:
return "forward:/items/list.do";
forward方式相當於“request.getRequestDispatcher().forward(request,response)”,轉發後瀏覽器位址列還是原來的地址。轉發並沒有執行新的request和response,而是和轉發前的請求共用一個request和response。所以轉發前請求的引數在轉發後仍然可以讀取到。