1. 程式人生 > >SpringMVC詳細示例

SpringMVC詳細示例

一、SpringMVC基礎入門,建立一個HelloWorld程式

0.框架結構

1.首先,匯入SpringMVC需要的jar包。

2.新增Web.xml配置檔案中關於springmvc的配置

複製程式碼
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation
="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <!-- 在Spring框架中是如何解決從頁面傳來的字串的編碼問題的呢? 下面我們來看看Spring框架給我們提供過濾器CharacterEncodingFilter 這個過濾器就是針對於每次瀏覽器請求進行過濾的,然後再其之上添加了父類沒有的功能即處理字元編碼。 其中encoding用來設定編碼格式,forceEncoding用來設定是否理會 request.getCharacterEncoding()方法,設定為true則強制覆蓋之前的編碼格式。
--> <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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 如果你的DispatcherServlet攔截"/",為了實現REST風格,攔截了所有的請求,那麼同時對*.js,*.jpg等靜態檔案的訪問也就被攔截了。 方案一:啟用Tomcat的defaultServlet來處理靜態檔案 要寫在DispatcherServlet的前面, 讓 defaultServlet先攔截請求,這樣請求就不會進入Spring了,我想效能是最好的吧。 <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.swf</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.xml</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.json</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.map</url-pattern> </servlet-mapping> --> <!-- 1.SpringMVC配置 前置控制器(SpringMVC的入口) DispatcherServlet是一個Servlet,,所以可以配置多個DispatcherServlet --> <servlet> <!-- 在DispatcherServlet的初始化過程中,框架會在web應用的 WEB-INF資料夾下尋找名為[servlet-name]-servlet.xml 的配置檔案,生成檔案中定義的bean。 這裡使用預設的配置檔名:springmvc-servlet.xml --> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 程式執行時從web.xml開始,載入順序為:context-param -> listener -> filter ->structs (如果使用structs的話)-> servlet 設定web.xml檔案啟動時載入的順序(1代表容器啟動時首先初始化該servlet,讓這個Servlet隨Servletp容器一起啟動) load-on-startup是指這個servlet是在當前web應用被載入的時候就被建立,而不是第一次被請求的時候被建立 --> <load-on-startup>1</load-on-startup> <!-- 預設載入配置檔案: /WEB-INF/{servlet-name}-servlet.xml 也可以指定路徑放在src下: <init-param> <param-name>contextConfigLocation</param-name> --> <!-- 其中<param-value>**.xml</param-value> 這裡可以使用多種寫法 1、不寫,使用預設值:/WEB-INF/<servlet-name>-servlet.xml 2、<param-value>/WEB-INF/classes/springmvc-servlet.xml</param-value> 3、<param-value>classpath*:springmvc-servlet.xml</param-value> 4、多個值用逗號分隔 <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> --> </servlet> <servlet-mapping> <!-- 這個Servlet的名字是springmvc,可以有多個DispatcherServlet,是通過名字來區分的。每一個DispatcherServlet有自己的WebApplicationContext上下文物件。同時儲存的ServletContext中和Request物件中. ApplicationContext是Spring的核心,Context我們通常解釋為上下文環境,我想用“容器”來表述它更容易理解一些,ApplicationContext則是“應用的容器”了:P,Spring把Bean放在這個容器中,在需要的時候,用getBean方法取出--> <servlet-name>springmvc</servlet-name> <!-- Servlet攔截匹配規則可以自已定義,當對映為@RequestMapping("/user/add")時,為例,攔截哪種URL合適? 1、攔截*.do、*.htm, 例如:/user/add.do,這是最傳統的方式,最簡單也最實用。不會導致靜態檔案(jpg,js,css)被攔截。 2、攔截/,例如:/user/add,可以實現現在很流行的REST風格。很多網際網路型別的應用很喜歡這種風格的URL。弊端:會導致靜態檔案(jpg,js,css)被攔截後不能正常顯示。 --> <!-- 可選配置: *.do、*.action、*.html / /xxx/* 不可以: /* --> <!-- 會攔截除過*.html URL中帶的請求。--> <url-pattern>*.html</url-pattern> </servlet-mapping> <welcome-file-list> <!-- 瀏覽器輸入到專案名,預設開啟如下配置頁面 --> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
複製程式碼

 3.在WEB-INF下新增springmvc-servlet.xml配置檔案

複製程式碼
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
                        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

    <!-- (1)預設掃描的包路徑 -->
    <context:component-scan base-package="com.controller" />
    
    <!-- (2)定義檢視解析器
        class="org.springframework.web.servlet.view.UrlBasedViewResolver"(基於URL的檢視解析器):老版本使用的,利用建立1個檢視解析工具類物件的方式
        Controller中方法return返回的檢視,拼接前後綴,得到結果結果頁面地址,因為頁面放在WEB-INF下,必須以這種方式訪問。
     -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <!-- 字首 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 字尾 -->
        <property name="suffix" value=".jsp"/>
    </bean>
    <!-- (3)讓一些靜態的不被springmvc攔截 -->
    <mvc:default-servlet-handler/>
    <mvc:annotation-driven/>
    
</beans>
複製程式碼

4.在WEB-INF資料夾下建立名為jsp的資料夾,用來存放jsp檢視。建立一個success.jsp,在body中新增“Hello World”。

5.建立包及Controller,如下所示

6.編寫Controller程式碼

複製程式碼
package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 控制器類(控制層)
 * @author asus
 * 
 * @Controller
 * (1)可將class定義為一個controller類
 * (2)為使spring能找到定義為controller的bean
 * (3)使用@component,也可以起到@Controller同樣的作用
 */
