Maven创建servlet webapp项目并在Tomcat上部署

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

同样的,也可以使用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 当浏览器正常打印

恭喜你,你的环境配置成功了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值