目录
Spring MVC入门学习(五)
/  

Spring MVC入门学习(五)

Spring MVC入门学习之(五)

配置拦截器

   springmvc的拦截器只能拦截控制器, 不能拦截jsp. 当我们不想让别人访问的jsp文件的时候, 可以把jsp界面放在WEB-INF文件夹中, 这个目录称为安全目录, 不能被外界直接访问.

当然我们可以通过设置过滤器拦截jsp界面.

编写自定义拦截器

   编写的类需要实现HandlerInterceptor接口, 其中有三个方法(preHandle、postHandler、afterCompletion). 其实生命周期和servlet中的过滤器一致. preHandle方法是在执行控制方法之前执行, 如果返回为true, 放行, 即执行Controller, 如果返回false, 即不放行, 不执行Controller. postHandler为Controller方法执行之后 执行此方法. afterCompletion为最后执行, 即返回视图后才执行

xml配置

<mvc:interceptors> <!--配置一个全局的拦截器, 拦截所有请求--> <!-- <bean class="cn.lacknb.interceptor.SessonInterceptor"/>--> <mvc:interceptor> <!--配置拦截器作用的路径--> <mvc:mapping path="/**"/> <mvc:exclude-mapping path="/user/login.do"/> <mvc:exclude-mapping path="/user/register.do"/> <bean class="cn.lacknb.interceptor.SessonInterceptor"/> </mvc:interceptor> </mvc:interceptors>

多个拦截器的执行流程

现在有拦截器111和拦截器222, 执行分别输出111和222.

上述的配置顺序, 当执行完成之后, 输出顺序为:

​ preHandler------1111

​ preHandler------2222

​ postHandler------2222

​ postHandler------1111

​ afterCompletion------2222

​ afterCompletion------1111

JSON数据交互

需要准备的jar包

<!--自动封装json为实体类对象, 并返回给前台--> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.8</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.8</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.8</version> </dependency>

在使用注解开发时需要用到两个重要的JSON格式转换注解, 分别是@RequestBody和@ResponseBody

  • @RequestBody: 用于将请求体中的数据绑定到方法的形参中, 改注解应用在方法的形参上(其实就是将前台传来的json数据转成实体类对象)
  • @ResponseBody: 用于直接返回return对象, 该注解应用在方法上.

前端代码

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script> <script> $(function () { $('#btn').click(function () { alert("hello") $.ajax({ /*这里一定要表明contentType为json类型, 否则后台接收不到数据, 会报415错误*/ contentType: "application/json; charset=UTF-8", url: "${pageContext.request.contextPath}/test/ajax.do", dataType: "json", method: "post", data: JSON.stringify({"name": "张三", "sex": "女", "age": 13 }), success: function (data) { console.log(data) } }) }) }) </script> </head> <body> <button id="btn">ajax模拟请求</button>

后端代码

实体类user

package cn.lacknb.bean; public class User { private String name; private String sex; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }

控制器controller

package cn.lacknb.controller; import cn.lacknb.bean.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/test") public class AjaxTest { /* * * 这里的: * RequestBody : 接收json数据 并封装成对象 * ResponseBody: 将对象封装成json数据 并返回 * * * */ @RequestMapping(value = "/ajax.do", method = RequestMethod.POST) @ResponseBody public User ajaxTest(@RequestBody User user){ System.out.println(user); user.setAge(77); user.setName("李四"); user.setSex("男"); return user; } }

Web.xml

<!--中央调度器--> <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:spring/spring-*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

标题:Spring MVC入门学习(五)
作者:gitsilence
地址:https://blog.lacknb.cn/articles/2019/11/16/1577974159784.html

Gitalking ...