Java之SpringMVC框架初識
SpringMVC簡介
SpringMVC是Spring框架中的一部分 是一個輕量級MVC結構的WEB層框架
屬於請求-響應模型
它在專案中取代了原有struts2的位置
核心的功能就是幫助我們處理請求以及檢視模型之間的邏輯
SpringMVC四大元件
前端控制器 DispatcherServlet
作為前端控制器 整個流程控制的中心 控制其它元件執行
統一排程 降低元件之間的耦合性 提高每個元件的擴充套件性
對映處理器 HandlerMapping
負責根據請求物件找到一個可以處理請求的Controller
預設使用是BeanNameUrlHandlerMapping
將接受到的請求地址作為name到容器中查詢對應的bean
例如 請求了 xxxx/getUser.action
把getUser.action作為name到容器中找物件
如果不想使用預設的對映處理器 可以在容器中手動指定
目前SpringMVC要想實現一個controller處理多個請求 只能使用註解
處理器介面卡 HandlAdapter
負責對映引數 呼叫Controller 並返回ModelAndView
檢視解析器 ViewResolver
負責解析ModelAndView中的檢視實體地址
以及將ModelAndView中的引數放入request中
SpringMVC程式搭建
1.匯入jar包
5個核心包 aop相關包 jstl(jsp) web webmvc
2.修改web.xml新增 MVC核心控制器
<servlet >
<servlet-name>Spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定SpringMVC配置檔案路徑 注意:Spring配置檔案寫在最外層用<context-param>
這裡必須寫到Servlet標籤中間 用<init-param>
-->
<init-param >
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringMVC-Servlet2.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Spring</servlet-name>
<!--
1. /* 攔截所有請求 包括靜態資源
2. *.action 或者 *.do 攔截以.action結束的請求
3. / 攔截所有請求 jsp除外
-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
3.配置檔案/註解
方式一 (註解方式 推薦使用)
- 配置檔案開啟註解掃描
<context:component-scan base-package="com.lanou"></context:component-scan>
- 添加註解
@Controller
public class UserController{
// 當前臺請求了getUsers.action時該方法將被呼叫
@RequestMapping("/getUsers.action")
public ModelAndView getUser() {
// 該類表示模型與檢視
// 請求後要去哪個頁面 要顯示什麼資料
ModelAndView mv = new ModelAndView();
// 指定頁面
mv.setViewName("list.jsp");
// 指定資料
ArrayList<String> users = new ArrayList<>();
users.add("lat");
users.add("zrt");
users.add("lw");
// 預設把資料放到了request中
mv.addObject("users", users);
return mv;
}
}
方式二(配置檔案方式 瞭解)
繼承AbstractController
public class UserController extends AbstractController{
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
throws Exception {
ModelAndView mv = new ModelAndView();
// 指定頁面
mv.setViewName("list.jsp");
// 指定資料
ArrayList<String> users = new ArrayList<>();
users.add("lat");
users.add("zrt");
users.add("lw");
// 預設把資料放到了request中
mv.addObject("users", users);
return mv;
}
}
配置檔案
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<bean name="/getUser.action" class="com.lanou.controller.UserController"></bean>
引數繫結
基礎資料型別繫結
預設引數是可選的,不傳也行,但是如果你的引數是基礎型別 比如int,那就必須傳
如果不傳,後臺取到的是null,檢視會把null轉換為int 報出異常
所以:建議基礎資料類全都使用包裝型別
@RequestParam 註解
用來指定引數的對映規則
例如:
@RequestParam(value="sid",required=false,defaultValue="1")
value表示將請求中的sid對映到當前引數
required表示該引數是否必選 預設為true
defaultValue表示預設值
POJO引數繫結
在方法中新增POJO型別的引數 前臺引數名與POJO內的屬性一致即可
包裝型別
例如
有一個ClassRoom物件 屬性中包含一個Student物件
處理器方法中宣告引數型別為 ClassRoom
前臺傳引數時name="student.s_name";
預設支援的引數
HTTPServletRequest
HTTPServletRsponse
HTTPServletSession
Controller處理請求的方法的返回值
ModelAndView
將檢視名字與檢視需要的資料打包一個物件
例如:獲取所有學生
@RequestMapping("getAllStudent.action")
public ModelAndView getStudent() {
// 具體實現
List<Student> students = studentService.getAllStudent();
// 封裝檢視和資料
ModelAndView mv = new ModelAndView();
// 請求分發
mv.setViewName("/list.jsp");
// 存域
mv.addObject("student", students);
return mv;
}
String(推薦)
將返回值作為檢視的名字
此時沒有了ModelAndView資料無法給頁面
方案1:
在方法中新增Model型別引數
將要發給頁面的資料新增到Model中
處理介面卡會自動將model中的資料放到request中
方案2:
方法中新增ModelMap(原理同方案1)
例如:根據姓名查詢學生
@RequestMapping("getStudentByName.action")
public String getStudentByName(String name,Model model) {
Student student = studentService.getStudentByName(name);
// 儲存資料給前臺
model.addAttribute("student",student);
// 決定檢視資源
return "searchResult.jsp";
}
void(不推薦)
處理器介面卡將無法知道你要跳轉那個頁面
此時只能引數中獲取request,通過request完成資料傳遞 和 頁面跳轉
例如:根據性別獲取學生
@RequestMapping("getStudentByGender.action")
public void getStudentByGender(String gender,HttpServletRequest request,HttpServletResponse response) {
List<Student> student = studentService.getStudentByGender(gender);
request.setAttribute("student", student);
try {
request.getRequestDispatcher("list.jsp").forward(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
請求轉發與重定向
主要通過給返回的檢視資源加上字首
轉發:
請求 forward:xxxxx.action
頁面 forward:xxxxx.jsp
重定向:
請求 redirect:xxxxx.action
頁面 redirect:xxxxx.jsp
POST請求亂碼處理
Tomcat8以上版本預設會將IOS8859-1轉UTF-8
POST預設為UTF-8 Tomcat把它當成8859-1 造成亂碼
解決方案:過濾器
<!-- 處理SpringMVC的POST亂碼 -->
<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>*.action</url-pattern>
</filter-mapping>
相關推薦
Java之SpringMVC框架初識
SpringMVC簡介 SpringMVC是Spring框架中的一部分 是一個輕量級MVC結構的WEB層框架 屬於請求-響應模型 它在專案中取代了原有struts2的位置 核心的功能就是幫助我們處理請求以及檢視模型之間的邏輯 SpringMVC四大
Java之美[從菜鳥到高手演變]之spring框架初識
初識輕量級Java開源框架 --- Spring作者:eggspring是一個輕量級Java框架,其核心思想就是DI(Dependency Injection,即依賴注入)和IoC(Inversion of Control,即控制反轉),因為其開源、低侵入性,現在已經席捲了很大一部分市場,其最大競爭對手乃是J
java之Collection框架
sub 12px pub 分享圖片 基本 rev oca link 保護 Collection的一些框架類的關系圖: 1 Collection簡介 Collection的定義 public interface Collection<E> extends It
Java之集合框架總結詳解
Java 集合框架主要包括兩種型別的容器,一種是集合(Collection),儲存一個元素集合,另一種是圖(Map),儲存鍵/值對對映。Collection 介面又有 3 種子型別,List、Set 和 Queue,再下面是一些抽象類,最後是具體實現類,常用的有 ArrayList、LinkedLi
Java之集合框架collections framework(屌絲版,基於Java1.8)
0、用了這麼久,總是用ArrayList,List,也沒好好總結一下,感覺挺打臉,沒辦法,你知道工作的,總是用啊用 1、我們經常需要存放多個數據(元素),所以就有需求了,就像容器一樣 a、集合類也被稱作容器類 b、一部分的集合類是位於java.util包下,這些類全
深入理解Java之集合框架
1. 概述 Java集合框架由Java類庫的一系列介面、抽象類以及具體實現類組成。我們這裡所說的集合就是把一組物件組織到一起,然後再根據不同的需求操縱這些資料。集合型別就是容納這些物件的一個容器。也就是說,最基本的集合特性就是把一組物件放一起集中管理。根據集合中是否允許有重
Java之集合框架圖及 Collection和Collections的區別及用法總結
Java中Collection和Collections的區別: 1、Java集合框架圖: 2、Collection介面: java.util.Collection是一個集合介面,其中定義了對集合物件有關操作的普通介面方法。 Set和List集合型別(不包含Map)
黑馬程式設計師java之集合框架Collection
------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank"&g
Java之struts2框架基礎知識
struts2 struts2的寫法 Action類 public class HelloAction { public String hello() { System.out.println("Hello Struts!"
JAVA之MVC框架_個人心得與簡單程式實現
//記錄學習心得 後面有一個簡單實現的小程式 前面有兩篇部落格,分別是這裡,和這裡//還在稽核,超連結沒貼.提到了JAVA設計模式中的單例模式和工廠模式 這裡要說的是MVC框架.來看看MVC框架的定義: MVC全名是Model View Controller,是模型(m
Java之集合框架總結
一、 定義 Java中的集合類:是一種工具類,就像是容器,儲存任意數量的具有共同屬性的物件。 在java.util 包中 二、框架圖 三、總結 1、 集合框架主要分為兩個介面:Collection和Map 2、 Collection介面實Iter
JAVA之初識springMVC框架
在這個配置中,我們規定了 DispatcherServlet 的關聯 XML 檔名稱叫做 dispatcher-servlet,但是這裡的路徑是相對於web.xml來說的,也就是說,這個檔案也在WEB-INF的根目錄下。 所以,我們需要在WEB-INF的根目錄下新建一個dispatcher-servlet.
SpringMVC 框架系列之初識與入門實例
uip val patch cti 分發 作用 getc 問題 bdb 微信公眾號:compassblog 歡迎關註、轉發,互相學習,共同進步! 有任何問題,請後臺留言聯系! 1、SpringMVC 概述 (1)、 MVC:Model-View-Control Cont
Java框架(十四)之springMVC的註解開發
一、註解入門 1.配置springMVC配置檔案 <!-- 添加註解掃描 --> <context:component-scan base-package="com.qf"></context:component-scan>
Java框架(十五)之springMVC(檔案上傳、攔截器)
一、jackson @RequestBody/ @ResponseBody處理Json資料 作用: @RequestBody註解用於讀取http請求的內容(字串),通過springmvc提供的HttpMessageConverter介面將讀到的內容轉換為json
.Net轉Java自學之路—SpringMVC框架篇一(簡述)
RKE jsp 實現類 適配器 isp 基於 freemark ping 之間 SpringMVC是Spring框架的一個模塊,SpringMVC和Spring無需通過中間層進行整合。SpringMVC是一個基於MVC設計模式的一個框架。 SpringMVC框架原理:
.Net轉Java自學之路—SpringMVC框架篇四(校驗)
基本 row str 出錯 edi otn basename value string SpringMVC使用Hibernate的校驗框架validation(和Hibernate沒有關系)。 頁面提交請求的參數,請求到Controller方法中,使用validation
.Net轉Java自學之路—SpringMVC框架篇五(數據回顯)
ger 剛才 gre row ali quest 自學 pes tro 數據回顯就是數據提交後,若出現錯誤,將剛才交替的數據回顯到提交頁面。 pojo數據回顯方法: SpringMVC默認對pojo數據進行數據回顯。pojo數據傳入controller方法後,Spr
.Net轉Java自學之路—SpringMVC框架篇九(攔截器)
pat java exce 需要 map public 路徑 lse div 定義攔截器需要實現HandlerInterceptor接口,該接口中由三個方法:afterCompletion、postHandle、preHandle。 public class Test
Java框架之SpringMVC 03-RequestMapping-請求資料-響應資料
SpringMVC SpringMVC是一種輕量級的、基於MVC的Web層應用框架。 通過一套 MVC 註解,讓 POJO 成為處理請求的控制器,而無須實現任何介面。 採用了鬆散耦合可插拔元件結構,比其他 MVC 框架更具擴充套件性和靈活性。 優點: 1、天生與Spring框架整合,如:(IOC,AOP)