SpringMVC的特性及应用
本文内容纲要:
SpringMVC****特点
- 清晰地角色划分
- 灵活的配置功能
- 提供了大量的控制器接口和实现类
- 真正的View层实现无关(JSP、Velocity、Xslt等)
- 国际化支持
- 面向接口编程
- Spring提供了Web应用开发的一整套流程,不仅仅是MVC,他们之间可以很方便的结合一起
视图解析器
- 将逻辑视图的名字与JSP等视图技术进行匹配
- InternalResourceViewResolver
- 在Web应用程序的WAR文件中查找视图模板,视图模板的路径根据加完前缀和后缀的逻辑视图名称来确定
- prefix
- suffix
REST****风格
- RepresentationalStateTransfer表述性状态转移
- 传统的查、改、删的URL与REST风格的增删改URL对比
- /userview.action?id=12VS/user/12
- /userdelete.action?id=12VS/user/12/delete
- /userupdate.action?id=12VS/user/12/update
- 请求方式
- GET
- POST
- DELETE
- PUT
- 他强调的是一个资源可以对应多种视图
配置步骤:
1.导入spring-web类库,
2.配置web.xml:
乱码处理:
3.配置
方式一:BeanNameUrlHandlerMapping方式:
方式二:DefaultAnnotationHandlerMapping注解方式:
<context:component-scanbase-package="com.zhp.*"/>
mvc:annotation-driven/
视图解析器如上相同
4.跳转:
方式一:ModelAndViewmav=newModelAndView("hello");//hello会结合试图解析器的前缀和后缀来确定url
方式二:注解时,直接return"hello";即可
5.接收参数:
login(Stringuname)可以直接通过uname=zhang来传参
reg(@ModelAttributeUsertbluser)通过注解也可自动封装对象
Rest风格:
@RequestMapping("/update/{username}")
publicStringupdate(@PathVariableStringusername)//注意注解@PathVariable
6.转发数据:
方式一:通过方法中参数Model:
publicStringlogin(Modelmodel){
model.addAttribute("uname","zhang");//页面通过${requestScope.uname}取出
}
方式二:session对象的获取:自动注入session对象
publicStringlogin(@ModelAttributeUsertbluser,Modelmodel,HttpSessionsession){}
注意:页面传递参数:
1.Model----model.addAttribute("upass",upass);
2.Map<String,Object>---------map.put("user",user);
3.HttpSession----session.setAttribute("name",uname);
注意:如果指定了提交方式method=RequestMethod.GET/method=RequestMethod.POST时,springMVC会根据页面的提交方式判断提交的;
7.数据校验
JSR-303是JavaEE6中的一项子规范,叫做BeanValidation,官方参考实现是HibernateValidator。
此实现与HibernateORM没有任何关系。JSR303用于对JavaBean中的字段的值进行验证。
springMVC3.x之中也大力支持JSR-303,可以在控制器中对表单提交的数据方便地验证。
8.异常处理
a.局部处理:
//运行时异常处理
@ExceptionHandler(value=RuntimeException.class)
publicStringdoException(RuntimeExceptione){
System.out.println("---RuntimeException---异常了-----"+e.getMessage());
return"error";
}
//非运行时异常处理
@ExceptionHandler(value=Exception.class)
publicStringdoException(Exceptione){
System.out.println("---Exception---异常了-----"+e.getMessage());
return"error";
}
b.全局处理:
9.静态资源处理:
将静态文件指定到某个特殊的文件夹中统一处理
<mvc:resourcesmapping="/resources/**"location="/resources/"/>
注意:mapping="/resources/**":表示映射路径,在页面应用resources映射名
location="/resources/":表示文件存放的真实路径
10.文件上传
a.导入文件上传夹包:commons-fileupload-1.2.2.jar、commons-io-2.4.jar
b.配置文件:
c.编写页面:
d.编写控制器类:
@Controller
publicclassProductAction{
@RequestMapping("/upload")
publicStringupload(Productproduct,@RequestParamMultipartFilepic,HttpSessionsession){
System.out.println(pic.getOriginalFilename()+"------upload-----"+product);
//获取工程路径
StringsavePath=session.getServletContext().getRealPath("resources/upload");
//获取上传文件名称
StringfileName=pic.getOriginalFilename();
FilesaveFile=newFile(savePath,fileName);
//封装到对象
product.setImgSrc(fileName);
try{//实现上传,以拷贝输入流的方式实现
FileUtils.copyInputStreamToFile(pic.getInputStream(),saveFile);
}catch(IOExceptione){e.printStackTrace();}
return"index";
}
//多文件上传
@RequestMapping("/uploads")
publicStringuploads(Productproduct,@RequestParamMultipartFile[]pic,HttpSessionsession){
//获取工程路径
StringsavePath=session.getServletContext().getRealPath("resources/upload");
for(inti=0;i<pic.length;i++){
//获取上传文件名称
StringfileName=pic[i].getOriginalFilename();
FilesaveFile=newFile(savePath,fileName);
try{//springMVC提供文件拷贝
pic[i].transferTo(saveFile);
}catch(IOExceptione){e.printStackTrace();}
}
return"index";
}
}
11.SpringMVC中的JSON
@Controller
publicclassProductController{
@Resource(name="service")
privateProductServiceservice;
@RequestMapping(value="/query/{id}",method=RequestMethod.GET)
@ResponseBody
publicProductquery(@PathVariableintid){
Productprod=service.getProductById(id);
returnprod;
}
}
对应前台js:
本文内容总结:
原文链接:https://www.cnblogs.com/typ1805/p/7780815.html