zoukankan      html  css  js  c++  java
  • springmvc中Controller前端控制器的映射与返回数据,以及异常处理

    .@RequestMapping映射

    该注解中存的是映射路径的字符串

      1.1 value的值是一个数组,也就是说可以定义多个访问路径,同时“.action”可以省略,前端控制器中主要查找主体部分。注意在前端页面访问时必须要加上“.action”。

      1.2 method表示前端请求的方法,必须要存在POST,当然此属性可以不设置,默认所有都可以。

      1.3 此注解还可以出现在类前面,表示该类中所有的方法访问路径都需要加上/item,以此区别不同控制器中的方法

    2.Controllre中方法返回值

     1     //查询该id的数据
     2     @RequestMapping(value="/itemEdit.action")
     3     public ModelAndView test2(HttpServletRequest request,Integer id){
     4     
     5         //获取页面传递的id
     6         String str = request.getParameter("id");
     7         //Integer id = Integer.parseInt(str);
     8         //调用service获取items
     9         Items items = itemsService.findItemsById(id);
    10         
    11         //返回页面
    12         ModelAndView mv = new ModelAndView();
    13         mv.addObject("item", items);
    14         mv.setViewName("editItem");
    15         return mv;
    16     }
    • ModelAndView,返回类型是一个页面视图,将查询的数据通过add*方法添加,setViewName将页面进行绑定,该类型将数据与视图混合,适用于普遍情况。
     1     //更新修改的信息
     2     @RequestMapping(value = "/voidTest.action")
     3     public void test5(Items items,Model model,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
     4         //条件修改
     5         itemsService.updateItems(items);
     6         
     7         model.addAttribute("model", "model");
     8         
     9         request.getRequestDispatcher("success").forward(request, response);
    10         
    11     }
    • void,同样可以通过model类传递数据,跳转页面时就需要采用原始的Servlet方式,上面是转发模式。该类型主要用于不需要跳转视图,例如Ajax的数据处理
     1     @RequestMapping(value="queryItem.action")
     2     public String test4(Integer[] ids,Model model){
     3         
     4         System.out.println(ids[0]);
     5         
     6         model.addAttribute("model", "model");
     7         //return "redirect:/itemEdit.action?itemId=" + ids[0];
     8         //return "forward:/itemEdit.action";
     9         return "success";
    10     }
    • String,官方推荐使用这种模式,它的优点在于将视图与数据分离、解耦,符合三层结构的思想。返回的字符串需是jsp页面或者.action,可以采用转发和重定向的方式。默认是转发。(转发和重定向的区别这里不多说了,简单来说,转发是一次请求不会对视request数据,重定向两次请求,request数据丢失)

    3.异常处理

      3.1 springmvc的异常处理模式

       如图所示,一旦出现异常spring会一直向上抛,当到前端控制器时,spring会把异常转交给异常处理器(HandlerExceptionResolver),这是一个接口,需要自己实现一个类,同时该类需要在springmvc中注册才能被使用。
      异常分为两种,执行异常(不可知异常)与预期异常

       3.2  构建自定义异常处理器
        首先有一下几个步骤,创建自定义异常类->创建自定义异常处理器,用于方便返回需要的异常信息。
        异常类:没有过多地添加属性,只是简单的封装。

    public class MyException extends Exception {
        // 异常信息
        private String message;
    
        public MyException() {
            super();
        }
    
        public MyException(String message) {
            super();
            this.message = message;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
    }

        异常处理器:

     1 public class MyHandlerExceptionResolver implements HandlerExceptionResolver {
     2 
     3     @Override
     4     public ModelAndView resolveException(HttpServletRequest request,
     5             HttpServletResponse response, Object obj,
     6             Exception e) {
     7         
     8         String msg;
     9         
    10         //预期异常
    11         if(e instanceof MyException){
    12             msg = e.getMessage();
    13         }else {
    14             // 如果是运行时异常,则取错误堆栈,从堆栈中获取异常信息
    15             Writer out = new StringWriter();
    16             PrintWriter s = new PrintWriter(out);
    17             e.printStackTrace(s);
    18             msg = out.toString();
    19         }
    20 
    21         // 返回错误页面,给用户友好页面显示错误信息
    22         ModelAndView modelAndView = new ModelAndView();
    23         modelAndView.addObject("msg", msg);
    24         modelAndView.setViewName("error");
    25 
    26         return modelAndView;
    27 
    28     }
    29     
    30 }

        其中,Object表示异常的具体位置,由全路径表示。

      3.3 配置
     1 <!-- 配置异常处理器 --> 2 <bean id="myHandler" class="com.springmvc.exception.MyHandlerExceptionResolver"></bean> 

  • 相关阅读:
    solr一些错误
    maven聚合工程之找不到符号,类等错误
    图片服务器搭建及上传测试,网络配置问题(errno: 111)
    安装Nginx,make时报错:/usr/bin/ld: cannot find -lfdfsclient或者类似找不到-lxxx
    关于PCA算法的学习
    生物信息及开发常用的Linux命令
    05.课程主页面三个接口开发
    04.增加media文件配置
    3.课程相关5张表设计
    2.增加抽象基类
  • 原文地址:https://www.cnblogs.com/lisd/p/10299249.html
Copyright © 2011-2022 走看看