使用的软件版本
eclipse for Java EE 2019
jdk 1.8
Tomacat 8.5
Maven 3.5.4
Maven安装
下载
解压
配置环境变量
M2_HOME环境变量
path环境变量
集成到Eclipse
Eclipse创建Maven Web项目并运行
创建Maven Web项目
在Eclipse
显示项目的Package Explorer
的空白处点击鼠标右键,然后依次选择:New-Other...
在弹出的New
窗口中,展开Maven
,选择Maven Project
,然后点击Next
。
然后默认,点击Next
往下拖动滚动条到最后,选择maven-archetype-webapp
,点击Next
如果找不到,可以选择Internal,然后拖动到滚动条到最后,选择maven-archetype-webapp
,点击Next
填入坐标,Group Id
,Artifact Id
,剩下的随意,最后点击Finish
即可
这样就创建好了一个Maven
的Web
项目,这个项目会报错,如下图所示,这是因为还没有引入Tomcat
的库导致的.
修改项目配置
把Maven Web项目改为Java Web项目
在项目上点击右键,选择Properties
:
选择JDK版本
展开Maven
,选择Proiect Facets
,取消勾选Dynamic Web Module
,然后把Java的版本改为1.8
,然后点击Apply
重新选择Dynamic Web Module版本
接着把Dynamic Web Module
的版本改为3.1
,然后勾选上Dynamic Web Module
,这个时候下面会弹出这个链接Further configuration available....
:
指定Web应用根目录
点击这个连接,然后勾选上Generate web. xml deployment descriptor
,点击OK
选择Tomcat
然后点击右边的Runtimes
勾选上对应的Tomcat
,最后点击Apply and Close
即可。
创建java目录
在src
下面的main
目录下创建一个java
目录,我们后面的java
代码会放在这里
效果
此时的项目结构如下图所示:
修改web.xml
打开web.xml
文件,可以看到默认生成的代码如下:
1 2 3 4 5 6
| <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> </web-app>
|
这个2.3版本太老了。改成3.1版本的。
修改方式1:复制粘贴
全选,然后粘贴如下代码:
1 2 3 4 5 6 7
| <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>HelloWorld</display-name> </web-app>
|
修改方式2:生成
删除掉web.xml
重新生成
到这里就可启动项目了,看到效果了。
修改pom.xml
把junit
版本改为4.12.
测试
启动项目Run on Server
浏览器将显示index.jsp
页面之中的内容,如下图所示:
编写代码
编写HelloWorldServlet
创建包
在src/main/java
下创建一个hello
包,
创建Servlet
在包上面,右键,选择Servlet:
输入Servlet名称HelloWorldServlet
点击next,设置这个Servlet的URL
勾选要实现的方法:
HelloWorldServlet完整代码
修改HelloWorldServlet
文件,得到如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package hello; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/HelloWorldServlet") public class HelloWorldServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html,charset=utf-8;"); PrintWriter writer = response.getWriter(); writer.println( "<html><head><title>helloworld</title></head>" + "<body><h2>HelloWorld</h2></body>" + "</html>"); } }
|
浏览器访问
Run On server,然后打开浏览器,在地址上面输入URL:
http://localhost:8080/HelloWorld/HelloWorldServlet
即可访问到该Servlet
,显示效果如下:
使用Maven一键部署到Tomcat中
上面我们用的是Eclipse
部署的,使用Maven
可以打包把项目部署成war
包
设置tomcat用户密码
打开Tomcat
安装目录中conf
目录下的tomcat-users.xml
配置文件,
或者Eclipse
中Server
项目中的tomcat-users.xml
,在<tomcat-users></tomcat-users>
之中添加如下代码:
1 2 3 4 5
| <role rolename="admin"/> <role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <user username="admin" password="admin" roles="admin,manager,manager-gui,manager-script"/>
|
role
标签表示权限。
user
标签表示一个后台管理员,user
标签的
username
,password
这两个属性分别是该后台管理员的账户和密码,
roles
属性对应上面的role
标签.
验证密码
启动Tomcat,然后进入manager
此时会要求你输入密码,输入你上面设置好的密码:
如果能成功进入如下界面,则说明设置Tomcat的密码成功了:
修改Maven的配置文件
打开Maven
安装目录下conf
目录下的settings.xml
配置文件,或者%HOME%\.m2
目录下的settings.xml
,在
<servers></servers>
标签中添加如下代码:
1 2 3 4 5
| <server> <id>tomcatserver</id> <username>admin</username> <password>admin</password> </server>
|
安装Tomcat Maven部署插件
tomcat7的插件
项目中的pom.xml
,在<build></build>
标签之中添加如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <project ...> ... <build> <finalName>HelloWorld</finalName> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <url>http://localhost:8080/manager/text</url> <server>tomcatserver</server> <username>admin</username> <password>admin</password> </configuration> </plugin> </plugins> </build> </project>
|
<plugin>
元素详解
- groupId,artifactId,version为固定内容,这里使用的是tomcat7-maven-plugin,类似的还有tomcat8-maven-plugin和tomcat9-maven-plugin。但是我使用8和9的都部署失败。不知道是什么原因
- configuration标签的子标签
<url>
标签。Tomcat8.5的管理界面的url为http://localhost:8080/manager/html
,把html该成text就得到url标签的值。至于为什么要改成text,这个我不知道。我为html,时运行失败。
<path>
标签表示该web项目将部署到在tomcat
的webapp
下的的/HelloWorld
路径中。path可以不指定,如果不指定的,会使用项目名。最好不要指定path,这样便于把这段代码复制到其他项目中,会在webapp中生成该项目的同名目录。而不是继续部署到webapp下的HelloWorld中。
- 例如这段代码原本写在HelloWorld的pom中,现在复制到Login6SsmMaven的pom中,如果保留path标签,则Login6SsmMaven项目的内容,就会覆盖到HelloWorld,造成HelloWorld原来的内容丢失。并且通过路径/Login6SsmMaven也访问不到Login6SsmMaven,必须通过/HelloWorld来访问Login6SsmMaven项目的内容。
<username>
和<password>
与上面的Maven的settings.xml
配置文件中设置的用户名和密码一样
<server>
中的tomcatserver
和上面的Maven的settings.xml
配置文件中设置的id一样。
部署
先运行Tomcat
先运行Tomcat再部署,先运行Tomcat再部署,先运行Tomcat再部署
到Tomcat安装目录下的bin目录下,运行startup.bat
1
| G:\apache-tomcat-8.5.35-windows-x64\apache-tomcat-8.5.35\bin\startup.bat
|
如果在Eclipse中启动Tomcat的话,然后再部署,我之前是可以成功部署的。但是今天实测不能部署,所以保险起见还是通过startup.bat来启动Tomcat比较合适。
再使用Maven部署项目
回到Eclipse中,右键项目,
输入如下命令:
1
| clean install tomcat7:redeploy
|
部署成功控制台输出如下:
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| [INFO] Scanning for projects... [INFO] [INFO] ------------------------< com.blue:HelloWorld >------------------------- [INFO] Building HelloWorld Maven Webapp 0.0.1-SNAPSHOT [INFO] --------------------------------[ war ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ HelloWorld --- [INFO] Deleting E:\dev2\workspacne_JDK8Tomcat8.5\HelloWorld\target [INFO] >> 阿里云Maven中央仓库为阿里云云效提供的公共代理仓库 [INFO] >> 云效也提供了免费、可靠的Maven私有仓库Packages,欢迎您体验使用 [INFO] >> https://packages.aliyun.com?channel=pd_maven_download [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ HelloWorld --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] >> 阿里云Maven中央仓库为阿里云云效提供的公共代理仓库 [INFO] >> 云效也提供了免费、可靠的Maven私有仓库Packages,欢迎您体验使用 [INFO] >> https://packages.aliyun.com?channel=pd_maven_download [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ HelloWorld --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent! [INFO] Compiling 1 source file to E:\dev2\workspacne_JDK8Tomcat8.5\HelloWorld\target\classes [INFO] >> 阿里云Maven中央仓库为阿里云云效提供的公共代理仓库 [INFO] >> 云效也提供了免费、可靠的Maven私有仓库Packages,欢迎您体验使用 [INFO] >> https://packages.aliyun.com?channel=pd_maven_download [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ HelloWorld --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory E:\dev2\workspacne_JDK8Tomcat8.5\HelloWorld\src\test\resources [INFO] >> 阿里云Maven中央仓库为阿里云云效提供的公共代理仓库 [INFO] >> 云效也提供了免费、可靠的Maven私有仓库Packages,欢迎您体验使用 [INFO] >> https://packages.aliyun.com?channel=pd_maven_download [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ HelloWorld --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ HelloWorld --- [INFO] No tests to run. [INFO] [INFO] --- maven-war-plugin:2.2:war (default-war) @ HelloWorld --- [INFO] Packaging webapp [INFO] Assembling webapp [HelloWorld] in [E:\dev2\workspacne_JDK8Tomcat8.5\HelloWorld\target\HelloWorld] [INFO] Processing war project [INFO] Copying webapp resources [E:\dev2\workspacne_JDK8Tomcat8.5\HelloWorld\src\main\webapp] [INFO] Webapp assembled in [53 msecs] [INFO] Building war: E:\dev2\workspacne_JDK8Tomcat8.5\HelloWorld\target\HelloWorld.war [INFO] WEB-INF\web.xml already added, skipping [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ HelloWorld --- [INFO] Installing E:\dev2\workspacne_JDK8Tomcat8.5\HelloWorld\target\HelloWorld.war to G:\dev2\maven_my\libs\com\blue\HelloWorld\0.0.1-SNAPSHOT\HelloWorld-0.0.1-SNAPSHOT.war [INFO] Installing E:\dev2\workspacne_JDK8Tomcat8.5\HelloWorld\pom.xml to G:\dev2\maven_my\libs\com\blue\HelloWorld\0.0.1-SNAPSHOT\HelloWorld-0.0.1-SNAPSHOT.pom [INFO] >> 阿里云Maven中央仓库为阿里云云效提供的公共代理仓库 [INFO] >> 云效也提供了免费、可靠的Maven私有仓库Packages,欢迎您体验使用 [INFO] >> https://packages.aliyun.com?channel=pd_maven_download [INFO] [INFO] >>> tomcat7-maven-plugin:2.2:redeploy (default-cli) > package @ HelloWorld >>> [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ HelloWorld --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] >> 阿里云Maven中央仓库为阿里云云效提供的公共代理仓库 [INFO] >> 云效也提供了免费、可靠的Maven私有仓库Packages,欢迎您体验使用 [INFO] >> https://packages.aliyun.com?channel=pd_maven_download [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ HelloWorld --- [INFO] Nothing to compile - all classes are up to date [INFO] >> 阿里云Maven中央仓库为阿里云云效提供的公共代理仓库 [INFO] >> 云效也提供了免费、可靠的Maven私有仓库Packages,欢迎您体验使用 [INFO] >> https://packages.aliyun.com?channel=pd_maven_download [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ HelloWorld --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory E:\dev2\workspacne_JDK8Tomcat8.5\HelloWorld\src\test\resources [INFO] >> 阿里云Maven中央仓库为阿里云云效提供的公共代理仓库 [INFO] >> 云效也提供了免费、可靠的Maven私有仓库Packages,欢迎您体验使用 [INFO] >> https://packages.aliyun.com?channel=pd_maven_download [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ HelloWorld --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ HelloWorld --- [INFO] No tests to run. [INFO] Skipping execution of surefire because it has already been run for this configuration [INFO] [INFO] --- maven-war-plugin:2.2:war (default-war) @ HelloWorld --- [INFO] Packaging webapp [INFO] Assembling webapp [HelloWorld] in [E:\dev2\workspacne_JDK8Tomcat8.5\HelloWorld\target\HelloWorld] [INFO] Processing war project [INFO] Copying webapp resources [E:\dev2\workspacne_JDK8Tomcat8.5\HelloWorld\src\main\webapp] [INFO] Webapp assembled in [8 msecs] [INFO] Building war: E:\dev2\workspacne_JDK8Tomcat8.5\HelloWorld\target\HelloWorld.war [INFO] WEB-INF\web.xml already added, skipping [INFO] [INFO] <<< tomcat7-maven-plugin:2.2:redeploy (default-cli) < package @ HelloWorld <<< [INFO] [INFO] [INFO] --- tomcat7-maven-plugin:2.2:redeploy (default-cli) @ HelloWorld --- [INFO] Deploying war to http://localhost:8080/HelloWorld Uploading: http://localhost:8080/manager/text/deploy?path=%2FHelloWorld&update=true Uploaded: http://localhost:8080/manager/text/deploy?path=%2FHelloWorld&update=true (4 KB at 3268.6 KB/sec)
[INFO] tomcatManager status code:200, ReasonPhrase: [INFO] OK - Deployed application at context path [/HelloWorld] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.402 s [INFO] Finished at: 2021-09-01T11:33:16+08:00 [INFO] ------------------------------------------------------------------------
|
看到BUILD SUCCESS
这句话就表示部署成功了:
1 2 3 4 5 6 7 8 9 10 11 12
| [INFO] Deploying war to http://localhost:8080/HelloWorld Uploading: http://localhost:8080/manager/text/deploy?path=%2FHelloWorld&update=true Uploaded: http://localhost:8080/manager/text/deploy?path=%2FHelloWorld&update=true (4 KB at 3268.6 KB/sec)
[INFO] tomcatManager status code:200, ReasonPhrase: [INFO] OK - Deployed application at context path [/HelloWorld] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.402 s [INFO] Finished at: 2021-09-01T11:33:16+08:00 [INFO] ------------------------------------------------------------------------
|
Deploying war to http://127.0.0.1:8080/HelloWorld
这句话表示部署到了
http://127.0.0.1:8080/HelloWorld
这个URL上.打开这个URL
即可看到效果:
1 2 3 4 5 6
| <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0</version> <scope>provided</scope> </dependency>
|
Tomcat之中部署的效果
打开tomcat
的webapps
目录可以看到Maven
部署的war
包:
参考资料
https://blog.csdn.net/ai_lian_shuo/article/details/77096071#t11
https://www.linuxidc.com/Linux/2017-05/143308.htm