springmvc知识点

异常处理器:

CustomerExceptionResolver.java类:自定义异常类
public class CustomerExceptionResolver implements HandlerExceptionResolver{
	@Override
	public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj,
			Exception e) {
		//发生异常的地方service层,方法 包名+类名+方法
		//日志  文件1.发布之后看不到异常2.发布的tomcat在服务器上linux
		ModelAndView mav=new ModelAndView();
		mav.addObject("error","未知异常");
		mav.setViewName("error");
 		return mav;
	}	
}
在springmvc.xml配置一场处理器
<!-- springmvc的异常处理器 -->
        <bean class="com.itheima.springmvc.exception.CustomerExceptionResolver">
在ItemController.java中设置一个异常:
@RequestMapping(value="/item/itemlist.action")
		public String exception(Model model){
			Integer i=1/0;//会抛出异常
			List<Items> list=itemService.selectItemsList();
			model.addAttribute("itemList",list);
			return "itemList";
		}
图片文件上传:

tomcat双击在modules里面添加add external web module在本地d盘创建upload目录,path写/pic这样通过

http://localhost:8080/pic/x.jpg就可以看到图片了。

<!-- 上传图片是需要指定属性 enctype="multipart/form-data" -->

springmvc.xml中配置图片文件上传,配置是固定的
<!-- 上传图片配置实现类 -->
		  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">	

	  
			<!-- 上传图片大小单位为B -->
			<property name="maxUpdoadSize" value="5000000"/>
		  </bean>
ItemController.java:
//提交修改页面  入参为Items对象  提交表单按钮跳转update.
		@RequestMapping(value="/updateitem.action")
		public String updateitem(QueryVo vo,MultipartFile pictureFile) throws IllegalStateException, IOException{
			//保存图片到d:upload
			String name=UUID.randomUUID().toString().replaceAll("-","");
			String ext=FilenameUtils.getExtension(pictureFile.getOriginalFilename());
			pictureFile.transferTo(new File("D:\\upload\\" + name+"."+ext));
			vo.getItems().setPic(name+"."+ext);			
			//修改
			itemService.updateItemsById(vo.getItems());
			//ModelAndView mav=new ModelAndView();
			//mav.setViewName("success");
			return "redirect:/itemEdit.action?id="+vo.getItems().getId();
		}
json数据交互

jsp页面写ajax请求:

<script type="text/javascript">
$(function(){
	var params='{"id":1,"name":"测试商品","price":99.9,"detail":"测试","pic":"timg.jpg"}';
	$.ajax({
		url:"${pageContext.request.contextPath}/json.action",
		data:params,
		contentType:"application/json;charset=UTF-8",//发送数据格式
		type:"post",
		dataType:"json",//回掉
		success:function(data){
			alert(data.name);
		}
	});
});
</script>
@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上。
@ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端
@PathVariable是获取url上数据的。@RequestParam获取请求参数的(包括post表单提交)
ItemController.java:
//json数据交互
		@RequestMapping(value="/json.action")
		public @ResponseBody Items json(@RequestBody Items items){
			return items;
		}
拦截器执行规则:
preHandler按拦截器定义顺序调用
postHandler按拦截器定义逆序调用
afterCompletion按拦截器定义逆序调用
postHandler在拦截器链内所有拦截器返成功调用
afterCompletion只要preHandler返回true才调用

在springmvc.xml中配置拦截器:

<!-- springmvc拦截器 -->
		  <mvc:interceptors>
		  	<mvc:interceptor>
		  		<mvc:mapping path="/**"/>
		  		<!-- 自定义的拦截器类 -->
		  		<bean class="com.itheima.springmvc.interceptor.Interceptor"/>
		  	</mvc:interceptor>
		  </mvc:interceptors>
自定义拦截器类Interceptor.java:
public class Interceptor implements HandlerInterceptor{}
拦截器应用:登录功能
login.jsp:
<body> 
<form action="${pageContext.request.contextPath }/login.action" method="post">
	用户名:<input type="text" name="username" value="abc">
	<input type="submit" value="提交"/>
</form>
</body>
自定义的拦截器类:Interceptor.java:
public class Interceptor implements HandlerInterceptor{
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
		System.out.println("方法前");
		//判断用户是否登录,如果没有登录重定向到登录页面,如果登录了就放行
		//URI /login.action
		//URL: http://www.baidu.com
		String requestURI=request.getRequestURI();
		if(!requestURI.contains("/login")){
			String username=(String) request.getSession().getAttribute("USER_SESSION");
			if(null==username){
				response.sendRedirect(request.getContextPath()+"/login.action");
				return false;
			}
		}
		return true;
	}
}
ItemController.java:
//去登陆的页面
		@RequestMapping(value="/login.action",method=RequestMethod.GET)
		public String login(){
			return "login";
		}
		@RequestMapping(value="/login.action",method=RequestMethod.POST)
		public String login(String username,HttpSession session){
			session.setAttribute("USER_SESSION", username);
			return "redirect:/item/itemlist.action";
		}





猜你喜欢

转载自blog.csdn.net/qq_36594703/article/details/80436039