异常处理器:
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";
}