一、JAVA必备工具maven-3.6.3版的安装配置使用记录
maven不是什么高档的东东,就是用来管理程序中的依赖关系,比如你的程序需要用一个数据库包,你可以去自己导入,而通过maven可以不用手动去导入,只需要填写一些配置,比如要导入哪个包以及版本要求等,maven就会自动下载下来。其它的语言里也有类似的东西,比如node中的npm,比如php中的composer,maven工程导入jar包只需要在pom.xml配置文件中定义要导入的包名,后台会自动从maven仓库下载,除此之外,使用maven还有一些好处:
- 使用maven构建的项目不包含jar包文件,从而缩小整个项目的占用空间。
- 项目一键构建,使用maven可以快速地对项目进行编译、测试、运行、打包、安装
- maven可在window、linux上使用,且maven遵循规范开发有利于提高大型团队的开发效率,降低维护成本。
1、maven的下载安装
maven的下载地址:Maven – Download Apache Maven
推荐下载最新版,我这里在windows下用,下载的是3.6.3的 apache-maven-3.6.3-bin.zip。下载后解压至某个目录下,如:D:\apache-maven-3.6.3。maven安装就和JDK一样(说到这里补一句,maven是需要JDK的),只需此目录添加到新增的maven的环境变量MAVEN_HOME中,再在path环境变量不添加: %MAVEN_HOME%/bin。使用mvn -v 显示版本号来查看是否安装成功。
2、maven的配置
maven的配置文件:setting.xml,在上面的maven目录 D:\apache-maven-3.6.3 下conf文件夹里。需要进行三项配置。
#、设置maven下载jar包的本地仓库地址。
设置maven下载jar包的本地仓库地址之后maven自动下载的包会全部放在这里,这点和php好,php的compose程序需要在每个项目中都下载一遍,而java的maven可以只在一个地方下载存放,所有项目共用。在setting.xml中搜索"localRepository",去掉注释,配置好本地的存放路径,如:
<localRepository>D:\apache-maven-3.6.3\localRepository</localRepository>
#、设置maven的全局jdk版本,
设置maven的全局jdk版本,通过jdk关键词,查找配置文件中的下面这个模块,去掉注释。填写好你当前的jdk版本。
<profile>
<id>jdk-1.8</id>
<activation>
<jdk>1.8</jdk>
</activation>
<repositories>
<repository>
<id>jdk18</id>
<name>Repository for JDK 1.8 builds</name>
<url>http://www.myhost.com/maven/jdk18</url>
<layout>default</layout>
<snapshotPolicy>always</snapshotPolicy>
</repository>
</repositories>
</profile>
#、增加阿里云maven仓库镜像
加速maven下载,增加阿里云maven仓库镜像,在maven的settings.xml 文件里配置mirrors的子节点,添加阿里云的mirror
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
3,在eclipse IDE中关联已安装好的maven
在eclipse IDE中需要配置两个地方,一是window–>preference–>maven下需要添加 maven的安装路径,让eclipse能执行maven。二是在当前user setting选项中更改settings.xml的位置,具体如下图:
4、新建maven项目
上述操作完成之后,在eclipse中新建maven项目:file->new->maven project。刚开始用,可以在界面上可以选择:create a simple project,填写一些内容即完成项目创建。创建好的maven项目目录中就会存在一个pom.xml配置文件,我们所需要的包在这里的<dependencies>下配置即可,保存之后maven就会自动下载配置里的包文件放在上面配置的localRepository中,如下示例:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
</dependencies>
需要了解要下载的包,去官网: http://mvnrepository.com/ 搜索查看即要, 就像composer的官网一样。能搜索到各种包并有详细的介绍以及使用文档。复制Maven代码到 pom.xml中即可。阿里云的maven仓库可以使用,不过不能使用页面访问,可访问:https://maven.aliyun.com 了解。
二、java WEB项目开发取请求参数null问题及request常用获取请求参数方法
1. java WEB项目开发取请求参数null问题
java WEB项目开发取请求参数java.lang.NumberFormatException: null问题及request中常用获取请求参数方法。JAVA中从WEB请求中提取参数使用Servlet里HttpServletRequest类的getParameter方法,如下从URL中提取page参数和uuid参数,示例如下:
int pagenum = Integer.valueOf(request.getParameter("page"));
String uuid = request.getParameter("uuid");
但在使用的时候发现URL传了参数不写值时服务端接收到的是空字符串不会报错,但URL中如果不带这个参数,就会报错:java.lang.NumberFormatException: null at java.base/java.lang.Integer.parseInt(Integer.java:614) at java.base/java.lang.Integer.valueOf(Integer.java:983)。即URL中不传参的时候提取到的值是null,而这个null传给 Integer.valueOf 或者 Integer.parseInt 方法就会报错。另外在进行Integer.valueOf整数处理的时候,如果传入的数据是字符串,也会报错,都需要进行异常处理。如下:
#参数处理代码,调用help中的数字判断。
int page = 1;
if(request.getParameter("page") != null ){
if(Help.isNumeric(request.getParameter("page"))) {
page = Integer.valueOf(request.getParameter("page"));
}
}
#Help.isNumeric方法代码:
public static boolean isNumeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if( !isNum.matches() ){
return false;
}
return true;
}
整个过程要先进行null判断,再判断是否纯数字,然后再进行Integer.valueOf处理。真感觉挺麻烦的,HttpServletRequest类应该提供一个request.getParameterDefault方法,另外在字符串转整型的时候我觉得也不妥当。
2. request常用获取请求参数方法
HttpServletRequest类方法很多,都是提取URL请求时的各项数据,常用的方法和意义列表如下:
getRequestURL() //获取URL
getQueryString() //获取参数列表,适用于GET,提取URL中?号后面的内容。
request.getMethod(); //获取请求方式 get和post都可用,
request.getParameter("test"); //获取参数值value get和post都可用,不适用contentType为multipart/form-data
request.getParameterNames(); //获取所有参数key get和post都可用,注:不适用contentType为multipart/form-data
request.getContentType(); //获取请求类型 get和post都可用,如application/json ,multipart/form-data, application/xml等
request.getParameterMap(); //获取取参数请求集合 get和post都可用,注: 不适用contentType为multipart/form-data
request.getInputStream() //获取文本流,适用于如:application/json,xml,multipart/form-data文本流