SpringMVC学习【2】"/>
SpringMVC学习【2】
1. 响应:
(1):返回值为String:
①:使用方法:
/*** 在request中存值* @param model* @return*/@RequestMapping("/testString")public String testString(Model model){User user = new User();user.setUname("JOJO");user.setAge(12);model.addAttribute("user", user);return "success";}
②:请求:
<h2>从request域中取值</h2><a href="user/testString">往request里存值</a><hr/>
③:success界面:
<h2>执行成功</h2>${user.uname} ${user.age}<hr/>
(2):返回值为void:
①:使用:
/*** 默认情况*/@RequestMapping("/testVoid")public void testVoid(){System.out.println("void");}
②:请求:
<h2>void返回值</h2><a href="user/testVoid">void返回值</a><hr/>
③:响应内容:
**user/testVoid.jsp
(3):ModelAndView做返回值:
①:使用方式:
/*** ModelAndView做返回值* @return*/@RequestMapping("/testModelAndView")public ModelAndView testModelAndView(){ModelAndView mv = new ModelAndView();User user = new User();user.setUname("花太郎");user.setAge(12);mv.addObject(user);mv.setViewName("success");return mv;}
②:请求:
<h2>ModelAndView返回值</h2><a href="user/testModelAndView">ModelAndView返回值</a><hr/>
③:success界面:
<h2>执行成功</h2>${user.uname} ${user.age}<hr/>
(4):ajax请求和响应:
①:使用方式:
/*** ajax请求*/@RequestMapping("/testAjax")public @ResponseBody A testAjax(@RequestBody A a){System.out.println(a);a.setName("JOJO");return a;}
②:请求方式:
<h2>ajax请求</h2><button id="btn" >ajax</button>
<script src="js/jquery.min.js"></script><script>$(function(){$("#btn").click(function () {$.ajax({url:"user/testAjax",contentType:'application/json;charset=UTF-8',data:'{"name":"hehe", "age":12}',dataType:"json",type:"post",success:function(data){alert(data.name);}})});});</script>
③:运行结果:
2. 文件上传:
SpringMVC配置:
<!--文件解析器--><bean id="multipartResolver" class="org.springframework.web.multipartmons.CommonsMultipartResolver"><property name="maxUploadSize" value="10485760"></property></bean>
(1):传统方式:
①:请求:
<h2>传统文件上传</h2><form method="post" action="file/precedingUpload" enctype="multipart/form-data">文件:<input type="file" name="upload"><br/><input type="submit" value="提交"></form>
②:实现:
/*** 以前的文件上传fileupload+io* @param request* @return* @throws Exception*/@RequestMapping("/precedingUpload")public String precedingUpload(HttpServletRequest request) throws Exception {String path = request.getSession().getServletContext().getRealPath("/uploads/");File file = new File(path);if (!file.exists())file.mkdirs();DiskFileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);List<FileItem> items = upload.parseRequest(request);System.out.println(items);for (FileItem item:items){if (item.isFormField()){System.out.println(2);}else {System.out.println("1");String filename = item.getName();String uuid = UUID.randomUUID().toString().replace("-", "");filename = uuid+"_"+filename;System.out.println(filename);item.write(new File(path, filename));item.delete();}}return "success";}
(2):SpringMVC方式:
①:请求:
<h2>SpringMVC文件上传</h2><form method="post" action="file/springMVCUpload" enctype="multipart/form-data">文件:<input type="file" name="upload"><br/><input type="submit" value="提交"></form>
②:实现:
/*** SpringMVC上传* @param request* @param upload 必须和表单中file类型的input的name相同* @return* @throws Exception*/@RequestMapping("/springMVCUpload")public String SpringMVCUpload(HttpServletRequest request, MultipartFile upload) throws Exception {String path = request.getSession().getServletContext().getRealPath("/uploads/");File file = new File(path);if (!file.exists())file.mkdirs();System.out.println(path);String filename = upload.getOriginalFilename();String uuid = UUID.randomUUID().toString().replace("_", "");filename = uuid+"_"+filename;upload.transferTo(new File(path, filename));return "success";}
(3):跨服务器上传:
①:请求:
<h2>跨服务器文件上传</h2><form method="post" action="file/pastServerUpload" enctype="multipart/form-data">文件:<input type="file" name="upload"><br/><input type="submit" value="提交"></form>
②:实现:
/*** 跨服务器上传* @param upload* @return* @throws Exception*/@RequestMapping("/pastServerUpload")public String PastServerUpload(MultipartFile upload) throws Exception {String path = "https://localhost:8080/uploads/";String filename = upload.getOriginalFilename();String uuid = UUID.randomUUID().toString().replace("_", "");filename = uuid+"_"+filename;Client client = Client.create();WebResource resource = client.resource(path + filename);resource.put(upload.getBytes());return "success";}
3. 异常处理:
(1):控制器实现:
@Controller
@RequestMapping("/exception")
public class ExceptionController {@RequestMapping("/testException")public String testException() throws SysException {try {int a = 1/0;} catch (Exception e) {throw new SysException("测试出现异常...");}return "success";}
}
(2):异常类:
public class SysException extends Exception {private String massage;public String getMassage() {return massage;}public void setMassage(String massage) {this.massage = massage;}public SysException(String massage) {this.massage = massage;}
}
(3):异常处理器:
public class SysExceptionResolver implements HandlerExceptionResolver {public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {SysException se = null;if (e instanceof SysException){se = (SysException)e;}else {se = new SysException("系统维护...");}ModelAndView mv = new ModelAndView();mv.addObject("errorMsg", se.getMassage());mv.setViewName("error");return mv;}
}
(4):配置异常处理器:
<bean id="sysExceptionResolver" class="cn.xupt.exception.SysExceptionResolver"></bean>
4. 拦截器:只能拦截controller类中的方法,不能拦截js、css等资源。
(1):控制器实现:
@RequestMapping("testIntercepter")public String testIntercepter(){System.out.println("测试拦截器");return "success";}
(2):过滤器实现:
public class IntercepterDemo1 implements HandlerInterceptor {/*** 预处理方法* @param request* @param response* @param handler* @return true:放行 false:不放行* @throws Exception*/public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("拦截器预处理");return true;}/*** 执行完controller后执行* @param request* @param response* @param handler* @param modelAndView* @throws Exception*/public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("后处理");}/*** 最后执行* @param request* @param response* @param handler* @param ex* @throws Exception*/public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("最后执行");}
}
(3):配置拦截器:
<!--配置拦截器--><mvc:interceptors><mvc:interceptor><mvc:mapping path="/intercepter/*"/><bean class="cn.xupt.Intercepter.IntercepterDemo1"></bean></mvc:interceptor></mvc:interceptors>
更多推荐
SpringMVC学习【2】
发布评论