IDEA+Maven内置Tomcat

Tomcat配置有些麻烦,几个人一起用不如Maven来的快,浅浅研究一下怎么用Maven和它内置的Tomcat完成Web项目的搭建。

前提:安装好IDEA与Git

创建Maven工程

创建新工程

选webapp

按需改名

设置Maven

如果想直接设置IDEA的maven配置省去每次修改,在File-Settings-Build, Excution, Deployment中做以下的同样修改:

我用的IDEA自带的Maven,settings.xml在安装目录\plugins\maven\lib\maven3\conf\settings.xml,貌似默认的是在C:\Users\用户名\.m2中,其中settings.xml会指向下一个选项本地目录,不想放C盘的话可以勾Override改位置,也可以改上述settings.xml:

1
2
3
4
5
6
7
8
9
10
11
12
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository

-->
<localRepository>你想放的本地目录</localRepository>
...(其他内容)
</settings>

Finish创建完成。

创建资源文件

我是按网上教程来的第一步新建工程,但是出来结果跟网上不太一样,所以如果你的跟我目录结构一样可以继续往下看,不然可能不太一样。

创建Java文件夹

右键项目名:

创建Directory:

把这几个全部添加上:

点这几个添加就不用另操作添加关联了,所以不要自己写文件名,到这一步,创建了一个普通的Java项目而不是Web项目。

创建Web项目文件夹

src\main中添加文件夹webapp,点开File-Project Settings:

(图源csdn博客

修改路径:

Deployment Descriptors中的Path设成你的webapp完整路径\WEB-INF\web.xml,Web Resource Directory设成你的webapp完整路径,完成后webapp文件夹样式改变,可以创建index等文件写Web项目了:

引入maven内置Tomcat依赖

修改pom.xml,看注释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?xml version="1.0" encoding="UTF-8"?>
<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">
<modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId>
<artifactId>hjb</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 引入war的packaging -->
<packaging>war</packaging>

<properties>
<!-- 不写servlet可以不要下面这行 -->
<servlet-api.version>3.1.0</servlet-api.version>
<tomcat.version>9.0.39</tomcat.version>
</properties>

<dependencies>
<!-- 引入tomcat-embed-core和tomcat-embed-jasper -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>${tomcat.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>

<!-- 打包项目时war包的名字 -->
<build>
<finalName>Hello</finalName>
</build>
</project>

配置run/debug

添加配置:

添加项目working directory(点后面小图标可以直接添加),command line输入clean install tomcat7:run 就可以了。

Maven依赖下载完成

右下角Import Changes,第一次配需要漫长的等待。

也可以在右侧点开Maven查看并import:

之后run,没有报错可以访问localhost:8080/项目名了。

(补充)创建一个Servlet

注意依赖要引入<servlet-api.version>3.1.0</servlet-api.version>(见引入maven内置Tomcat依赖这节),在src\main\java中new一个package,package中new一个servlet:

注意使用servlet注解,可以省去web.xml中的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package hjbServlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(urlPatterns = "/")
public class hjbServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("---执行了doPost---");
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("---执行了doGet---");
}

protected void processData(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
System.out.println("---处理数据---");
response.setContentType("text/xml;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Cache-Control","no-cache");
//String deviceId=request.getParameter("device_id");
String test="test";
response.setContentType("text/html; charset=UTF-8");
try{
response.getWriter().print(test);
response.getWriter().flush();
response.getWriter().close();
} catch(IOException e){
e.printStackTrace();
}
}

protected void service(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
System.out.println("---执行了service---");
processData(request,response);
}
}