maven中自带有tomcat的依赖jar包,版本是6.0的,并且最多只能支持7.0版本的,所以如果servlet-api指定的依赖范围到了运行时,maven就不知道该选择自己自带的还是我们所指定的,就会出异常,所以servlet-api通常指定为<scope>provided</scope>
maven中自带的jdk是1.5不支持注解配置
maven的生命周期:
清除生命周期: mvn clean clean是maven工程的清理命令执行clean会删除target目录及内容。
默认生命周期:
1. mvn compile
编译compile,是maven工程的编译命令,作用是将 src/main/java下的文件编译为
class文件输出到target目录下
2. mvn test
test是maven 工程的测试命令 mvn test,会执行src/test/java下的单元测试类。
3. mvn package
package是maven工程的打包命令,对于java工程执行package打成jar包,对于web
工程打成war包,通常会在pom.xml中配置<packaging>war</packaging>。
4. mvn install
install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或
war包发布到本地仓库。
5. mvn deploy 部署
抽取servlet
1. UserServlet extends BaseServlet
2. BaseServlet extends HttpServlet
protected void service(HttpServletRequest request, HttpServletResponse response){
//获取地址栏中访问的方法名,截取是[n,m),而'/'这个字符不需要
String uri = request.getRequestURI();
String method_name = uri.substring(uri.lastIndexOf('/')+1);
//通过反射,调用地址栏中指定的方法
Method method =this.getClass().getDeclaredMethod
(method_name,HttpServletRequest.class,HttpServletResponse.class);
//调用这个方法
method.invoke(this,request,response);
}
this:谁调用的方法,this就是谁,用户访问UserServlet本质上是调用这个对象的service方法,由于UserServlet中没有定义,所有通过继承的关系向上找,这个原始service()的参数是:ServletRequest request, ServletResponse response,不是HttpServletRequest/HttpServletResponse,所以继续向上找,找到HttpServlet中的service()方法,对这个service()方法的参数向下转型,得到service(HttpServletRequest req, HttpServletResponse resp)方法。由于我自定义的BaseServlet重写了service(HttpServletRequest req, HttpServletResponse resp)方法,多态重写就执行子类,所以最终执行的是BaseServlet中的service();
day24_maven基础
1.maven的相关概念
- maven的作用:帮助我们统一编译、测试、打包、部署、运行、调优项目以及统一管理我们的依赖jar包;
2.Maven的安装和相关配置
-
安装maven:解压到非中文目录即可
-
配置MAVEN_HOME
系统变量: %MAVEN_HOME% I:\maven\apache-maven-3.5.2-bin\apache-maven-3.5.2
-
配置path环境变量:%MAVEN_HOME%\bin
系统变量: Path–>编辑–> %MAVEN_HOME%\bin
-
测试是否安装成功
cmd-->mvn -version
-
-
**配置仓库:<localRepository>I:/maven_repository/maven_repository
找到目录:I:\maven\apache-maven-3.5.2-bin\apache-maven-3.5.2\conf\settings.xml
自定义标签配置:I:/maven_repository/maven_repository
-
配置阿里云仓库镜像:在apache-maven-3.5.2/conf/settings.xml中的mirrors标签中配置
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
3.仓库的分类
- **本地仓库:**项目通过坐标直接从本地仓库获取jar包。前提是:本地仓库有这个jar包
- **私服仓库:**优先从本地仓库获取jar包,如果没有,就从私服仓库将jar包下载到本地仓库,如果私服仓库也没有jar包,那么就从中央仓库将jar包下载到私服仓库和本地仓库,最后从本地仓库获取jar包。
- **中央仓库:**优先从本地仓库获取jar包,如果没有,就从中央仓库先把jar包下载到本地仓库(有外网),再从本地仓库获取jar包。
- 总结:无论哪种方式,最终项目都是从本地仓库获取jar包
4.常用命令
- mvn clean:清除项目的编译信息,删除target目录内容
- mvn compile:编译项目
- mvn test:编译和运行测试代码
- mvn package:将项目打成jar包或者war包(在pom.xml中指定)
- mvn install:将我们的项目打成jar包安装到本地仓库中(作用:别的项目可以使用这个jar包)
5.idea中集成maven(只要换了project都有重新集成)
-
配置本地的maven路径
-
配置骨架/项目模板的来源:离线:-DarchetypeCatalog=internal -Dfile.encoding=GB2312
6.在idea中创建maven项目(重点1)
7.依赖管理以及依赖范围(重点2)
-
通过坐标添加依赖jar包
-
坐标:jar包位置的唯一表示,maven通过坐标可以在仓库中找到对应的jar包。
坐标由如下三部分组成:groupid(公司组成名称)、artifactid(项目名/模块名)、version(版本号)
-
中央仓库网址:
中央仓库网址:http://mvnrepository.com/
-
-
依赖范围
注意:依赖默认是compile范围,但是junit是test范围,servlet-api和jsp-api是provided范围,mysql驱动jar包是runtime范围
compile: 编译,测试,运行,默认值
test:测试,junit
provided: 编译,测试,servlet-api和jsp-api
rumtime:测试,运行,mysql驱动
system:编译,测试,本地仓库外的仓库
<dependencies> <!--指定junit单元测试依赖jar包--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--指定jsp依赖jar包--> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> </dependencies>
8.常用的插件(重点3)
-
tomcat7插件和jdk1.7插件(每个模块都添加)
<build> <plugins> <!-- 配置jdk插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>utf-8</encoding> </configuration> </plugin> <!-- 配置tomcat7插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <path>/usermanager</path> <!--配置虚拟路径--> <uriEncoding>utf-8</uriEncoding><!-- 解决get请求乱码问题 --> </configuration> </plugin> </plugins> </build>
-
配置maven插件tomcat7启动项: