springmvc学习

执行流程

ModelAndView

@Controller
public class HelloController {

	@RequestMapping("hello")
	public ModelAndView hello(){
		System.out.println("hello springmvc....");
		//创建ModelAndView对象
		ModelAndView mav = new ModelAndView();
		//设置模型数据
		mav.addObject("msg", "hello springmvc...");
		//设置视图名字
		mav.setViewName("/WEB-INF/jsp/hello.jsp");
		return mav;
	}
}

Model

@RequestMapping("itemEdit")
	public String itemEdit(@RequestParam("id")Integer ids,Model m,ModelMap model){
		
		//查询商品信息
		Item item = itemServices.getItemById(ids);
		//通过Model把商品数据返回页面
		model.addAttribute("item", item);
		//返回String视图名字
		return "itemEdit";
	}

  

id参数绑定

@RequestMapping("itemEdit")
	public ModelAndView itemEdit(@RequestParam(value="id",required=true,defaultValue="1")Integer ids){
		ModelAndView mav = new ModelAndView();
		
		//查询商品信息
		Item item = itemServices.getItemById(ids);
		//设置商品数据返回页面
		mav.addObject("item", item);
		//设置视图名称
		mav.setViewName("itemEdit");
		return mav;
	}

  

参数绑定pojo对象

@RequestMapping("updateItem")
	public String updateItem(Item item,Model model){
		//更新商品
		itemServices.update(item);
		//返回商品模型
		model.addAttribute("item", item);
		//返回担任提示
		model.addAttribute("msg", "修改商品成功");
		//返回修改商品页面
		return "itemEdit";
	}

参数绑定包装的pojo

要点:通过点(.)传递属性.
public class QueryVo{
    
  private Item item;
    

 //..省略get和set方法
}
@RequestMapping("queryItem")
	public String queryItem(QueryVo vo){
		//打印传入参数
		System.out.println(vo);
		//返回视图
		return "itemList";
}
//jsp中修改

<input name='item.name' />
<input name='item.age' />

参数自定义参数绑定

<td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>

/**
 * 日期转换器
 * S:source 要转换的源类型
 * T:目标,要转换成的数据类型
 * @author Steven
 *
 */
public class DateConvert implements Converter<String, Date> {

	@Override
	public Date convert(String source) {
		Date result = null;
		try {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			result = sdf.parse(source);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return result;
	}

}

7.6.3配置日期转换器
<!-- 配置注解驱动,相当于同时使用最新处理器映射跟处理器适配器,对json数据响应提供支持 -->
	<!-- 使用自定义转换器 -->
	<mvc:annotation-driven conversion-service="MyConvert" />
	
	<!-- 定义转换器 -->
	<bean id="MyConvert" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
		<property name="converters">
			<set>
				<bean class="com.itheima.springmvc.utils.DateConvert" />
			</set>
		</property>
	</bean> 

参数绑定数组类型

//基于批量删除商品操作完成参数传递。
public class QueryVo {
	private Item item;
	
	private Integer[] ids;
//..省略get和set方法
}
<c:forEach items="${itemList }" var="item" varStatus="status">
<tr>
	<td><input type="checkbox" name="ids" value="${item.id}"></td>
	
	<td><input type="text" name="itemList[${ status.index }].name" value="${item.name }">
		<input type="hidden" name="itemList[${ status.index }].id" value="${item.id}">
	</td>
	<td><input type="text" name="itemList[${ status.index }].price" value="${item.price }"></td>
	<td><input type="text" name="itemList[${ status.index }].createtime" value='<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>'></td>
	<td><input type="text" name="itemList[${ status.index }].detail" value="${item.detail }"></td>
	<td><a href="${pageContext.request.contextPath }/itemEdit/${item.id}.action">修改</a></td>
</tr>
</c:forEach>
//
@RequestMapping("queryItem")
	public String queryItem(QueryVo vo, Integer[] ids) {
		System.out.println(vo);
		//输出传入的数组
		if (ids != null && ids.length > 0) {
			for (Integer id : ids) {
				System.out.println("传入的商品列表分别为:" + id);
			}
		}

		return "itemList";
	}

  

id参数绑定List类型的绑定

public class QueryVo {
	private Item item;
	
	private Integer[] ids;
	
	private List<Item> itemList;
//..省略get set
}
@RequestMapping("queryItem")
	public String queryItem(QueryVo vo, Integer[] ids) {
		if (vo.getItem() != null) {
			System.out.println(vo.getItem());
		}
		// 省略查询商品操作

		if (ids != null && ids.length > 0) {
			for (Integer integer : ids) {
				System.out.println(integer);
			}
			System.out.println("vo.length:" + (vo.getIds() == null ? 0 : vo.getIds().length));
		}

		return "itemList";
	}

  

@RequestMapping注解的使用

 

Request和Response,Redirect,forward

异常处理---创建全局异常处理器

/**
 * 全局异常处理器
 * @author Steven
 *
 */
public class CustomerException implements HandlerExceptionResolver {

	@Override
	public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object hanlder,
			Exception e) {
		//记录日志
		e.printStackTrace();
		//错误消息 
		String msg = "很抱歉,系统发生异常了,请联系管理员";
		
		//响应用户错误提示
		ModelAndView mav = new ModelAndView();
		//返回错误消息
		mav.addObject("msg", msg);
		//响应错误提示页面
		mav.setViewName("msg");
		return mav;
	}
}

自定义异常

/**
 * 自定义异常
 * @author Steven
 *
 */
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;
	}
}

**
 * 全局异常处理器
 * @author Steven
 *
 */
public class CustomerExceptionResolver implements HandlerExceptionResolver {

	@Override
	public ModelAndView resolveException(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,
			Exception e) {
		ModelAndView mav = new ModelAndView();
		String msg = "抱歉,系统发生异常了,请联系管理员";
		
		//判异常是否自定义
		if(e instanceof MyException){
			msg = ((MyException) e).getMsg();
		}
		
		mav.addObject("msg", msg);
		mav.setViewName("msg");
		
		return mav;
	}

}

  

 图片上传

<!-- 配置多媒体处理器 -->
	<!-- 注意:这里id必须填写:multipartResolver -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 最大上传文件大小 -->
		<property name="maxUploadSize" value="8388608" />
	</bean>


<form id="itemForm"	action="${pageContext.request.contextPath }/updateItem.action" method="post" enctype="multipart/form-data">
		<input type="hidden" name="id" value="${item.id }" /> 
</form>

//图片上传用MultipartFile接收文件
	@RequestMapping(value = "updateItem", method = { RequestMethod.POST, RequestMethod.GET })
	public String updateItem(Item item, Model model, MultipartFile picFile) throws Exception {

		// 图片新名字
		String name = UUID.randomUUID().toString();
		// 图片原名字
		String oldName = picFile.getOriginalFilename();
		// 后缀名
		String exeName = oldName.substring(oldName.lastIndexOf("."));

		File pic = new File("D:\WebWork\" + name + exeName);
		// 保存图片到本地磁盘
		picFile.transferTo(pic); 
		// 更新商品图片信息
		item.setPic(name + exeName);

		itemServices.update(item);
		model.addAttribute("item", item);
		model.addAttribute("msg", "修改商品成功");
		return "itemEdit";
	}

原文地址:https://www.cnblogs.com/liushisaonian/p/9557648.html