by Blyde Liu
在Mac OS X上安装VirtualBox 和 Vagrant搭建好了Java web本地开发环境后,现在需要实现一个Servlet Application Demo。
本文主要是在虚拟机的操作系统中使用命令创建与构建Servlet的webapp应用并在Tomcat中运行。
很多Java IDE非常强大,能帮我们解决很多创建应用的过程,比如可以使用Idea或Eclipse 创建Maven Webapp应用,如下图所示:
同样的,也可以使用maven命令创建webapp项目,如下:
$ mvn archetype:generate
-DgroupId=com.companyname.sampleapp
-DartifactId=MembersGateway
-DarchetypeArtifactId=maven-archetype-webapp
-DinteractiveMode=false
创建Webapp项目文件结构是这样的:
|-- pom.xml
|-- src
| `-- main
| |-- resources
| `-- webapp
| |-- index.jsp
| `-- WEB-INF
| `-- web.xml
http://www.mkyong.com/maven/how-to-deploy-maven-based-war-file-to-tomcat/
本文仅限于部署Tomcat服务器,生成War包并发送到tomcat文件夹的webapp目录下。
新增一个有manager-gui 和 manager-script权限的tomcat用户
tomcat$ sudo vim conf/tomcat-users.xml
修改后结果:
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="manager-gui,manager-script" />
tomcat-users>
把上面新增的tomcat用户添加到Maven的conf/settings.xml文件中,maven将会使用此用户等tomcat服务器。
maven$ sudo vim conf/settings.xml
修改后结果是:
<settings ...>
<servers>
<server>
<id>TomcatServerid>
<username>adminusername>
<password>adminpassword>
server>
servers>
settings>
修改pom.xml。
其中的update字段是强制更新操作,默认为false。
update字段是true时,当重新发布,tomcat目录下的webapp中的同名war包将被覆盖。
修改后结果是:
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<server>TomcatServerserver>
<path>/helloworldpath>
<update>trueupdate>
configuration>
plugin>
使用mvn命令部署webapp项目至Tomcat服务器中
$ mvn tomcat7:deploy
$ mvn tomcat7:undeploy
$ mvn tomcat7:redeploy
[INFO] Deploying war to http://localhost:8080/MembersGateway
Uploading: http://localhost:8080/manager/text/deploy?path=%2FMembersGateway&update=true
Uploaded: http://localhost:8080/manager/text/deploy?path=%2FMembersGateway&update=true (87 KB at 4304.7 KB/sec)
[INFO] tomcatManager status code:200, ReasonPhrase:OK
[INFO] OK - Deployed application at context path /MembersGateway
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 5.284 s
[INFO] Finished at: 2016-07-17T17:08:16+02:00
[INFO] Final Memory: 16M/40M
[INFO] ————————————————————————
tomcat$ sh bin/startup.sh
$ curl http://localhost:8080/helloworld/
返回结果是:
<html>
<body>
<h2>Hello World!h2>
body>
html>
由于本文是在虚拟机操作系统中运行web应用,因此需要通过Mac的浏览器验证web应用运行情况。
输入http://[your_centos7_ip]:8080/[your_app],上文设置的私有网络地址是192.168.33.10,即访问url应该是:http://192.168.33.10:8080/helloworld/
当你能正常访问你的应用时,说明你的部署web-app成功了。
下面将创建Servlet派生类并配置web.xml
在main目录下创建java/com/demo/HelloWorld.java文件
创建后目录结构如下:
.
├── pom.xml
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── demo
│ │ └── HelloWorld.java
│ ├── resources
│ └── webapp
│ ├── index.jsp
│ └── WEB-INF
│ └── web.xml
public class HelloWorld extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html");
response.getWriter().print("Simple Servlet ran successfully
" + "Powered by Blyde");
}
}
在web.xml文件中配置url访问映射规则信息。
配置后结果是:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>Archetype Created Web Applicationdisplay-name>
<servlet>
<servlet-name>HelloWorldservlet-name>
<servlet-class>com.demo.HelloWorldservlet-class>
servlet>
<servlet-mapping>
<servlet-name>HelloWorldservlet-name>
<url-pattern>/hellourl-pattern>
servlet-mapping>
web-app>
配置servlet api依赖,本文使用的servlet版本是3.1.0,选取版本是来自maven包管理平台
配置后结果是:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.demogroupId>
<artifactId>HelloworldartifactId>
<packaging>warpackaging>
<version>1.0-SNAPSHOTversion>
<name>Demo Maven Webappname>
<url>http://maven.apache.orgurl>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>3.8.1version>
<scope>testscope>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
dependency>
dependencies>
<build>
<finalName>HelloworldfinalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<server>TomcatServerserver>
<path>/helloworldpath>
<update>trueupdate>
configuration>
plugin>
plugins>
build>
project>
使用mvn命令部署webapp项目至Tomcat服务器中
$ mvn tomcat7:deploy
$ mvn tomcat7:undeploy
$ mvn tomcat7:redeploy
[INFO] Deploying war to http://localhost:8080/MembersGateway
Uploading: http://localhost:8080/manager/text/deploy?path=%2FMembersGateway&update=true
Uploaded: http://localhost:8080/manager/text/deploy?path=%2FMembersGateway&update=true (87 KB at 4304.7 KB/sec)
[INFO] tomcatManager status code:200, ReasonPhrase:OK
[INFO] OK - Deployed application at context path /MembersGateway
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 5.284 s
[INFO] Finished at: 2016-07-17T17:08:16+02:00
[INFO] Final Memory: 16M/40M
[INFO] ————————————————————————
由于本文是在虚拟机操作系统中运行web应用,因此需要通过Mac的浏览器验证web应用运行情况。
输入http://[your_centos7_ip]:8080/[your_app]/[request],上文设置的私有网络地址是192.168.33.10,即访问url应该是:http://192.168.33.10:8080/helloworld/hello
当浏览器无法访问http://192.168.33.10:8080时,可以考虑一下是否系统的防火墙拦截了请求,简单粗暴的方法是关闭系统的防火墙服务:
sudo systemctl stop firewalld.service
当然,您也可以查centos7 配置防火墙规则的教程。
恭喜你,你的环境配置成功了。