SpringMvc划分细讲(2)

4 篇文章 0 订阅
3 篇文章 0 订阅

目录

回顾

正文

1.如何把控制层的数据渲染到页面

1.1 思考:原来在讲servlet时我们把数据保存在哪些对象中。

① 创建我们的实体类:

 2.编写HelloController:

 ③ 运行我们的汤姆猫(tomcat)服务器:

model:

 request:

 session:

2. 返回json数据

2.1 里面自带了转换---引入它的依赖。jackson依赖

2.2 控制层直接返回对应的对象类型。@ResponseBody--->把java对象转换为json对象。

① 写入我们的异常处理类,并跳转到error 

② 创建我们的error.jsp文件

 ③ 编写HelloController:

 ④ 显示时间戳为1970到现在经历的毫秒格式​

 ⑤ 解决办法

⑥ 全局异常跳转到error中的代码

 3.拦截器

3.1 回顾:

① 过滤器: 拦截器所有的资源.[jsp,servlet,css,js,img]

② 拦截器: 只会拦截springmvc的控制层接口路径。

3.2 流程:

 3.3 如何定义拦截器

① 自定义一个拦截器类。

② 把自定义的拦截器声明到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>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值