@Controller
@RequestMapping("/mvc")
public class HelloWorldController {

    /**
     * 
     * @RequestMapping("/url")
     * (1)在類前面定義,則將url和類繫結。
     * (2)在方法前面定義,則將url和類的方法繫結
     * 
        RequestMapping是一個用來處理請求地址對映的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。
        
        RequestMapping註解有六個屬性,下面我們把她分成三類進行說明(下面有相應示例)。
        
        1、 value, method;
        
        value:     指定請求的實際地址,指定的地址可以是URI Template 模式(後面將會說明);
        
        method:  指定請求的method型別, GET、POST、PUT、DELETE等;
        
        2、consumes,produces
        
        consumes: 指定處理請求的提交內容型別(Content-Type),例如application/json, text/html;
        
        produces:    指定返回的內容型別,僅當request請求頭中的(Accept)型別中包含該指定型別才返回;
        
        3、params,headers
        
        params: 指定request中必須包含某些引數值是,才讓該方法處理。
        
        headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求。
     */
    @RequestMapping("/helloYou")
    public String hello(){
        System.out.println("執行hello方法。。");
        return "success";
    }

}
複製程式碼

7.啟動伺服器,鍵入 http://localhost:8080/專案名/mvc/helloYou

二、配置解析

  1.Dispatcherservlet

    DispatcherServlet是前置控制器,配置在web.xml檔案中的。攔截匹配的請求,Servlet攔截匹配規則要自已定義,把攔截下來的請求,依據相應的規則分發到目標Controller來處理,是配置spring MVC的第一步。

  2.InternalResourceViewResolver

    檢視名稱解析器

  3.以上出現的註解

    @Controller 負責註冊一個bean 到spring 上下文中

    @RequestMapping 註解為控制器指定可以處理哪些 URL 請求

