1. 程式人生 > 其它 >SpringMVC學習第一天

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。所以轉發前請求的引數在轉發後仍然可以讀取到。