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.multipart.commons.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>