三、SpringMVC常用註解

  @Controller

  負責註冊一個bean 到spring 上下文中

  @RequestMapping

  註解為控制器指定可以處理哪些 URL 請求

  @RequestBody

  該註解用於讀取Request請求的body部分資料,使用系統預設配置的HttpMessageConverter進行解析,然後把相應的資料繫結到要返回的物件上 ,再把HttpMessageConverter返回的物件資料繫結到 controller中方法的引數上

  @ResponseBody

  該註解用於將Controller的方法返回的物件,通過適當的HttpMessageConverter轉換為指定格式後,寫入到Response物件的body資料區

  @ModelAttribute    

  在方法定義上使用 @ModelAttribute 註解:Spring MVC 在呼叫目標處理方法前,會先逐個呼叫在方法級上標註了@ModelAttribute 的方法

  在方法的入參前使用 @ModelAttribute 註解:可以從隱含物件中獲取隱含的模型資料中獲取物件,再將請求引數 –繫結到物件中,再傳入入參將方法入參物件新增到模型中 

  @RequestParam 

  在處理方法入參處使用 @RequestParam 可以把請求參 數傳遞給請求方法

  @PathVariable

  繫結 URL 佔位符到入參

  @ExceptionHandler

  註解到方法上,出現異常時會執行該方法

  @ControllerAdvice

  使一個Contoller成為全域性的異常處理類,類中用@ExceptionHandler方法註解的方法可以處理所有Controller發生的異常

四、JSP頁面向後臺傳值

1.使用HttpServletRequest獲取

複製程式碼
    /**
     * 使用HttpServletRequest獲取
     * @param request
     * @return success
     */
    @RequestMapping("/getParameter")
    public String request_getParameter(HttpServletRequest request){
        
        request.getParameter("name");
        request.getParameter("password");
        return "success";
    }
複製程式碼

2.自動匹配引數

複製程式碼
    /**
     * method automatically 自動匹配引數
     * @param name
     * @param password
     * @return success
     */
    @RequestMapping("/userParam")
    public String user_param(String name,String password){
        
        System.out.println("name:"+name+"\t password:"+password);
        return "success";
    }
複製程式碼

3.自動裝箱

複製程式碼
    /**
     * boxing automatically 自動裝箱 
     * @param user 預設request範圍
     * @return success
     */
    @RequestMapping("/userClass")
    public String user_class(Users user){
        
        System.out.println("name:"+user.getName()+"\t password:"+user.getPassword());
        return "success";
    }
複製程式碼

4.使用@RequestParam註解

複製程式碼
    /**
     * 接收請求引數
     * @RequestParam
     *         主要用於在SpringMVC後臺控制層獲取引數,類似一種是request.getParameter("name")
     *         它有三個常用引數:
     *             defaultValue = "0"    :若沒有取到請求引數,則使用預設引數。
     *             required = false    :必填。若請求引數為空會報錯。預設false
     *             value                :表示傳入引數的名稱
     * @param name
     * @param password
     * @return success
     */
    
    @RequestMapping("/requestParam")
    public String request_param(@RequestParam(value="name",required=true,defaultValue="boby") String name, @RequestParam(value="password") String password){
        System.out.println("name:"+name+"\t password:"+password);
        return "success";
    }
複製程式碼

[email protected]做為引數使用接收物件

複製程式碼
    /**
     * 接收請求物件並把物件預設存入request範圍中
     * @ModelAttribute
     *         通常使用在Controller方法的引數註解中,用於解釋model entity
     *         預設的模型屬性名稱自動判斷宣告的屬性型別(如,方法引數型別或方法返回型別)。如這個值是orderAddress,就對於當前包. OrderAddress(表示:users.class)。
     * @param user
     * @return
     */
    @RequestMapping("/modelAttributeClass")
    public String modelAttribute_class(@ModelAttribute("user0") Users user){
        
        System.out.println(user.getName()+"\t"+user.getPassword());
        return "success";
    }
複製程式碼

五、後臺向JSP頁面響應值

1.使用HttpServletRequest 或Session  然後setAttribute(),就和Servlet中一樣

