SpringMVC(一)--基礎、REST、@RequestParam、POST請求亂碼等

1.SpringMVC基本概述前端

Spring 爲展示層提供的基於 MVC 設計理念的優秀的Web 框架,是目前最主流的 MVC 框架之一java

Spring3.0 後全面超越 Struts2,成爲最優秀的 MVC 框架
Spring MVC 經過一套 MVC註解,讓 POJO 成爲處理請求的控制器,而無須實現任何接口。
     用SpringMVC代替web層
     MVC是一種設計模式:
          M:model 模型:用來封裝數據,好比javabean
          V:view 視圖:用來顯示數據
          C:controller:用於接收前端頁面發送的請求,而後調用servlet層處理,拿處處理結果並將結果返回給前端界面
     SpringMVC至關於MVC中的C和V!
支持 REST 風格的 URL 請求
採用了鬆散耦合可插拔組件結構,比其餘 MVC 框架更具擴展性和靈活性
 
2.建一個最基礎的SpringMVC項目
步驟:
– 導 jar 包
– 在 web.xml 中配置 DispatcherServlet
– 加入 Spring MVC 的配置文件
– 編寫處理請求的處理器,並標識爲處理器
– 編寫視圖
代碼實現:
① 導jar包
– commons-logging-1.1.3.jar
– spring-aop-4.0.0.RELEASE.jar
– spring-beans-4.0.0.RELEASE.jar
– spring-context-4.0.0.RELEASE.jar
– spring-core-4.0.0.RELEASE.jar
– spring-expression-4.0.0.RELEASE.jar
– spring-web-4.0.0.RELEASE.jar
– spring-webmvc-4.0.0.RELEASE.jar
②  配置 .xml文件
   配置 DispatcherServlet :DispatcherServlet 默認加載 /WEB- INF/<servletName-servlet>.xml 的 Spring 配置文件,去Open Type中查DispatcherServlet
     

 

  <!-- The front controller of this Spring Web application, responsible for handling all application requests -->
  <!-- 向服務器註冊前端控制器 -->
	<servlet>
		<servlet-name>springDispatcherServlet</servlet-name>
		<!--DispatcherServlet指的是SpringMVC的前端控制器,給服務器使用,建立servlet對象  -->
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- 用於制定SpringMVC配置文件的路徑以及名稱 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param> 
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!-- Map all requests to the DispatcherServlet for handling -->
	<!-- 用servlet-mapping制定請求映射的路徑 -->
	<servlet-mapping>
		<servlet-name>springDispatcherServlet</servlet-name>
		<!-- 用url-pattern指定攔截的請求路徑 -->
		<url-pattern>/</url-pattern>
	</servlet-mapping>
 新建springmvc.xml文件

 

點擊Next輸入文件名springmvc.xml,再點Next,在如下三項前打勾√web

在Open Type中查找 InternalResourceViewResolver,得到其全路徑spring

在springmvc.xml文件中添加express

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

 在web.xml文件中能夠不設置初始化參數,也就是不寫<init-param>設計模式

可是要將spring.xml文件更名爲 springDispatcherServlet-servlet.xml,並移動到WEB-INF目錄下瀏覽器

 

 ③ 編寫jsp頁面和controller類
@RequestMapping(value="/sayHello",method=RequestMethod.GET,params={"username","pwd!=123"})
public String SUCCESS(){
	System.out.println("111");
	return "success";
}

@RequestMapping()能夠定義在類上,也能夠定義在方法上tomcat

–     類定義處:提供初步的請求映射信息。相對於 WEB 應用的根目錄
–     方法處:提供進一步的細分映射信息。相對於類定義處的 URLbash

@RequestMapping 的 value、method、params 及 heads 分別表示請求URL、請求方法、請求參數及請求頭的映射條件,他們之間是與的關係,聯合使用多個條件可以讓請求映射 更加精確化服務器

params表示及含義

–     param1: 表示請求必須包含名爲 param1 的請求參數
–     !param1: 表示請求不能包含名爲 param1 的請求參數
–     param1 != value1: 表示請求能夠不包含名爲 param1 的請求參數,若包含的話其值不能爲 value1
如上例代碼中,必需要有’username‘參數,’pwd‘參數無關緊要,如有的話不能爲‘123’
 
使用 @RequestMapping 映射請求,Ant 風格資源地址支持 3 種匹配符:
     –     ?:匹配文件名中的一個字符
     –     *:匹配文件名中的任意字符
     –     **:** 匹配多層路徑
    
