Spring MVC的相关应用

1. spring 中的拦截器

请求到达控制器之前,先经过拦截器,才到达控制器

Filter 过滤器接口
HandlerInterceptor 拦截器接口

  1. 编写拦截器
@Component
public class Interceptor1 implements HandlerInterceptor {

    // 在控制器方法执行前被调用, 返回 true 放行请求, 如果返回 false 拦截请求(不会前进了)
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("==========> 进入了 Interceptor1 preHandle");
        return true;
    }

    // 在控制器方法执行后被调用
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("==========> 进入了 Interceptor1 postHandle");
    }

    // 在控制器和视图都完成后被调用
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("==========> 进入了 Interceptor1 afterCompletion");
    }
}
  1. 配置拦截器
<!-- 某个拦截器 -->
<mvc:interceptor>
    <!-- 拦截器要匹配的路径 -->
    <mvc:mapping path="/hello" />

    <!-- 要调用的拦截器 -->
    <ref bean="interceptor1"/>
</mvc:interceptor>

2. 对 json 数据的支持

var xhr = new XMLHttpRequest(); 可以在页面不刷新的情况下与服务器进行交互

xhr.onload = function() {
    var json = xhr.responseText;
    JSON.parse(json); // 把json字符串转为 js 对象
};

xhr.open("get|post", url, true|false);
xhr.send();

2.1 @ResponseBody 注解

加在控制器方法上,将控制器方法的返回结果转换为json字符串,并写入响应

2.2 @RestController 注解

加在控制器类上,表示所有控制器方法都加了 @ResponseBody 注解

2.3 其他注解

@RequestMapping // 不区分 get,post

@GetMapping // 专门匹配 get 请求 等价于 @RequestMapping(method=RequestMethod.GET)
@PostMappping // 专门匹配 post 请求
@DeleteMapping // 专门匹配 delete 请求
@PutMapping // 专门匹配 put 请求

get 一般对应查询操作 select
post 一般对应新增操作 insert
delete 对应删除操作 delete
put 对应修改操作 update

2.4 @RequestBody

把请求中的json 字符串,转换为java 对象
服务器端代码:

@PostMapping("/json4")
// @RequestBody 作用是把请求体中的 json 字符串,转为 java 中的对象
public void json4(@RequestBody Student student) {
    System.out.println(student);
    System.out.println("ok");
}

客户端代码:

function sendStudent() {
    var student = {"id": 2, "name":"李四"}; // {id: 2, name:"李四"}
    var xhr = new XMLHttpRequest();
    xhr.open("post", "/json4", true);
    // 设置请求体的格式为 json 格式
    xhr.setRequestHeader("content-type", "application/json");

    // 将 js 对象 转为为 json 字符串, 并作为请求体, 发送给服务器
    xhr.send( JSON.stringify(student) );
}

2.5 ajax 请求跨域(源)

两个应用程序,ip 地址不一样或是端口号不一样,就称之为跨域

localhost:8080 提供控制器,返回json数据, 通过 cors 的技术运行其他域的机器访问我的数据
@CrossOrigin(“允许访问我的数据的ip地址”)

@CrossOrigin("http://192.168.9.3") // 只允许9.3 访问
@CrossOrigin("http://192.168.9.3,http://192.168.9.4,http://192.168.9.5") //允许多个ip访问
@CrossOrigin("*") // 允许所有域访问

可以加在方法上,表示只有此方法允许跨域
还可以加在控制器类上,表示此控制器中的所有方法都允许跨域

localhost:9090 ajax 获取 localhost:8080 的json数据, 默认情况没有权限访问

3. 重定向请求

@RequestMapping("/test1")
public String test1() {
    // 重定向到 /test2 控制器
    return "redirect:/test2";
}

@RequestMapping("/test2")
public void test2() {
    //...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值