複製程式碼
    /**
     * 使用HttpServletRequest傳值
     * @param request
     * @return success 
     */
    @RequestMapping("/setAttrivute")
    public String request_attribute(HttpServletRequest request){
        System.out.println("執行request_attribute()");
        List list=new ArrayList();
        list.add("m");
        list.add("v");
        
        Users user=new Users("sabo", "bb33");
        
        request.setAttribute("list0", list);//將結果集響應給success頁面,預設轉發跳轉,request範圍。
        request.setAttribute("user0", user);
        
        return "success";
    }
複製程式碼

2.ModelAndView模型檢視類

複製程式碼
    /**
     * 向頁面傳值
     * ModelAndView模型檢視類
        見名知意,從名字上我們可以知道
            ModelAndView中的Model代表模型
            View代表檢視
            即,這個類把要顯示的資料儲存到了Model屬性中,要跳轉的檢視資訊儲存到了view屬性。
     */
    @RequestMapping("/modelAndViewObj")
    public ModelAndView  modelAndView_obj(){
        
        List list=new ArrayList();
        list.add("a");
        list.add("b");
        
        Users user=new Users("admin", "a123");
        
        ModelAndView mav=new ModelAndView("success");//將結果集響應給success頁面,預設轉發跳轉,request範圍。
        mav.addObject("list1", list);
        mav.addObject("user1",user);
        return mav;
    }
複製程式碼

3.以Map集合為引數的方式向頁面傳值

