zoukankan      html  css  js  c++  java
  • SpringMVC快速入门记录(二)

    一、数组参数绑定和List参数绑定

    1.数组参数绑定

    提交多个相同name的参数,保持name的名字和Controller方法参数的数组名称相同即可。

    2.List参数绑定

    List中存放对象,并将定义的List放在包装类QueryVo中

    通常在需要批量提交数据时,将提交的数据绑定到list<pojo>中,比如:成绩录入(录入多门课成绩,批量提交)

    使用List接收页面提交的批量数据,通过包装pojo接收,在包装pojo中定义list<pojo>属性

    public class ItemsQueryVo {
    
        //商品信息
        private Items items;
    
        //为了系统 可扩展性,对原始生成的po进行扩展
        private ItemsCustom itemsCustom;
    
        //批量商品信息
        private List<ItemsCustom> itemsList;
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    // 批量修改商品提交
    // 通过ItemsQueryVo接收批量提交的商品信息,将商品信息存储到itemsQueryVo中itemsList属性中。
    @RequestMapping("/editItemsAllSubmit")
    public String editItemsAllSubmit(ItemsQueryVo itemsQueryVo) throws Exception {
    
        return "success";
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 页面定义:
    <c:forEach items="${itemsList }" var="item" varStatus="status">
        <tr>
    
            <td><input name="itemsList[${status.index }].name" value="${item.name }"/></td>
            <td><input name="itemsList[${status.index }].price" value="${item.price }"/></td>
            <td><input name="itemsList[${status.index }].createtime" value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
            <td><input name="itemsList[${status.index }].detail" value="${item.detail }"/></td>
    
        </tr>
    </c:forEach>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    name的格式:

    对应包装pojo中的list类型属性名[下标(从0开始)].包装pojo中List类型的属性中pojo的属性名

    例子:

    "name="itemsList[${status.index }].price"

    可以和包装类型的参数绑定归纳对比一下,其实就是在包装类的pojo基础上多了个下标。只不过包装类参数绑定时,要和包装pojo中的pojo类性的属性名一致,而list参数绑定时,要和包装pojo中的list类型的属性名一致。

    二、@RequestMapping

    1.URL路径映射

    用@RequestMapping(value="/item")或@RequestMapping(value="item")添加到方法上面

    表示用当前路径  + 这里的value值("item")可以 访问这个方法,

    其中value可以是数组 意思可以多条URL都可以访问到这个方法

    2.添加在类上面

    在class上添加@RequestMapping(url)指定通用请求前缀,限制此类下的所有方法请求url必须以请求前缀开头

    比如下图访问路径应为:

    http://localhost:8080/springmvc-web2/item/itemList

    或者

    http://localhost:8080/springmvc-web2/item/itemListAll

    3.请求方法限定

    除了可以对url进行设置,还可以限定请求进来的类型

    ***限定GET方法

    @RequestMapping(value = "itemList",method =RequestMethod.GET)

    如果通过POST访问则报错:

    HTTP Status 405 -Request method 'POST' not supported

    应该是:

    @RequestMapping(value = "itemList",method = RequestMethod.POST)

    *** 限定POST方法

    @RequestMapping(method =RequestMethod.POST)

    如果通过GET访问则报错:

    HTTP Status 405 -Request method 'GET' not supported

    **GET和POST都可以

    @RequestMapping(method = {RequestMethod.GET,RequestMethod.POST})

    三、Controller方法的返回值

    1.返回ModelAndView类

    controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view(jsp)。

    2.返回void

    在Controller方法形参上可以定义request和response,使用request或response指定响应结果

    **使用request转发页面,如下:

    request.getRequestDispatcher("页面路径").forward(request, response);

    request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);



    ***可以通过response页面重定向:

    response.sendRedirect("url")

    response.sendRedirect("/springmvc-web2/itemEdit.action");



    ***可以通过response指定响应结果,例如响应json数据如下:

    response.getWriter().print("{"abc":123}");

    3.返回字符串

    controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。

    //指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/itemList.jsp
    return "itemList";

    在jsp名字前加redirect:/ 或者 forward: /可以实现重定向或转发

    如return "forward: /itemEdit";和return "redirect:/itemEdit";


    四、异常处理器(略)

    springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。


    异常处理思路:

    系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

    系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:


    五、上传图片(略)

    六、json数据交互

    1.@ResponseBody作用:

    @ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端,如下

    /**
     * 测试json的交互
     * @param item
     * @return
     */
    @RequestMapping("testJson")
    public @ResponseBody Item testJson(@RequestBody Item item) {
    	return item;
    }
    
    2.@RequestBody作用:

    @RequestBody注解用于读取http请求的内容(json字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上

    如下:

     //请求json串(商品信息),输出json(商品信息)
    //@RequestBody将请求的商品信息的json串转成itemsCustom对象
    //@ResponseBody将itemsCustom转成json输出
    @RequestMapping("/requestJson")
    public @ResponseBody ItemsCustom requestJson(@RequestBody ItemsCustom itemsCustom){
    
        //@ResponseBody将itemsCustom转成json输出
        return itemsCustom;
    }



    七、RESTful支持(略)

    Restful就是一个资源定位及资源操作的风格URL。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。


    八、拦截器(略)

    Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。


  • 相关阅读:
    2277 爱吃皮蛋的小明
    zoj2314 经典 无源汇有上下界最大流 并输出可行流
    [置顶] css3 befor after 简单使用 制作时尚焦点图相框
    [置顶] 程序员的奋斗史(二十八)——寒门再难出贵子?
    TaintDroid:智能手机监控实时隐私信息流跟踪系统(四)
    Activity切换效果(overridePendingTransition)
    Activity生命周期,状态保存恢复(经典)
    大二实习使用的技术汇总(上)
    Struts2配置RESULT中TYPE的参数说明
    关于程序动态库链接和运行时搜索路径设置的个人理解
  • 原文地址:https://www.cnblogs.com/chz-blogs/p/9381007.html
Copyright © 2011-2022 走看看