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","[email protected]",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","[email protected]",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","[email protected]",new Date());
        session.setAttribute("user",student);
        return "list.jsp"; //转发
    }

    @RequestMapping("/list4")
    public String  list4( Model model){
        Student student=new Student(3,"DDD2","[email protected]",new Date());
        Student student2=new Student(3,"DDD~~~","[email protected]",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包

  
    
      com.fasterxml.jackson.core
      jackson-databind
      2.13.2.2
    

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

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

(3) 访问该路径

SpringMVC的controller层、异常处理类、拦截器_第1张图片

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

SpringMVC的controller层、异常处理类、拦截器_第2张图片

 

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数据。 SpringMVC的controller层、异常处理类、拦截器_第3张图片

5.springmvc拦截器

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

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

SpringMVC的controller层、异常处理类、拦截器_第4张图片

 如何使用拦截器:

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配置文件上。


    
        
            
            
            
            
            
            
            
        
    

你可能感兴趣的:(java,开发语言,spring)