我又来了,有没有想我呀话不多说关门上车
目录
一、回顾
1. springmvc.----类似于servlet.完成视图和模型之间交互的桥梁。
2. springmvc如何接受参数。
3. springmvc处理静态资源。
4. 必须记住springmvc的流程。面试必问题(一定要熟悉记住,我后期会单独发一个图片的流程图)
二、正文
1. 如何把控制层的数据渲染到页面。
2. 返回json数据。
3. 定义全局异常处理。
4. 拦截器。
三、如何把控制层的数据渲染到页面
思考:原来在讲servlet时我们把数据保存在哪些对象中。
request, 同一个请求内有效。 ---->EL表达式 获取相应范围的对象数据。
session: 同一个会话有效。
@Controller
@RequestMapping("/hello03")
public class Hellocontroller03 {
@RequestMapping("/a")
public String hello01(Model model){//model对象可以理解为request对象。凡是在
User user = new User("佩豆","577",0,new Date());
model.addAttribute("user",user);
return "hello";//springmvc采用请求转发的跳转。
}
@RequestMapping("/b")
public String hello02(HttpServletRequest request){
User user = new User("佩豆","577",0,new Date());
request.setAttribute("user2",user);
return "hello";//springmvc采用请求转发的跳转。
}
///上面两种方法的作用是一样 都是保存在request范围。
@RequestMapping("/c")
public String hello03(HttpSession session){
User user = new User("佩豆","577",0,new Date());
session.setAttribute("user3",user);
return "hello";
}
}
四、返回json数据
(1)、里面自带了转换--引入它的依赖。Jackson依赖
<!--jackson依赖 可以整合springmvc把java对象转换为json对象-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.4</version>
</dependency>
(2)、控制层直接返回对应的对象类型
@ResponseBody-->把Java对象转换为json对象。
测试:
时间类型的输出出来会是毫秒数因此我们要在实体类中进行转换
五、定义全局异常处理
一旦后台出现异常时,网页会显示很丑的异常信息。 为了可以显示好看,我们定义一个统一的异常处理类。
异常的结构:
Throwable: 异常的根类。
Error: 错误。这个错误程序员无法解决。
Exception:异常。
编译异常:
运行时异常: RuntimeException: 只会在运行的时候出现。
@ControllerAdvice
public class Myhandler {
//ExceptionHandler异常发生时要执行的方法
@ExceptionHandler(value =ArithmeticException.class)
public String handlerException(){
System.out.println("++++++++++");
return "error";
}
}
注意: 一定要让springmvc扫描到该异常处理类。
六、拦截器
过滤器: 拦截器所有的资源.[jsp,servlet,css,js,img]
拦截器: 只会拦截springmvc的控制层接口路径。
流程:
如何自定义一个拦截器:
(1)自定义一个拦截器类
public class MyIntercepter implements HandlerInterceptor {
//拦截器方法。如果方法返回true则是放行的意思,反之是拦截
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
System.out.println("经过了拦截器+++++");
return true;
}
}
(2)把自定义的拦截器声明到springmvc容器中。---springmvc.xml
<!--声明拦截器-->
<!-- <mvc:interceptors>-->
<!-- <mvc:interceptor>-->
<!-- <mvc:mapping path="拦截的路径"/>-->
<!-- <mvc:exclude-mapping path="不拦截的路径"/>-->
<!-- <bean class="自定义拦截器的路径"/>-->
<!-- </mvc:interceptor>-->
<!-- </mvc:interceptors>-->
<!-- /* 代表一层路径 /hello
/** 代表多层路径 /hello/a 等多层的
-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/hello04/json01"/>
<bean class="com.Gzy.intercepter.MyIntercepter"/>
</mvc:interceptor>
</mvc:interceptors>
</beans>
测试:
大家可以自己定义一个类来测试一下,下一篇开始升级啦