SpringMVC的controller层、异常处理类、拦截器

1.如何把controller数据返回到网页并回显

回顾: 之前学习servlet时,如何把数据保存并可以在网页上获取该数据。

request: 作用范围: 同一个请求内有效。setAttribute(key,value)

session:作用范围: 同一个会话有效,只要会话不关闭会一直有效。setAttribute(key,value)

网页如何获取保存的数据呢:可以使用EL表达式。${scope.key}

思考: 在springmvc中如何保存数据到网页上。

package com.controller;

import com.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Date;

@Controller
@SessionAttributes(value = {"user","user2"}) //设置哪些model的key在session范围
public class HelloController02 {

    @RequestMapping("/list")
    public String list(HttpServletRequest request){
        //查询到一个学生信息。
        Student student=new Student(1,"AAA","110@qq.com",new Date());
        //可以保存到request中,同一个请求
        request.setAttribute("s",student);
        return "list.jsp"; //转发
    }
    @RequestMapping("/list2")
    public String list2(Model model){ //如果你使用request,你和tomcat容器绑定了。 建议使用Model.
        //查询到一个学生信息。
        Student student=new Student(1,"BBB","110@qq.com",new Date());
        //可以保存到model中,同一个请求 和request是一样。
        model.addAttribute("s2",student);
        return "list.jsp"; //转发
    }
    //上面讲解都是保存request范围。如何保存到session范围。
    @RequestMapping("/list3")
    public String list3(HttpSession session){
        Student student=new Student(3,"CCC","120@qq.com",new Date());
        session.setAttribute("user",student);
        return "list.jsp"; //转发
    }

    @RequestMapping("/list4")
    public String  list4( Model model){
        Student student=new Student(3,"DDD2","120@qq.com",new Date());
        Student student2=new Student(3,"DDD~~~","120@qq.com",new Date());
        model.addAttribute("user",student);
        model.addAttribute("user2",student2); //默认在request范围
        return "list.jsp"; //转发
    }



}

2.如何使用重定向跳转

在方法的返回字符串的内容时加上redirect:

 @RequestMapping("list5")
    public String list5(){
        System.out.println("!!!!!!!!!!!!!!!!!");
        return "redirect:list.jsp"; //当springmvc看到你返回的字符串钟含有redirect:时 它认为你要进行重定向跳转
    }

3.springmvc返回json数据

(1)什么时候需要返回json数据。

异步请求时,ajax请求时。

(2)之前在servlet时如何返回json数据呢?

借助了Fastjson---手动把java对象转换为json格式的数据,并使用out.print(json)输出json数据。 关闭out对象。

springmvc如何返回json数据呢???

(1)内置了一个jar. jackson的jar包

  <!--jackson依赖 可以把java对象转换为json对象-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.13.2.2</version>
    </dependency>

(2) 在controller返回的数据类型变成javabean对象。

    @RequestMapping("json01")
    @ResponseBody //作用:把java对象转换为json对象
    public List<Student> json01(){ //这里返回的类型为java对象。 之前都是返回字符串
        List<Student> list=new ArrayList<Student>();
        list.add(new Student(1,"lqh","1111110@qq.com",new Date()));
        list.add(new Student(2,"刘德华","110@qq.com",new Date()));
        list.add(new Student(3,"黎明","210@qq.com",new Date()));
        list.add(new Student(4,"张学友","220@qq.com",new Date()));
        return list; //当中json
    }

(3) 访问该路径

 发现: 上面返回的时间类型的json数据显示的为毫秒,正常情况应该显示时间格式。如何解决。

 

4.springmvc的全局异常处理类

全局异常处理类的作用: 当controller发生异常,则有全局异常类来处理并执行相应的处理方法。

(1)如何使用全局异常处理类

[1] 创建一个异常类: @ControllerAdvice注解

@ControllerAdvice //表示该为类controller的异常处理类
public class MyExceptinHandle {


     @ExceptionHandler(value = RuntimeException.class) //当发生RuntimeException就会触发该方法
     public String error(){
         return "error.jsp";
     }

    @ExceptionHandler(value = Exception.class) //当发生Exception就会触发该方法
    public String error2(){
        return "error2.jsp";
    }
}

[2] 保证springmvc能够扫描到该类。

 如果是ajax请求返回的应该是一个json数据。

5.springmvc拦截器

过滤器: 过滤掉某些资源,

拦截器只会拦截controller层的资源路径。

 如何使用拦截器:

public class MyInterceptor implements HandlerInterceptor {

    //拦截器的处理方法。
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("经过了该拦截器");

        return true;//true:表示拦截器放行 false:不放行
    }
}

(2) 把该类注册到springmvc配置文件上。

<!--拦截器的配置-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--mapping:哪些路径需要经过拦截器
               /**: 表示n层路径
               /*:表示一层路径
                -->
            <mvc:mapping path="/**"/>
            <!--exclude-mapping:设置不经过该拦截的路径-->
            <mvc:exclude-mapping path="/list2"/>
            <mvc:exclude-mapping path="/list3"/>
            <!--bean表示你自定义的拦截器类路径-->
            <bean class="com.interceptor.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值