码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC——

时间:2018-03-11 21:01:31      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:box   lan   action   运行   运行时异常   分享图片   cti   service   type   

一.高级参数绑定

1、将前端传来的参数绑定数组/集合中

1)数组直接接收

@RequestMapping(value = "/arrayTest.action")
public void arrayTest(Integer[] ids){
    System.out.println(Arrays.toString(ids));
}

2)POJO中的数组接收

@RequestMapping(value = "/arrayTest.action")
public void arrayTest(QueryVo vo){
    System.out.println(Arrays.toString(vo.getIds()));
}

3)集合直接接收(报错,无法直接接收)

@RequestMapping(value = "/arrayTest.action")
public void arrayTest(List<Integer> ids){
    System.out.println(ids);
}

4)POJO中的集合接收

@RequestMapping(value = "/arrayTest.action")
public void arrayTest(QueryVo vo){
    System.out.println(vo.getIds());
}

2、将前端传来的所有参数保存到集合中

JSP页面样式

技术分享图片

<form action="${pageContext.request.contextPath }/arrayTest.action" method="post">
	商品列表:
	<table width="100%" border=1>
		<tr>
			<td>选择</td>
			<td>商品名称</td>
			<td>商品价格</td>
			<td>生产日期</td>
			<td>商品描述</td>
			<td>操作</td>
		</tr>
		<c:forEach items="${itemList }" var="item" varStatus="s">
			<tr>
				<td><input type="checkbox" name="ids" value="${item.id }"></td>
				<td><input type="text" name="itemsList[${s.index}].name" value="${item.name }"></td>
				<td><input type="text" name="itemsList[${s.index }].price" value="${item.price }"></td>
				<td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
				<td>${item.detail }</td>

				<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>

			</tr>
		</c:forEach>

	</table>

	<input type="submit"/>
</form>

 QueryVO.java

public class QueryVo {

    List<Item> itemsList;

    public List<Item> getItemsList() {
        return itemsList;
    }

    public void setItemsList(List<Item> itemsList) {
        this.itemsList = itemsList;
    }
}

测试类

@RequestMapping(value = "/arrayTest.action")
public void arrayTest(QueryVo vo){
    System.out.println(vo.getItemsList());
}

二.@RequestMapper 

1、URL路由映射

@RequestMapping(value = "/xxx.action")

2、在类上加

// 简化请求路径  /itemList ==> /item/itemList
@RequestMapping("/item")
public class ItemsController {

3、方法限定

限定GET方法:@RequestMapping(method = RequestMethod.GET)

限定POST方法:@RequestMapping(method = RequestMethod.POST)

GETPOST都可以:@RequestMapping(method = {RequestMethod.GET,RequestMethod.POST})

4、多个URL映射到同一方法

@RequestMapping(value = "{/itemList.action,/item123.action}")

三.Controller方法返回值

1、返回ModelAndView

controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。(一般用于异常处理器中)

// 配置请求的url
@RequestMapping(value = "/itemList.action")
public ModelAndView queryItemList(){

    // 创建页面需要显示的商品数据
    List<Item> items = itemService.selectItemsList();

    ModelAndView modelAndView = new ModelAndView();

    // 放到request域中
    modelAndView.addObject("itemList",items);
    //modelAndView.setViewName("/WEB-INF/jsp/itemList.jsp");
    modelAndView.setViewName("itemList");

    return modelAndView;
}

2、返回String

优点:解耦,返回视图路径,model带数据,官方推荐此种方式。解耦,数据,视图,分离,MVC 。

// 配置请求的url
@RequestMapping(value = "/itemList.action")
public String queryItemList(Model model){

    // 创建页面需要显示的商品数据
    List<Item> items = itemService.selectItemsList();

    // 放到request域中
    model.addAttribute("itemList",items);

    //return "itemList";    // 直接返回一个视图文件(jsp)
    //return "redirect:/itemEdit.action?itemId=1";  // 重定向到其他URL
    return "forward: /itemEdit.action?itemId=1";  // 转发到其他URL
}

3、返回Void(常用于ajax)

/ 配置请求的url
@RequestMapping(value = "/itemList.action")
public void queryItemList(HttpServletRequest request, HttpServletResponse response, HttpSession session, Model model) throws ServletException, IOException {

    // 创建页面需要显示的商品数据
    List<Item> items = itemService.selectItemsList();

    request.setAttribute("itemList",items);

    // 请求转发
    request.getRequestDispatcher("/WEB-INF/jsp/itemList.jsp").forward(request,response);
}

四.异常处理器

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

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

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

 

自定义异常处理器

1)自定义一个异常MyException.java

public class MyException extends Exception {

    private String msg;

    public MyException(String msg) {
        this.msg = msg;
    }

    public MyException() {
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

2)在程序中手动抛出这个异常

// 配置请求的url
@RequestMapping(value = "/itemList.action")
public void queryItemList(HttpServletRequest request, HttpServletResponse response, HttpSession session, Model model) throws Exception {

    if (1==1) {
        throw new MyException("啦啦啦");
    }

    // 创建页面需要显示的商品数据
    List<Item> items = itemService.selectItemsList();

    request.setAttribute("itemList",items);

    // 请求转发
    request.getRequestDispatcher("/WEB-INF/jsp/itemList.jsp").forward(request,response);
}

3)在applicationContext.xml中配置全局异常处理器

<!-- *****************配置全局异常处理器***************** -->

<bean class="cn.x5456.exception.CustomExceptionResolver"/>

4)书写异常处理器

import org.springframework.web.servlet.HandlerExceptionResolver;    // 别导错包

public class CustomExceptionResolver implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest,
                                         HttpServletResponse httpServletResponse,
                                         Object o,  // 发生异常的地方 Serivce层  方法  包名+类名+方法名(形参) 字符串
                                         Exception e) {

        ModelAndView mav = new ModelAndView();

        String msg = "未知异常";

        if (e instanceof MyException){
            MyException myex = (MyException) e;
            msg = myex.getMsg();
        }

        mav.addObject("msg",msg);
        mav.setViewName("error");

        return mav;
    }
}

SpringMVC——

标签:box   lan   action   运行   运行时异常   分享图片   cti   service   type   

原文地址:https://www.cnblogs.com/x54256/p/8545360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!