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>