@RequestMapping 還支持 Ant 風格的 URL:
      – /user/*/createUser: 匹配  /user/ aaa/createUser、/user/ bbb/createUser 等 URL
      – /user/**/createUser: 匹配  /user/createUser、/user/ aaa/bbb/createUser 等 URL
      – /user/createUser ??:匹配   /user/createUser aa、/user/createUser bb 等 URL
 
 ④ 運行
 
3.REST :Representational State Transfer。(資源)表現層狀態轉化。是目前最流行的一種互聯網軟件架構。
  它結構清晰、符合標準、易於理解、擴展方便, 因此正獲得愈來愈多網站的採用.
       HTTP 協議裏面,四個表示操做方式的動詞:
    GET 用來獲 取資源
    POST 用來新建資源
    PUT 用來更新資源
    DELETE 用來刪除資源
  
<a href="${pageContext.request.contextPath }/getOrderById/1">okok</a>
	
<form action="${pageContext.request.contextPath }/postOrderById/2" method="post">
	<input type="submit" value="Submit"/>
</form>

<form action="${pageContext.request.contextPath }/putOrderById/3" method="post">
	<input type="hidden" name="_method" value="put"/>
	<input type="submit" value="Submit"/>
</form>

<form action="${pageContext.request.contextPath }/deleteOrderById/4" method="post">
	<input type="hidden" name="_method" value="delete"/>
	<input type="submit" value="Submit"/>
</form>

超連接<a>是get請求,瀏覽器 form 表單只支持 GET 與 POST 請求,而DELETE、PUT 等 method 並不支持,Spring3.0 添加了一個過濾器,能夠將這些請求轉換爲標準的 http 方法,使得支持 GET、POST、PUT 與 DELETE 請求。須要在form表單中添加隱藏域,name爲‘method',value爲’POST/DELETE'

同時須要在web.xml文件中配置 HiddenHttpMethodFilter 

  <!-- HiddenHttpMethodFilter過濾器能夠將POST請求轉化爲PUT請求和DELETE請求 -->
  <filter>
  	<filter-name>hiddenHttpMethodFilter</filter-name>
  	<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>hiddenHttpMethodFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

 

@RequestMapping(value="/getOrderById/{id}",method=RequestMethod.GET)
public String getOrderById(@PathVariable(value="id") Integer id){
	//調用service層方法
	System.out.println(id);
	return SUCCESS;
}

@RequestMapping(value="/postOrderById/{id}",method=RequestMethod.POST)
public String postOrderById(@PathVariable(value="id") Integer id){
	//調用service層方法
	System.out.println(id);
	return SUCCESS;
}

@RequestMapping(value="/putOrderById/{id}",method=RequestMethod.PUT)
@ResponseBody
public String putOrderById(@PathVariable(value="id") Integer id){
	//調用service層方法
	System.out.println(id);
	return SUCCESS;
}

@RequestMapping(value="/deleteOrderById/{id}",method=RequestMethod.DELETE)
@ResponseBody
public String deleteOrderById(@PathVariable(value="id") Integer id){
	//調用service層方法
	System.out.println(id);
	return SUCCESS;
}

 由於在tomcat8.0中不支持PUT和DELETE方法,因此須要@ResponseBody,不然405錯誤

 

4.使用@RequestParam綁定請求參數值

@RequestMapping(value="/testRequestParam",method=RequestMethod.POST)
public String testRequestParam(@RequestParam(value="username") String name,@RequestParam(value="password",required=false,defaultValue="123456789") String password){
	System.out.println(name+"---"+password);
	return SUCCESS;
}

 在jsp頁面

<form action="${pageContext.request.contextPath }/testRequestParam" method="post">
	Username:<input type="text" name="username"/>
	Password:<input type="password" name="password"/>
	<input type="submit" value="Submit"/>
</form>

 @RequestParam能夠從jsp頁面獲取參數

–     value:參數名,與請求參數的name屬性值一致
–     required:是否必須輸入值,默認爲 true, 表示請求參數中必須包含對應的參數,若不存在,將拋出異常
–     defaultVault:不傳值時的默認值,傳值後將再也不顯示默認值  
 
 5.POST請求亂碼問題
上個例子若是輸入中文的話,會出現亂碼問題
因此須要在web.xml文件中配置<filter>
<!-- 解決中文亂碼問題 -->
  <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>
  </filter>
  <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
  </filter-mapping>
相關文章
相關標籤/搜索