.@RequestMapping映射

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

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

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

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

2.Controllre中方法返回值

     //查询该id的数据
@RequestMapping(value="/itemEdit.action")
public ModelAndView test2(HttpServletRequest request,Integer id){ //获取页面传递的id
String str = request.getParameter("id");
//Integer id = Integer.parseInt(str);
//调用service获取items
Items items = itemsService.findItemsById(id); //返回页面
ModelAndView mv = new ModelAndView();
mv.addObject("item", items);
mv.setViewName("editItem");
return mv;
}
  • ModelAndView,返回类型是一个页面视图,将查询的数据通过add*方法添加,setViewName将页面进行绑定,该类型将数据与视图混合,适用于普遍情况。
     //更新修改的信息
@RequestMapping(value = "/voidTest.action")
public void test5(Items items,Model model,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
//条件修改
itemsService.updateItems(items); model.addAttribute("model", "model"); request.getRequestDispatcher("success").forward(request, response); }
  • void,同样可以通过model类传递数据,跳转页面时就需要采用原始的Servlet方式,上面是转发模式。该类型主要用于不需要跳转视图,例如Ajax的数据处理
     @RequestMapping(value="queryItem.action")
public String test4(Integer[] ids,Model model){ System.out.println(ids[0]); model.addAttribute("model", "model");
//return "redirect:/itemEdit.action?itemId=" + ids[0];
//return "forward:/itemEdit.action";
return "success";
}
  • 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;
} }

    异常处理器:

 public class MyHandlerExceptionResolver implements HandlerExceptionResolver {

     @Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object obj,
Exception e) { String msg; //预期异常
if(e instanceof MyException){
msg = e.getMessage();
}else {
// 如果是运行时异常,则取错误堆栈,从堆栈中获取异常信息
Writer out = new StringWriter();
PrintWriter s = new PrintWriter(out);
e.printStackTrace(s);
msg = out.toString();
} // 返回错误页面,给用户友好页面显示错误信息
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg", msg);
modelAndView.setViewName("error"); return modelAndView; } }

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

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

 SHAPE
 \* MERGEFORMAT

springmvc中Controller前端控制器的映射与返回数据,以及异常处理的更多相关文章

  1. springMVC中controller的几种返回类型

    ==网文1,还不错,感觉比较老旧springMVC中controller的几种返回类型 - CSDN博客http://blog.csdn.net/qq_16071145/article/details ...

  2. springmvc 中controller与jsp传值

    参考:springmvc 中controller与jsp传值 springMVC:将controller中数据传递到jsp页面 jsp中,死活拿不到controller中的变量. 花了半天,网上列出各 ...

  3. 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]

    目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...

  4. SpringMVC中Controller

    详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] 目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodR ...

  5. 详解SpringMVC中Controller的方法中参数的工作原理——基于maven

    转自:http://www.tuicool.com/articles/F7byQn 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:ht ...

  6. SpringMVC中controller返回图片(转)

    本文转自:http://blog.csdn.net/u011637069/article/details/51112187 SpringMVC中controller通过返回ModelAndView然后 ...

  7. 【MVC - 参数原理】详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]

    前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/spring ...

  8. SpringMVC中@Controller和@RequestMapping用法和其他常用注解

    一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...

  9. SpringMVC中@Controller和@RequestMapping用法和其他常用注解(转)

    一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...

随机推荐

  1. mfix中统计气泡体积

    先转换为point data 提取空隙率在0.45-1.0之间的网格,为后面提取气泡内网格做准备 把free board部分去掉 然后积分 选择cell data后就得到气泡内所有网格的体积和,如果网 ...

  2. SPSS学习系列之SPSS Statistics导入读取数据(多种格式)(图文详解)

    不多说,直接上干货! SPSS Statistics导入读取数据的步骤: 文件  ->  导入数据 成功! 欢迎大家,加入我的微信公众号:大数据躺过的坑     免费给分享       同时,大 ...

  3. JavaScript设计模式-6.封装

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. python-哈夫曼树

    #!/usr/bin/python #coding=utf-8 #哈夫曼树创建 class Node(): def __init__(self,value,left=None,right=None): ...

  5. 图说使用socket建立TCP连接

    在网络应用如火如荼的今天,熟悉TCP/IP网络编程,那是最好不过.如果你并不非常熟悉,不妨花几分钟读一读. 为了帮助快速理解,先上个图,典型的使用socket建立和使用TCP/UDP连接过程为(截图来 ...

  6. FocusBI: 《DW/BI项目管理》之数据库表结构 (原创)

    关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. <商业智能教程>pdf下载地址 链接:https://pan.baidu.com/ ...

  7. 解决php中json_decode的异常JSON_ERROR_CTRL_CHAR (json_last_error = 3)

    https://www.cnblogs.com/sanshuiqing/p/6022619.html 该字符中含了ASCII码ETB控制符,即\x17导致json解析失败 (截图中显示ETB是因为用了 ...

  8. 你知道吗, CoreGraphics绘图系统和Bezier贝塞尔曲线坐标系的顺时针方向是相反的!

    UIBezierPath是对Core Graphics框架的一种上层封装,目的是让绘图需求可以被更方便的使用. 那你有没有发现被UIBezierPath封装后与之前有什么改变? 答:有三个变化. 1. ...

  9. JAVA练手--集合

    集合框架体系如图所示 Collections:是一个工具类java.util.Collections(可以使用它对集合对象进行操作) Collection:除了map(键值对)其他集合的父类 1. S ...

  10. SQL Serever学习9——基础查询语句

    SQL语言概述 SQL是结构化查询语言(Structure Query Language),1974年提出,1979年被IBM实现,SQL语言已经成为关系型数据库的标准语言. 包括: DDL数据定义语 ...