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;
}
}
拦截器的顺序图 工作原理
配置文件
<!-- 开启扫描 -->
<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>