springmvc框架2

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

2.如何使用重定向跳转

3. 返回json数据。

4. 全局异常处理类。

5. 拦截器。

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

servlet时,如何把数据保存并可以在网页上获取该数据。

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

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

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

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

package com.ykq.controller;

import com.ykq.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;

/**
 * @author: jh
 * @create: 2022/6/7
 */
@Controller
@SessionAttributes(value = {"user","user2"}) //设置哪些model的key在session范围
public class HelloController02 {

    @RequestMapping("/list")
    public String list(HttpServletRequest request){
        //查询到一个学生信息。
        Student student=new Student(1,"张三","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,"李四","110@qq.com",new Date());
        //可以保存到model中,同一个请求 和request是一样。
        model.addAttribute("s2",student);
        return "list.jsp"; //转发
    }
    //如何保存到session范围。
    @RequestMapping("/list3")
    public String list3(HttpSession session){
        Student student=new Student(3,"王五","120@qq.com",new Date());
        session.setAttribute("user",student);
        return "list.jsp"; //转发
    }

    @RequestMapping("/list4")
    public String  list4( Model model){
        Student student=new Student(3,"赵四","120@qq.com",new Date());
        Student student2=new Student(3,"徐六","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,"郭富城","100@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)如何使用全局异常处理类

a.创建一个异常处理类,在类上面加 @ControllerAdvice注解

@ControllerAdvice //表示该为类controller的异常处理类
public class MyExceptinHandle {
 
    @ExceptionHandler(value = RuntimeException.class) //当发生RuntimeException就会触发该方法
     public String error(){
         return "error.jsp";
     }
 
    @ExceptionHandler(value = Exception.class) //当发生Exception就会触发该方法
    public CommonResult error2(){
        return new CommonResult(,"",null);
    }
}

b.保证springmvc能够扫描到该类。

<!--包扫描 指定的包或者子包-->
<context:comonpent-scan base-package="com.zjh.controller"/>

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

@ExceptionHandler(value = RuntimeException.class) //当发生RuntimeException就会触发该方法
@ResponseBody

public Map error(){
    Map map = new HashMap();
    map.put("code","5000");
    map.put("msg","错误");
    return map;
}

5. springmvc拦截器

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

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

 

如何使用拦截器:

a.创建一个类,并实现HandlerInterceptor

public class MyInterceptor implements HandlerInterceptor {

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

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

b.把该类注册到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.ykq.interceptor.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值