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"%>	
查询商品列表
查询条件:
商品名称: 商品价格:
商品列表:
选择 商品名称 商品价格 生产日期 商品描述 操作
${item.name } ${item.price }
${item.detail } 修改

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"%>	
查询商品列表
查询条件:
商品名称: 商品价格:
商品列表:
<%--
--%>
选择 商品名称 商品价格 生产日期 商品描述 操作
${item.name } ${item.price }
${item.detail } 修改 修改

(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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SpringMVC快速入门(6)图片上传,配置虚拟目录,文件上传
下一篇:Java 之 SpringMVC代码执行流程图

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月28日 09时24分45秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章