一、Maven:
1.管理依赖包(jar包)
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。 Maven 使用惯
例优于配置的原则 。
例如导入A.jar,如果A.jar依赖于B.jar,
在导入A.jar时,Maven会帮我们导入B.jar。
本地仓库 本地设备上存放所有jar包的地方。
中央仓库(远程仓库) 在远程服务器上存放jar包的地方。
中央仓库镜像
导入jar包的过程,先从本地仓库中查找,如果用直接使用,
如果没有,从中央仓库中导入。
私服 公司搭建的服务器,在该服务器上存放一些常用的jar包,
当从本地仓库查找不到,可以使用公司服务器上的jar包。
2.将项目模块化
在A项目中完成Dao层,在B项目中完成service层,
在C项目中完成表现(UI)层。
在实际开发中service要依赖于Dao,Controller依赖于service。
将Dao层所在的项目构建于本地仓库中,在service层中配置Dao的依赖
包,在service中就可以使用Dao项目中的功能。
Maven项目架构:
src
java———java源文件
resource———资源文件和配置文件
test
java
resource
Maven依赖配置文件
POM(Project Object Model)文件
1.依赖的有效性:test,compile,provide,system,runtime
2.依赖排除:A.jar—>B.jar
但是只想依赖单独A.jar
3.依赖的传递性:
A.jar—>B.jar—C.jar
只有当B.jar和C.jar的有效性为compile,A.jar—>C.jar
4.MavenA中整合MavenB
在MavenB install到本地仓库
在MavenA的pom文件中依赖MavenB
在MavenA中使用MavenB的功能
5.JDK版本设置<profiles></profiles>
6.统一版本设置
<properties>
<name>value</name>
</properties>
……
<version> ${name} </version>
7.依赖原则(解决依赖冲突)
①.最短路径:
MavenA—>Junit
MavenA—>MavenB—>Junit
②.如果在同一个pom文件中,配置了同一个依赖,按照下面的依赖引
入。
③.如果都是通过依赖其他模块传递过来的jar包,按照上面的依赖引入。
MavenA—>MavenB—>Junit 4.0
MavenA—>MavenB—>Junit 4.12
谁先声明,按照谁来。
8.Maven的继承
①.一般父工程packaging是pom;
②.在自工程的pom中配置
<parent>
父工程的gav
父工程的pom文件的相对路径
</parent>
③.并不是将父工程中所有的依赖都导入进来,需要哪些依赖,还需要
子工程指定,指定的时候,只需要给定groupId和artifactId。
9.Maven聚合
将多个的模块,整合到一起
二、springMVC的高级功能
ajax请求
1.在页面上尽量不要用submit触发ajax,会经常遇到触发不了ajax的问题,尽量使用button触发。
2.如果利用ajax提交form表单,则可以再ajax的data属性中提供form表单的序列化, 例如data:$("#fromId").serialize()
3.若使用submit提交信息,则可以使用$("#formId").submit(function(){ //ajax代码 });
4.springMVC处理ajax请求时,若不利用json返回数据,则返回的是一个页面
5.jackson自动包装son数据,在springMVC-beans.xml中配置, 在bean中引入MappingJackon2HttpMessageConverter类
数据校验
1.导入数据校验的包 validation-api,hibernate-validator,jboss-logging
2.在需要数据校验的POJO中进行设置
3.在controller中需要校验的参数前面加@Validated
4.在springMVC-beans.xml中配置localValidator的bean,并且将该bean设置为annotation-Driven标签的属性
5.在需要验证的参数后面,加一个BinderResult对象,从该对象中就可以获取验证信息。
6.在前端界面通过Spring的<form:errors>标签获取错误信息 <form:errors path=“数据校验的参数名(对象).成员变量名”> </form:errors>
全局异常处理
@ControllerAdvice+@ExceptionHandler 用@ControllerAdvice修饰的类,类中的方法用@ExceptionHandler修饰的方法都可以处理异常,处理的事全局异常。被@RequestMapping修饰的方法产生的异常。
国际化
1.在SpringMVC-beans.xml文件中配置国际化资源,在bean中引入ResourceBundleMessageSource类
2.添加多语言的配置文件: language_zh_US.properties和 language_zh_CN.porperties文件放在src下
3.在SpringMVC-beans.xml中加入i18n过滤器
4.在页面时使用多语言
文件的上传和下载
1.文件上传
单文件上传
1.在前端控制器配置文件中加入上传文件所需的bean,在bean中引入CommonsMultipartResolver类
2.在pom.xml中注入上传文件所需的依赖
3.新建一个上传文件的jsp界面,注: 1).form表单属性添加enctpye="multipart/from-data",表示不对所提交的内容编码; 2).action=""路径中添项目名; 3).input标签中的name="file"要和方法中所接收的参数名称一致。
4.自定义访问成功的jsp页面
5.在Controller层中加入访问文件上传的页面,并且定义上传文件的响应方法(form表单中所提交的action的方法名)
多文件上传
步骤同上
在上传多个文件的jsp页面中,form表单中要传多少个文件就加入多少个input标签,name和方法中的接收参数值相同
注:1.与上传单个文件处理方法不同的是接受参数由MultipartFile类型改为MultipartFile[]数组(或者MultipartHttpServletRequest)
2.文件下载
单文件下载
获得返回给用户的文件(要被下载的文件目录)
拼接返回给用户的文件路径
通过FileUtils.readFileToByteArray()方法将要下载的文件转换为二进制流
设置响应头,利用响应头设置返回数据类型: 响应头对象.setContentType(MediaType. APPLICATION_OCTET_STREAM) ResponseEntity可以设置响应头和响应内容,还可以设置防止中文乱码
批量下载,将多个文件压缩成zip,然后将zip文件转换为二进制流返回
将多个文件的文件名储存在集合中,遍历压缩
压缩文件的文件名和文件的输出目录,ZipOutPutStream()
遍历文件,进行压缩,将文件内容读出,写入压缩包中。利用inputStream读取文件内容,创建压缩实体(单元):ZipEntry()
通过FileUtils.readFileToByteArray()方法将要下载的文件转换为二进制类型
设置响应头,通过响应头进一步设置防中文乱码和返回数据类型