複製程式碼
    /**
     * 以Map集合為引數的方式向頁面傳值,預設request的範圍
     * @param map
     * @return success
     
            
           

相關推薦

鞏固一下:SpringMVC詳細示例實戰教程

com ins lag active jin matlab don bin hrl C%2FC%2B%2B%E7%A8%8B%E5%BA%8F%E9%80%9A%E8%BF%87%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93%E8

SpringMVC詳細示例實戰教程(較全開發教程)

服務 出現 匹配 internal int 頁面 pty ava 代碼 SpringMVC學習筆記---- 一、SpringMVC基礎入門,創建一個HelloWorld程序 1.首先,導入SpringMVC需要的jar包。 2.添加Web.xml配置文件中關於Spring

SpringMVC詳細示例實戰教程

關於 bind smu .get use person 名稱解析 advice 學習筆記 SpringMVC學習筆記----原文出處: cnblogs-Sunnier一、SpringMVC基礎入門,創建一個HelloWorld程序1.首先,導入SpringMVC需要的jar

史上最全最強SpringMVC詳細示例實戰教程

tin turn 方法 流程圖 瀏覽器 學習 this b- converter SpringMVC學習筆記---- 一、SpringMVC基礎入門,創建一個HelloWorld程序 1.首先,導入SpringMVC需要的jar包。 2.添加Web.xm

SpringMVC詳細示例

一、SpringMVC基礎入門,建立一個HelloWorld程式 0.框架結構 1.首先,匯入SpringMVC需要的jar包。 2.新增Web.xml配置檔案中關於springmvc的配置 <?xml version

SpringMVC+RestFul詳細示例實戰教程(實現跨域訪問)

java springmvc restful 跨域 一、理解 REST REST(Representational State Transfer),中文翻譯叫“表述性狀態轉移”。是 Roy Thomas Fielding 在他2000年的博士論文中提出的。它與傳統的 SOAP Web 服務區別

SpringMVC 史上最全最強詳細示例實戰教程

Spring MVC 入門教程二: 一個簡單的入門例項教程 該例項的原始碼和例項中的jar 簡單註解配置的例項: 一、建立專案: 1、建立新的動態web專案: 2、為專案命名為:SpringMVC

SpringMvc demo示例及原始碼詳細分析

三層架構介紹   我們的開發架構一般都是基於兩種形式,一種C/S架構,也就是客戶端/伺服器,另一種是B/S架構,也就是瀏覽器/伺服器。在JavaEE開發中,幾乎全部都是基於B/S架構的開發。那麼在B/S架構中,系統標準的三層架構包括:表現層、業務層、持久層。三層架構在我們的實際開發中使用的非常多。 三層職責

SpringMVC詳細流程

cer c-c 前端控制器 適配 指定 framework 配置 ppi tex 配置: 1.配置前端控制器   <!--定義Spring MVC前端控制器-->   <servlet>     <servlet-name>springm

SpringBoot+MyBatis+Mysql 詳細示例

sdf 刪除 對數 code 登錄 lease unit pom.xml文件 http SpringBoot與MyBatis整合,底層數據庫為mysql的使用示例 新建maven項目,web項目,項目名為 bootdemo 項目結構目錄如下:還有個pom.xml文件沒

vue.js-過濾器 filters使用詳細示例

sta orm == refresh rri using 詳細 length ram 什麽也不說了,直接上幹貨: 1.首先,獲取後臺數據到頁面,並調用過濾器 在<script>中添加 onRefreshItems (currentPage, perPage

Dubbo+Springmvc 詳細介紹

擴展性 快速實現 分布式文件 sql數據庫 定時 1.9 -o 無法使用 生成 Dubbo 是阿裏巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和Spring框架無縫集成。 主要核心部件: Remoting:?網絡通信

《資料演算法:Hadoop_Spark大資料處理技巧》艾提拉筆記.docx 第1章二次排序:簡介 19 第2章二次排序:詳細示例 42 第3章 Top 10 列表 54 第4章左外連線 96 第5

《資料演算法:Hadoop_Spark大資料處理技巧》艾提拉筆記.docx       第1章二次排序:簡介 19 第2章二次排序:詳細示例 42 第3章 Top 10 列表 54 第4章左外連線 96 第5章反轉排序 127 第6章

layui-laydate時間日曆控制元件詳細示例

layui下載地址:http://www.layui.com/ 此控制元件可使用layui或者獨立版的layDate,兩者初始化有些不同 在 layui 模組中使用layui.code <!DOCTYPE html> <html> <head

java實現泛域名解析,附SpringMVC原始碼示例

所謂“泛域名解析”是指:利用萬用字元 * (星號)來做次級域名以實現所有的次級域名均指向同一IP地址。 例如支付寶的域名是www.alipay.com 域名下面有幫助中心help.alipay.com 、abc.alipay.com 等等子站點。有實力的公司一般都是通過硬體的

Spring JDBC常用方法詳細示例

Spring JDBC使用簡單,程式碼簡潔明瞭,非常適合快速開發的小型專案。下面對開發中常用的增刪改查等方法逐一示例說明使用方法 1 環境準備 啟動MySQL, 建立一個名為test的資料庫 建立Maven專案,依賴如下: <dependencies>

ECharts3D地圖(詳細示例——附有具體註釋)

3D地圖圖表效果如下: 具體程式碼如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>銅仁市3D地圖(點選地圖區域跳轉到相應

springmvc 專案完整示例06 日誌–log4j 引數詳細解析 log4j如何配置

Log4j由三個重要的元件構成: 日誌資訊的優先順序 日誌資訊的輸出目的地 日誌資訊的輸出格式 日誌資訊的優先順序從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日誌資訊的重要程度; 日誌資訊的輸出目的地指定了日誌將列印到控制檯還是檔案中; 而輸出格式則控制了日誌資訊的顯

SpringMvc常用註解詳細介紹(附示例程式碼)

一、註解類配置 要使用springmvc的註解類,需要在springmvc.xml配置檔案中用context:component-scan/掃描:  二、五大重要的註解類 1.RequestMapping註解 RequestMapping註解類的使用方法 在

三分鐘學會用SpringMVC搭建最小系統(超詳細

springmvc+mybatis dubbo+zookeeper restful redis分布式緩存 kafka 前言做 Java Web 開發的你,一定聽說過SpringMVC的大名,作為現在運用最廣泛的Java框架,它到目前為止依然保持著強大的活力和廣泛的用戶群。本文介紹如何用ecli