1. 程式人生 > >Java之SpringMVC框架初識

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>

相關推薦

JavaSpringMVC框架初識

SpringMVC簡介 SpringMVC是Spring框架中的一部分 是一個輕量級MVC結構的WEB層框架 屬於請求-響應模型 它在專案中取代了原有struts2的位置 核心的功能就是幫助我們處理請求以及檢視模型之間的邏輯 SpringMVC四大

Java美[從菜鳥到高手演變]spring框架初識

初識輕量級Java開源框架 --- Spring作者:eggspring是一個輕量級Java框架,其核心思想就是DI(Dependency Injection,即依賴注入)和IoC(Inversion of Control,即控制反轉),因為其開源、低侵入性,現在已經席捲了很大一部分市場,其最大競爭對手乃是J

javaCollection框架

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

Javastruts2框架基礎知識

struts2 struts2的寫法 Action類 public class HelloAction { public String hello() { System.out.println("Hello Struts!"

JAVAMVC框架_個人心得與簡單程式實現

//記錄學習心得   後面有一個簡單實現的小程式 前面有兩篇部落格,分別是這裡,和這裡//還在稽核,超連結沒貼.提到了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)