Spring MVC基础知识回顾2
前言
学习内容
了解RESTful
RESTful开发风格
- 传统web开发
- TESTful风格(前后端分离)
RESTful开发规范
- 使用URL作为用户交互入口
- 明确的语义规范(GET|POST|PUT|DELETE)
- 只返回数据(JSON|XML),不包含任何展现
RESTful命名要求
第一个RESTful应用
@RestController注解与路径变量
// POST /restful/request/100
@PostMapping("/request/{rid}")
//@ResponseBody
public String doPostRequest(@PathVariable("rid") Integer requestId, Person person){
System.out.println(person.getName() ":" person.getAge());
return "{\"message\":\"数据新建成功\",\"id\":" requestId "}";
}
简单请求与非简单请求
对于非简单请求,例如PUT或者DELETE,需要在web.xml引入如下代码扩展:
<filter>
<filter-name>formContentFilter</filter-name>
<filter-class>org.springframework.web.filter.FormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>formContentFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
JSON序列化
- pom.xml引入所需的jar包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.9</version>
</dependency>
- 编写测试
JSON对于时间格式数据返回不友好!!!添加注解解决
浏览器同源策略
- 同源策略阻止从一个域加载的脚本去获取另一个域上的资源
- 只要协议、域名、端口有任何一个不同,都被当做是不同的域
- 浏览器Console看到Access-Control-Allow-Origin就代表跨域了
HTML允许跨域的标签:
- <img>-显示远程图片
- <script>-加载远程JS
- <link>-加载远程CSS
Spring MVC跨域访问
CORS跨域资源访问
- CORS是一种机制,使用额外的HTTP头通知浏览器可以访问其他域
- URL响应头包含Access-Control-*指明请求允许跨域
方法1. 使用 @CrossOrigin注解
方法2. 全局配置跨域
Spring MVC拦截器
- 拦截器(Interceptor)用于对URL请求进行前置/后置过滤
- Interceptor与Filter用途相似,但实现方法不同
- 底层基于Spring AOP面向切面编程实现
拦截器开发流程
- maven引入依赖servlet-api
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
- 实现HandlerInterceptor接口
该接口有三个方法:
- preHandle——前置执行处理
- postHandle——目标资源已经被Spring MVC框架处理
- afterCompletion——响应文本已经产生
public class MyInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println(request.getRequestURL() "-准备执行");
// response.getWriter().print("[]");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println(request.getRequestURL() "-目标处理成功");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println(request.getRequestURL() "-响应内容已产生");
}
}
- applicationContext配置过滤地址
拦截器使用细则
根据上面的方式我们设置拦截器,你会发现我们的拦截器对于页面加载的静态资源也进行了拦截,这是我们不希望看到的,所以我们实际开发过程中往往会这样设置。
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/restful/**"/>
<mvc:mapping path="/webapi/**"/>
<mvc:exclude-mapping path="/**.ico"/>
<mvc:exclude-mapping path="/**.jpg"/>
<mvc:exclude-mapping path="/**.gif"/>
<mvc:exclude-mapping path="/**.js"/>
<mvc:exclude-mapping path="/**.css"/>
<mvc:exclude-mapping path="/resources/**"/>
<bean class="com.imooc.restful.interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
用户流量拦截器
public class AccessHistoryInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(AccessHistoryInterceptor.class);
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
StringBuilder log = new StringBuilder();
log.append(request.getRemoteAddr());
log.append("|");
log.append(request.getRequestURL());
log.append("|");
log.append(request.getHeader("user-agent"));
logger.info(log.toString());
return true;
}
}
Spring MVC处理流程
总结
OK,到这里我们的Spring MVC基本就已经学完了。综合前面学过的Mybatis和Spring,我们就已经学会了SSM框架,后续我也会使用SSM框架做一个项目实战,一起来看看吧~
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgeiefk
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01