by Blyde Liu
在Mac OS X上安装VirtualBox 和 Vagrant搭建好了Java web本地开发环境后,现在需要实现一个Servlet Application Demo。
本文主要是在虚拟机的操作系统中使用命令创建与构建Servlet的webapp应用并在Tomcat中运行。
一、本地开发环境
- 操作系统:Centos 7
- Java版本:Oracle JDK 7
- 包版本管理:Maven 3
- 服务器:Tomcat 7
二、创建Maven Webapp应用
很多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
2. 生成War包并在Tomcat上部署
http://www.mkyong.com/maven/how-to-deploy-maven-based-war-file-to-tomcat/
本文仅限于部署Tomcat服务器,生成War包并发送到tomcat文件夹的webapp目录下。
2.1 Tomcat 授权
新增一个有manager-gui 和 manager-script权限的tomcat用户
tomcat$ sudo vim conf/tomcat-users.xml
修改后结果:
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="manager-gui,manager-script" />
</tomcat-users>
2.2 Maven 授权
把上面新增的tomcat用户添加到Maven的conf/settings.xml文件中,maven将会使用此用户等tomcat服务器。
maven$ sudo vim conf/settings.xml
修改后结果是:
<?xml version="1.0" encoding="UTF-8"?>
<settings ...>
<servers>
<server>
<id>TomcatServer</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
</settings>
2.3 项目pom文件中配置Tomcat7 Maven 插件
修改pom.xml。
其中的update字段是强制更新操作,默认为false。
update字段是true时,当重新发布,tomcat目录下的webapp中的同名war包将被覆盖。
修改后结果是:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<server>TomcatServer</server>
<path>/helloworld</path>
<!-- update war file although existing-->
<update>true</update>
</configuration>
</plugin>
2.4 部署到Tomcat
使用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] ————————————————————————
2.5 启动tomcat并验证部署结果
tomcat$ sh bin/startup.sh
$ curl http://localhost:8080/helloworld/
返回结果是:
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
2.6 在Mac 浏览器验证
由于本文是在虚拟机操作系统中运行web应用,因此需要通过Mac的浏览器验证web应用运行情况。
输入http://[your_centos7_ip]:8080/[your_app],上文设置的私有网络地址是192.168.33.10,即访问url应该是:http://192.168.33.10:8080/helloworld/
2.7 恭喜你
当你能正常访问你的应用时,说明你的部署web-app成功了。
三、配置运行Servlet
下面将创建Servlet派生类并配置web.xml
3.1 创建servlet类文件
在main目录下创建java/com/demo/HelloWorld.java文件
创建后目录结构如下:
.
├── pom.xml
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── demo
│ │ └── HelloWorld.java
│ ├── resources
│ └── webapp
│ ├── index.jsp
│ └── WEB-INF
│ └── web.xml
3.2 编写简单的servlet类文件
public class HelloWorld extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html");
response.getWriter().print("<h1><font color=green>Simple Servlet ran successfully</font></h1>" + "Powered by Blyde");
}
}
3.3 配置web.xml
在web.xml文件中配置url访问映射规则信息。
配置后结果是:
<!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 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 Application</display-name>
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>com.demo.HelloWorld</servlet-class>
</servlet>
<!-- Note: All <servlet> elements MUST be grouped together and placed IN FRONT of the <servlet-mapping> elements -->
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
3.4 配置pom.xml
配置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.0</modelVersion>
<groupId>com.demo</groupId>
<artifactId>Helloworld</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Demo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- servlet api-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
<build>
<finalName>Helloworld</finalName>
<plugins>
<!-- Config: Maven Tomcat Plugin -->
<!-- http://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<server>TomcatServer</server>
<!-- path of resources-->
<path>/helloworld</path>
<!-- update war file although existing-->
<update>true</update>
</configuration>
</plugin>
</plugins>
</build>
</project>
3.5 部署webapp
使用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] ————————————————————————
3.6 在Mac 浏览器验证
由于本文是在虚拟机操作系统中运行web应用,因此需要通过Mac的浏览器验证web应用运行情况。
输入http://[your_centos7_ip]:8080/[your_app]/[request],上文设置的私有网络地址是192.168.33.10,即访问url应该是:http://192.168.33.10:8080/helloworld/hello
3.7 当浏览器无法访问时
当浏览器无法访问http://192.168.33.10:8080时,可以考虑一下是否系统的防火墙拦截了请求,简单粗暴的方法是关闭系统的防火墙服务:
sudo systemctl stop firewalld.service
当然,您也可以查centos7 配置防火墙规则的教程。
3.8 当浏览器正常打印
恭喜你,你的环境配置成功了。