SpringMVC快速入门(5)高级参数的绑定,@RequestMapping注解的用法,Controller方法返回值,SpringMVC当中的异常处理
发布日期:2021-06-29 15:03:54
浏览次数:3
分类:技术文章
本文共 10408 字,大约阅读时间需要 34 分钟。
一、高级参数的绑定
1、创建工程,复制之前的工程作为新的工程使用
设置通过根目录访问2、修改itemList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>查询商品列表
3、修改ItemController.java当中的queryItem方法的参数
@RequestMapping("queryItem")//绑定请求地址 public String queryItem(QueryVo vo,Integer[] ids, Model model){ if(vo.getItem() != null){ System.out.println(vo.getItem().toString()); } //模拟搜索商品 List- itemList = itemService.getItemList(); model.addAttribute("itemList", itemList); return "itemList"; }
4、运行并测试
选择1和3提交 点击查询后台显示内容5、修改QueryVo类,添加数组列表
package com.itzheng.springmvc.pojo;/** * 包装的pojo传递 * @author Steven */public class QueryVo { private Item item; private Integer[] ids; public Integer[] getIds() { return ids; } public void setIds(Integer[] ids) { this.ids = ids; } public Item getItem() { return item; } public void setItem(Item item) { this.item = item; }}
6、运行并测试项目
在QueryVo当中的
选择1和3提交
点击查询后台显示内容两种QueryVo当中的Integer[] ids和方法参数Integer[] ids当中的内容都有值,无论是类当中变量和方法的参数只要和参数的名称所对应上,就可以绑定数据
二、完成编辑页面直接提交并显示数据
1、List参数绑定
(1)修改itemList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>查询商品列表
(2)修改QueryVo类
package com.itzheng.springmvc.pojo;import java.util.List;/** * 包装的pojo传递 * @author Steven */public class QueryVo { private Item item; private Integer[] ids; private List- items; public List
- getItems() { return items; } public void setItems(List
- items) { this.items = items; } public Integer[] getIds() { return ids; } public void setIds(Integer[] ids) { this.ids = ids; } public Item getItem() { return item; } public void setItem(Item item) { this.item = item; } }
(3)访问页面
(4)测试项目
a、修改ItemController.java
@RequestMapping("queryItem")//绑定请求地址 public String queryItem(QueryVo vo,Integer[] ids, Model model){ if(vo.getItem() != null){ System.out.println(vo.getItem().toString()); } if(ids != null && ids.length > 0) { for (Integer id : ids) { System.out.println(id); } } if(vo.getItem() != null && vo.getItems().size() > 0) { for (Item item : vo.getItems()) { System.out.println(item); } } //模拟搜索商品 List- itemList = itemService.getItemList(); model.addAttribute("itemList", itemList); return "itemList"; }
b、访问页面测试并提交参数
访问页面
修改内容并提交表单 页面报错 修改jsp页面内容 重新提交页面三、@RequestMapping注解的用法
1、配置多个请求地址
(1)修改ItemController当中的itemList方法
@RequestMapping(value = { "itemList","itemList2"}) public ModelAndView itemList() { ModelAndView mav = new ModelAndView(); List- itemList = itemService.getItemList(); mav.addObject("itemList", itemList); // mav.setViewName("/WEB-INF/jsp/itemList.jsp"); mav.setViewName("itemList"); return mav; }
(2)运行并测试
使用绑定的第二个访问2、@RequestMapping加在类的上面:分目录管理
@Controller@RequestMapping("item")public class ItemController { @Autowired private ItemService itemService; @RequestMapping(value = { "itemList","itemList2"}) public ModelAndView itemList() { ModelAndView mav = new ModelAndView(); List- itemList = itemService.getItemList(); mav.addObject("itemList", itemList); // mav.setViewName("/WEB-INF/jsp/itemList.jsp"); mav.setViewName("itemList"); return mav; }
运行并访问项目
新的访问地址: 演示完注释一下3、设置固定的提交请求方式
(1)设置为只接收post请求
修改ItemController.java当中的updateItem方法
@RequestMapping(value="updateItem",method = RequestMethod.POST) public String updateItem(Item item,Model model){ itemService.updateItem(item); model.addAttribute("item", item); model.addAttribute("msg", "修改商品信息成功"); return "itemEdit"; }
(2)设置为接收post和get请求
修改ItemController.java当中的updateItem方法
/** * 修改商品 * 演示pojo参数绑定 * @param item * @return */ @RequestMapping(value="updateItem",method = { RequestMethod.POST,RequestMethod.GET}) public String updateItem(Item item,Model model){ itemService.updateItem(item); model.addAttribute("item", item); model.addAttribute("msg", "修改商品信息成功"); return "itemEdit"; }
(3)在Tomcat的server.xml文件当中配置get请求的编码格式
四、Controller方法返回值
1、返回void
(1)创建新页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>温馨提示 ${ msg }
(2)在ItemController当中创建queryVoid方法
a、request响应用户请求
@RequestMapping("queryVoid")public void queryVoid(HttpServletRequest request,HttpServletResponse response) throws Exception { request.setAttribute("msg", "这个是request响应的消息"); request.getRequestDispatcher("/WEB-INF/jsp/msg.jsp").forward(request, response);}
运行并测试
b、response响应用户请求
@RequestMapping("queryVoid") public void queryVoid(HttpServletRequest request,HttpServletResponse response) throws Exception { //request响应用户请求 /* * request.setAttribute("msg", "这个是request响应的消息"); * request.getRequestDispatcher("/WEB-INF/jsp/msg.jsp").forward(request, * response); */ //response的响应用户请求 response.sendRedirect("/itemList.action"); }
运行并测试
c、response打印消息
@RequestMapping("queryVoid")public void queryVoid(HttpServletRequest request,HttpServletResponse response) throws Exception { //request响应用户请求 /* * request.setAttribute("msg", "这个是request响应的消息"); * request.getRequestDispatcher("/WEB-INF/jsp/msg.jsp").forward(request,response); */ //response的响应用户请求 //response.sendRedirect("/itemList.action"); PrintWriter printwriter = response.getWriter(); printwriter.println("response");}
2、返回String
(一)SpringMVC请求转发
(1)修改ItemController类当中updateItem方法:
/** * 修改商品 * 演示pojo参数绑定 * @param item * @return */ @RequestMapping(value="updateItem",method = { RequestMethod.POST,RequestMethod.GET}) public String updateItem(Item item,Model model){ itemService.updateItem(item); model.addAttribute("item", item); model.addAttribute("msg", "修改商品信息成功"); //return "itemEdit"; return "forward:itemEdit.action"; }
(2)修改itemList.jsp页面
点击提交修改信息(二) SpringMVC重定向
(1)修改ItemController,设置对应更新方法的跳转到列表页面,当中的updateItem方法
/** * 修改商品 * 演示pojo参数绑定 * @param item * @return */ @RequestMapping(value="updateItem",method = { RequestMethod.POST,RequestMethod.GET}) public String updateItem(Item item,Model model){ itemService.updateItem(item); model.addAttribute("item", item); model.addAttribute("msg", "修改商品信息成功"); //return "itemEdit"; //return "forward:itemEdit.action"; return "redirect:itemList.action"; }
(2)运行测试并访问:
跳转成功(三)方法返回值乱码问题
请求乱码问题{ 提交的问题{ post乱码:过滤器解决; get乱码:tomcat当中配置URIEncoding="utf-8" } 响应乱码{ 获取getWriter之前:response.setCharacterEncoding("utf-8"); }}
五、SpringMVC当中的异常处理
1、异常演示:运行时异常
(1)在ItemController当中queryVoid方法当中设置一个异常
int i = 1 / 0;
(2)运行项目测试该方法
抛出异常2、处理异常
思想:做一个全局异常处理器,处理所有没有处理过的运行时异常用于更友好的提示用户
(1)创建全局异常处理器
创建一个CustomerExecptionResolver类实现HandlerExceptionResolver接口
package com.itzheng.springmvc;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.ModelAndView;/* * 全局异常处理器 */public class CustomerExecptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object hanlder, Exception ex) { ModelAndView mav = new ModelAndView(); mav.addObject("msg","系统发生异常,请联系管理员!"); mav.setViewName("msg"); return mav; }}
(2)配置全局异常处理器
运行项目测试该方法
3、更智能,更友好的提示,解决方案
(1)新建自定义异常类:MyException
package com.itzheng.springmvc.exception;/* * 自定义异常 */public class MyException extends Exception { private String msg; public MyException() { super(); } public MyException(String msg) { super(); this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }}
创建exception包并将创建的异常,并将上诉创建好的两个异常放入到exception包当中
修改配置全局异常处理器(2)修改异常处理器,加上异常:
a、CustomerExecptionResolver
package com.itzheng.springmvc.exception;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.ModelAndView;/* * 全局异常处理器 */public class CustomerExecptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object hanlder, Exception ex) { String result = "系统发生异常,请联系管理员!"; //instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。 //自定义异常处理 if(ex instanceof MyException) { //判断当前发生的异常是否是MyException类对象的实例 result = ((MyException)ex).getMsg(); } ModelAndView mav = new ModelAndView(); mav.addObject("msg",result); mav.setViewName("msg"); return mav; }}
b、修改ItemController当中的queryVoid方法
@RequestMapping("queryVoid") public void queryVoid(HttpServletRequest request,HttpServletResponse response) throws Exception { //request响应用户请求 /* * request.setAttribute("msg", "这个是request响应的消息"); * request.getRequestDispatcher("/WEB-INF/jsp/msg.jsp").forward(request, * response); */ //response的响应用户请求 //查询根据id查询商品信息,搜索不到商品 if(true) { throw new MyException("你查找的商品不存在请确认信息"); } int i = 1 / 0; //response.sendRedirect("/itemList.action"); response.setCharacterEncoding("utf-8"); PrintWriter printwriter = response.getWriter(); printwriter.println("这是response的请求"); }
(3)测试访问queryVoid.action
转载地址:https://code100.blog.csdn.net/article/details/115377881 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月28日 09时24分45秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【Scala 教程】Scala 条件与循环语句
2019-04-29
【Scala 教程】Scala 集合类型
2019-04-29
JAVA 线程同步机制 synchronized
2019-04-29
MySQL 安装教程(无脑版)
2019-04-29
IDEA 怎么删除一个Module
2019-04-29
走进数据科学:最好是通过比网课更好的方法
2019-04-29
AI革命第一步:最容易被忽略但必不可少的物联网
2019-04-29
2020年开发运维工具清单:选择开发运维工具堆栈吧
2019-04-29
效率提升法则:高效人士不会去做的4件事
2019-04-29
8.PostgreSQL约束
2019-04-29
【技术分享】使用AES加密技术保障数据安全
2019-04-29
【应用实例】布线多?成本高?不可靠?泽耀方案没烦恼!
2019-04-29
数据可视化工具:Matplotlib绘图
2019-04-29
用Python写个超级小恐龙跑酷游戏,上班摸鱼我能玩一天
2019-04-29
闺蜜看我用Python画了一幅樱花图,吵着要我给他介绍程序员小哥哥
2019-04-29
【Python爬虫实战】知乎热榜数据采集,上班工作摸鱼两不误,知乎热门信息一网打尽
2019-04-29
Python抓取哔哩哔哩up主信息:只要爬虫学的好,牢饭吃的早
2019-04-29
有个码龄5年的程序员跟我说:“他连wifi从来不用密码”
2019-04-29