目录
1.1 思考:原来在讲servlet时我们把数据保存在哪些对象中。
2.1 里面自带了转换---引入它的依赖。jackson依赖
2.2 控制层直接返回对应的对象类型。@ResponseBody--->把java对象转换为json对象。
① 过滤器: 拦截器所有的资源.[jsp,servlet,css,js,img]
② 把自定义的拦截器声明到springmvc容器中。---springmvc.xml
回顾
朋友们大家好,上篇我们简单的了解了SpringMvc的一些基础知识,同样的还是先来回顾一下上篇内容:
1. springmvc.----类似于servlet.完成视图和模型之间交互的桥梁。
2. springmvc如何接受参数。
3. springmvc处理静态资源。
4. 必须记住springmvc的流程。面试必问题
正文
老规矩,废话不多说,开始我们今天的内容
1.如何把控制层的数据渲染到页面
1.1 思考:原来在讲servlet时我们把数据保存在哪些对象中。
request, 同一个请求内有效。 ==>EL表达式 获取相应范围的对象数据。
session: 同一个会话有效。
① 创建我们的实体类:
2.编写HelloController:
③ 运行我们的汤姆猫(tomcat)服务器:
model:
request:
session:
@Controller
@RequestMapping("/index01")
public class HelloController01 {
@RequestMapping("/a")
public String index01(Model model){
User user = new User();
model.addAttribute("user",user);
return "index01";
}
@RequestMapping("/b")
public String index02(HttpServletRequest request){
User user = new User("老魏","111",18,new Date());
request.setAttribute("user2",user);
return "index01";
}
@RequestMapping("/c")
public String index02(HttpSession session){
User user = new User("老魏","111",18,new Date());
session.setAttribute("user3",user);
return "index01";
}
}
2. 返回json数据
2.1 里面自带了转换---引入它的依赖。jackson依赖
<!--jackson依赖 可以整合springmvc把java对象转换为json对象-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.4</version>
</dependency>
2.2 控制层直接返回对应的对象类型。@ResponseBody--->把java对象转换为json对象。
① 写入我们的异常处理类,并跳转到error
② 创建我们的error.jsp文件
③ 编写HelloController:
④ 运行汤姆猫,出现错误跳转到error.jsp
④ 显示时间戳为1970到现在经历的毫秒格式
⑤ 解决办法
⑥ 全局异常跳转到error中的代码
@ControllerAdvice //该类为异常处理类。
public class MyHandler {
//ExceptionHandler异常发生时执行的方法。
@ExceptionHandler(value = ArithmeticException.class) //如果不使用value默认处理Throwable异常。
public String handlerException(){
System.out.println("!~~~~~~~~~~~~~~~~~~");
return "error";
}
}
注意: 一定要让springmvc扫描到该异常处理类。
3.拦截器
3.1 回顾:
① 过滤器: 拦截器所有的资源.[jsp,servlet,css,js,img]
② 拦截器: 只会拦截springmvc的控制层接口路径。
3.2 流程:
3.3 如何定义拦截器
① 自定义一个拦截器类。
public class MyInterceptor implements HandlerInterceptor {
//拦截器方法。如果该方法返回true则是放行 如果返回false 则是拦截。
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~拦截器~~~~~~~~~~~~~~~~~~~~~~~");
return true;
}
}
② 把自定义的拦截器声明到springmvc容器中。---springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--1.包扫描 扫描我们自己的控制层类所在的包或者子包-->
<context:component-scan base-package="com.fan"/>
<mvc:annotation-driven/>
<!--放行静态资源-->
<mvc:default-servlet-handler/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--声明拦截器-->
<!-- <mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="拦截器的路径"/>
<mvc:exclude-mapping path="不拦截的路径"/>
<bean class="自定义拦截器的全路径"/>
</mvc:interceptor>
</mvc:interceptors>-->
<mvc:interceptors>
<mvc:interceptor>
<!--/*: 一层路径 /hello
/**: 多层路径
-->
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/index02/json01"/>
<bean class="com.fan.interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
</beans>