springmvc(4) Restful风格和拦截器和与spring的整合

restful风格

RESTful是一种软件设计规范,是客户端和服务端进行数据交互的一个规范。 早期使用JSP页面开发网页时,数据交互基本都是通过表单提交,然后通过内置对象传递。当HTML5兴起,移动互联网兴起,网站后端服务,不仅要考虑PC端的网页,也要考虑移动端数据的展示、小程序、HTML5页面等。如果需要多个终端(Android、iOS、小程序、Pad、HTML5页面)共用一个后端,一般来说主流方案就是使用JSON进行传递。restful则规范了请求的URL,注意RESTful只是一个规范,不是一个技术。
 

四个请求方式对应增删查改  (一个url操作一个资源)

get 请求   用来查询数据

post请求  用来添加数据

delete请求  用来删除数据

put请求  用来修改数据

在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;
	}

}

 

拦截器的顺序图  工作原理

20190117111026235.png

 

 

 

配置文件

	<!-- 开启扫描 -->
 	<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)

<!-- 开启扫描 -->
 	<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>

 

转载于:https://my.oschina.net/u/4116654/blog/3041445

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值