springmvc框架, 保存,响应数据

1.控制层如何保存数据到页面

可以保存到四大域对象中.pageContext,request,session,application
request.setAttribute(key,value);//存放数据到request中
request.getAttribute(key);或${key}//获取reques对象中保存的数据

1.1springmvc如何保存数据-request

//把请求路径hello映射到该方法上 //自动接受参数为id的值,而且会自动转型了。 @RequestMapping("/hello") public String hello(HttpServletRequest request){ //可以保存在request对象中 request.setAttribute("name","张三"); System.out.println("~~~~~hello~~~~"); return "main"; //经过视图解析器--/views/main.jsp //这里使用的请求转发 // return "redirect:/views/main.jsp"; //表示我使用重定向跳转 而且不经过视图解析器 }

//上面保存在Request中需要依赖与Servlet。spring自身也提供了一个类用于保存数据Model 默认周期和request对象一样 @RequestMapping("/hello01") public String hello01(Model model){ //可以保存在request对象中 model.addAttribute("name","李四"); System.out.println("~~~~~hello~~~~"); return "main"; //经过视图解析器--/views/main.jsp //这里使用的请求转发 // return "redirect:/views/main.jsp"; //表示我使用重定向跳转 而且不经过视图解析器 }

1.2springmvc保存数据s

Controller
@SessionAttributes(value = {"name","age"}) //指定在model中哪些数据的范围为session范围
public class Hello02Controller {

    @RequestMapping("/list01")
    public String list01(HttpSession session){
        //保存数据到session
        session.setAttribute("name","王五");
        return "redirect:/views/main.jsp";
    }

    @RequestMapping("/list02")
    public String list02(Model model){
        //保存数据到session
        model.addAttribute("name","赵六");
        model.addAttribute("age","18");
        return "redirect:/views/main.jsp";
    }
}

2.springmvc相应json数据

2.1什么时候需要响应json数据

ajax异步请求时需要响应的是json数据。实现ajax的方式

第一种:jquey 第二种:axios

2.2servlet之前如何响应json数据

1. 引入fastjson依赖
2. JSON.toJsonString(java对象)把java对象转化为json字符串;
3. out.print(json数据);
4. out.flush(); out.close();

2.3 springmvc响应json数据

1.引入依赖jackson

!--jackson依赖:把controller层方法返回的java对象转化为json字符串-->
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
       <version>2.13.3</version>
     </dependency>

3.控制层返回对象

@Controller
public class AjaxController {

    //返回的为java对象
    @RequestMapping("/ajax01")
    @ResponseBody //把该方法返回的java对象转化为json字符串---jackson
    public User ajax01(){
        User user=new User("张三","123",18,"男",new Date());
        return user; //
    }

    //返回的为java对象
    @RequestMapping("/ajax02")
    @ResponseBody //把该方法返回的java对象转化为json字符串---jackson
    public List<User> ajax02(){
        List<User> users=new ArrayList<User>();
        users.add(new User("张三1","123",18,"男",new Date()));
        users.add(new User("张三2","123",18,"男",new Date()));
        users.add(new User("张三3","123",18,"男",new Date()));
        users.add(new User("张三4","123",18,"男",new Date()));
        return users; 
    }
}

1.引入jackson依赖

2.在controller方法上使用@ResponseBody:java对象转化为json字符串

3.该方法返回类型java对象

4.springmvc全局异常处理

当controller出现异常时,全部交于springmvc的全局异常处理类解决

4.1.定义一个全局异常处理类

@ControllerAdvice //控制层的异常处理
public class MyGlobleExceptionHandler {
    //当控制层发生RuntimeException异常类型时交于该方法处理
    @ExceptionHandler(value = RuntimeException.class)
    public String my01(RuntimeException e){ //把发生异常的对象交于该方法的参数
        System.out.println("发生了运行时异常");
        return "fail";
    }

    //当控制层发生RuntimeException异常类型时交于该方法处理
    @ExceptionHandler(value = Exception.class)
    public String my01(Exception e){ //把发生异常的对象交于该方法的参数
        System.out.println("发生了Exception时异常");
        return "fail";
    }
}

4.2.修改controller

  @RequestMapping("/list01")
    public String list01(HttpSession session,int id) throws Exception {
        if(id==1){
            int c=10/0;
        }else if(id==2){
            throw new Exception("~~~~~~~~");
        }
        //保存数据到session
        session.setAttribute("name","王五");
        return "redirect:/views/main.jsp";
    }

5.springmvc的拦截器

以前:filter过滤。拦截不符合要求的一切请求支援
拦截器:拦截器只会拦截controller层的资源

实现拦截器

1.创建一个拦截器
public class MyInterceptor implements HandlerInterceptor {


    //前缀拦截器--Boolean 如果返回true 允许放行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("~~~~~~~~~lan jie qi~~~~~~~~~~~~~~~~~~~~");
        return false;
    }
}

2.配置拦截器

 <!--配置拦截器规则-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--mapping:拦截的规则/**:表示多层路径-->
            <mvc:mapping path="/**"/>
            <!--exclude-mapping:无需经过拦截器的路径 -->
            <mvc:exclude-mapping path="/list02"/>
            <!--bean:表示自定义的拦截器名称-->
            <bean class="com.ykq.interceptor.MyInterceptor"/>
        </mvc:interceptor>

    </mvc:interceptors>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值