springmvc(4) Restful風格和攔截器和與spring的整合

restful風格

RESTful是一種軟件設計規範,是客戶端和服務端進行數據交互的一個規範。 早期使用JSP頁面開發網頁時,數據交互基本都是經過表單提交,而後經過內置對象傳遞。當HTML5興起,移動互聯網興起,網站後端服務,不只要考慮PC端的網頁,也要考慮移動端數據的展現、小程序、HTML5頁面等。若是須要多個終端(Android、iOS、小程序、Pad、HTML5頁面)共用一個後端,通常來講主流方案就是使用JSON進行傳遞。restful則規範了請求的URL,注意RESTful只是一個規範,不是一個技術。
 mysql

四個請求方式對應增刪查改  (一個url操做一個資源)web

get 請求   用來查詢數據spring

post請求  用來添加數據sql

delete請求  用來刪除數據數據庫

put請求  用來修改數據express

在RESTful接口中,全部的方法都是返回JSON,沒有返回頁面的(ModelAndView),所以,全部的方法上都須要添加@ResponseBody註解。一個替代的簡化方案,是使用 @RestController 代替@Controller。@RestController其實是一個組合註解,是@Controller和@ResponseBody的組合: 

 

案例 : 小程序

@RestController
public class MyController {
	
	@GetMapping("/user/{id}")

	public void fun(@PathVariable Integer id){
	 
	 System.out.println("get:"+id);
	}
	
	@PostMapping("/user/{id}")
 
	public void fun1(@PathVariable Integer id){
	 
	 System.out.println("post:"+id);
	}
	
	@DeleteMapping("/user/{id}")
 
	public void fun2(@PathVariable Integer id){
	 
	 System.out.println("delete:"+id);
	}
	
	@PutMapping("/user/{id}")
 
	public void fun3(@PathVariable Integer id){
	 
	 System.out.println("put:"+id);
	}

 

 

 

攔截器的使用

public class MyIntercepter implements HandlerInterceptor{

	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		System.out.println("進入過濾器: afterCompletion");
		
	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		System.out.println("進入過濾器: postHandle");
		arg3.setViewName("/error.jsp");
		 
	}

	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
		System.out.println("進入過濾器: pre");
		
		return true;
	}

}

 

攔截器的順序圖  工做原理後端

 

 

 

配置文件restful

<!-- 開啓掃描 -->
 	<context:component-scan base-package="com.controller,com.liy.*"></context:component-scan>
 
 	<!-- 開啓mvc註解 -->
 	<mvc:annotation-driven>
		  
	</mvc:annotation-driven>
 	
 	<!-- 配置攔截器 -->
 	<mvc:interceptors>
 		<mvc:interceptor>
 		 	<mvc:mapping path="/**"/>
 		 	<bean class="com.liy.interceper.MyIntercepter" />
 		</mvc:interceptor>
 	</mvc:interceptors>

 

 

 

整合spring和springmvc的配置文件

spring的配置文件(applicationContext.xml)mvc

<!-- 開啓掃描 -->
 	<context:component-scan base-package="com.liy.dao.impl,com.liy.service.impl"  use-default-filters="true">
 		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
 	</context:component-scan>
 	
 
 		 <!-- 配置數據源 -->
 	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 			<!-- 配置數據庫的相關信息 -->
 		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
 		<property name="url" value="jdbc:mysql://localhost:3306/again?characterEncoding=utf-8"/>
 		<property name="username" value="root"/>
 		<property name="password" value="root"/>
 	</bean>	
 	
	 <!-- 構造注入關聯數據源 --> 
	 <bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbc">
	 	<constructor-arg ref="dataSource" />
	 </bean>

 

 

springmvc的配置文件

<!-- 開啓掃描 -->
 	<context:component-scan base-package="com.liy.controller" use-default-filters="false">
 		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
 	</context:component-scan>
 
 	
 	<!-- 開啓mvc註解 -->
 	<mvc:annotation-driven></mvc:annotation-driven>

 

 

web.xml的配置

<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>
  
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>


	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
	</servlet>


	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</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>*.jpg</url-pattern> 
	</servlet-mapping> 

	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.png</url-pattern>
	</servlet-mapping>



	<filter>
		<filter-name>characterEncoding</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>characterEncoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
相關文章
相關標籤/搜索