SpringMVC的拓展
Posted cgblpx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC的拓展相关的知识,希望对你有一定的参考价值。
响应
是指传值到页面的方式
利用Model
方式1:model.addAttribute(“personList”, ps.list()); 推荐,清晰
方式2:model.addAttribute(ps.list());
@RequestMapping(value="/home")
public String goHome(Model model){
String message = "springMVC new home!";
model.addAttribute("message", message);
return "index";
}
Model实际上是一个map,在网页调用时,通过视图解析器提交页面前,将map的内容设置到新产生的请求request流中。
返回json
@RequestMapping("/json")
@ResponseBody
public List<Person> person(){
List<Person> list = new ArrayList<Person>();
for(int i=0;i<5;i++){
Person p = new Person();
p.setId(i);
p.setName("chen"+i);
list.add(p);
}
return list;
}
拦截器
概述
Springmvc提供的, 主要用于拦截用户请求并在方法执行前后添加功能.本质上也是AOP的思想. SpringMVC框架自动将配置的拦截器注入到所有的mapping中.
应用场景:
1、日志记录:可以记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等等。
2、权限检查:如登陆检测,进入处理器检测是否登陆,如果没有直接返回到登陆页面。
3、性能监控:可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间;
4、事务控制:对事务的提交回滚等,与业务无关的代码
PreHandle //方法执行前被调用
Method //要执行的方法
PostHandle //方法执行后被调用
AfterCompletion //完全执行完后被调用(如:释放资源)
创建拦截器
创建拦截器,必须实现接口HandlerInterceptor,并重写三个方法,添加业务
package cn.tedu.interceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//自定义拦截器:在方法执行前后添加与业务无关的功能
@Component//交给spring管理bean的ioc di
public class MyInterceptor implements HandlerInterceptor{
long start ;
long end ;
@Override //在方法执行前调用
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
start = System.currentTimeMillis();
System.out.println("方法要被执行啦~");
return true;//放行
}
@Override //在方法执行后调用
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
end = System.currentTimeMillis();
System.out.println("方法执行完啦~");
}
@Override //都完成后调用
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("都干完啦~耗时: "+(end-start)+"ms");
}
}
注册拦截器
注册拦截器,必须实现接口WebMvcConfigure,通知spring容器管理这个类
package cn.tedu.interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration//告诉spring容器,我是一个配置类
public class RegistInterceptor implements WebMvcConfigurer {
@Autowired//自动装配
private MyInterceptor a ;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//把自定义的拦截器,放入容器中
registry.addInterceptor(a);
}
}
使用拦截器
打开浏览器,访问所有Controller中的任何方法,都会触发拦截器,执行拦截器的功能
package cn.tedu.interceptor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/in")
public class InController {
@RequestMapping("/get")
public void get(){
System.out.println(111);
}
@RequestMapping("/save")
public void save(){
for (int i = 0; i < 1000; i++) {
System.out.print(i);
}
}
}
测试
以上是关于SpringMVC的拓展的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC 3.2 Thymeleaf Ajax 片段
每个 Python 开发者必备的5款 VScode 拓展工具包!