一、IDEA配置maven
当导入maven项目的时候,首先需要按照如图进行maven的配置:指定使用的maven包、指定本地仓库和maven的settings.xml文件。
然后在IDEA右侧栏,点击maven图标,在滑出的maven的界面选择Reimport All maven project下载jar包
二、使用maven创建JavaWeb项目
1.创建javaWeb项目
- 打开IDEA,点击File —>>>New Project—>>弹出new Project界面
- 点击Next,在New Module界面设置
- 在此页面可以看到配置的maven信息、创建项目的信息
- 设置项目的名称和路径信息
- 点击Finish,就可以创建好项目,如果创建的项目的目录结构是不符合标准的maven结构,我们需要进行设置。
- 对于java目录,是需要设置Source Root目录。设置之后,maven编译的时候可以转为classes文件。可以右键点击Mark Directory as进行设置。
- 我们此时创建的项目的webapp,鼠标点击右键,不能创建jsp、html文件,显然这是有问题的。我们需要进行如下设置:点击File—>>>Project Structure,在弹出的页面进行设置:
- 通过上述的设置,我们发现
1.webapp的目录颜色改变了;2.webapp目录下新建Jsp、html文件了
- 对于java目录,是需要设置Source Root目录。设置之后,maven编译的时候可以转为classes文件。可以右键点击Mark Directory as进行设置。
2.pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- pom文件的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 企业域名倒序 -->
<groupId>com.oneHeart</groupId>
<!-- 项目名称 -->
<artifactId>maven_web2</artifactId>
<!-- 版本 snapshot快照版,在项目每次启动时会自动检查更新 release:1.1 -->
<version>1.0-SNAPSHOT</version>
<!-- 打包格式 jar:java project的打包,.jar文件 war:web project打包,打包为.war文件,可以直接在应用服务器中执行
pom:父级项目的打包格式 -->
<packaging>war</packaging>
<!-- 名称 -->
<name>maven_web2 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<!--定义常用的依赖的版本
project.build.sourceEncoding:代替UTF-8
-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!-- 依赖管理 一般出现在父级项目中,他用来规范继承关系的项目中使用的依赖的版本信息, 如果父项目中dependencyManagement,子项目中是不需要指定版本信息的 -->
<!-- <dependencyManagement> dependencies如果定义在dependencyManagement中 规范父级别依赖
</dependencyManagement> -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!--scope:范围
用于指定依赖的生命周期的 compile:编译、测试、运行有效,默认使用compile provided:编译、测试有效,运行无效(servlet依赖)
test:编译,测试有效,运行无效(junit,spring-test) runtime:测试、运行有效 system:与本机的系统变量相关,一致性差(不建议使用),编译测试有效。
import:从其他 pom 文件导入时有效 -->
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!--
項目最終部署的名稱
-->
<finalName>maven_web2</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!--配置插件:
maven生命周期与一键构建使用的插件对应:clean、compile、test、package、install、deploy
-->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- 配置JDK -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8.0_201</source>
<target>1.8.0_201</target>
</configuration>
</plugin>
<!-- tomcat插件,maven默认集成的tomcat6,
tomcat6与JDK8搭配使用的时候会有版本冲突 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>9991</port>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
3.创建Servlet
@WebServlet("/helloServlet")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet......");
req.getRequestDispatcher("/hello.jsp").forward(req,resp);
}
}
4.创建hello.jsp
在webapp目录下创建hello.jsp
5.运行Tomcat,访问Servlet
6.访问Servlet
浏览器输入:http:localhost:8080/maven_web2/helloServlet,则会跳转到hello.jsp页
7.遇到的问题
<1>webapp目录下无法创建jsp、html文件
解决措施:参照 3.创建Servlet进行将webapp设置成web
<2> Class com.oneHeart.Servlets.HelloServlet is not a Servlet
具体描述:javax.servlet.ServletException: Class com.oneHeart.Servlets.HelloServlet is not a Servlet。编译的时候不出错,运行项目的时候出现的错误,创建的Servlet被提示 不是Servlet。
原因:maven集成了tomcat,我们可以查看本地tomcat 的依赖包,发现包含:servlet-api、jsp-api,而我们在maven 的pom.xml文件中添加了相同名称 servlet-api、jsp-api 的jar包(创建Servlet的时候需要),
而在项目运行的时候,则我们添加的包会和maven集成的tomcat包相冲突。
解决的办法:我们需要将pom文件中,我们添加的 servlet-api、jsp-api 包只在编译之时生效,而不在运行的时候生效,避免发生jar包冲突。我们可以使用 provided 指定jar包作用范围为编译,只在编译时候生效。
<scope> provided </scope>
<3>.严重: Failed to initialize end point associated with ProtocolHandler [“http-bio-8080”]
java.net.BindException: Address already in use: JVM_Bind :8080
端口被占用异常,原因:之前启动了maven项目,未关闭。而后重新启动,就会出现端口被占用异常。
<4>.org.apache.jasper.JasperException: Unable to compile class for JSP
An error occurred at line: 1 in the generated java file
The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files
问题描述:使用maven启动了Servlet之后,在浏览器访问对应的Servlet,Servlet可以正常访问,但是跳转页面会出现错误。
原因:maven集成的tomcat默认是tomcat6.0.29(如图所示),而java的jdk使用的是1.8,所以猜测这应该是tomcat与jdk版本不兼容引起的
解决措施:使用高版本的tomcat,在pom.xml文件中进行配置,配置好之后可以从Maven的Plugins执行tomcat7:run的命令。
<build>
<plugings>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugings>
</build>
<5>live Template,IDEA代码模板设置
三、使用mave创建Java项目
1.java项目与javaWeb项目的创建区别:
使用maven创建java项目可以参考创建javaweb项目。