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创建servlet webapp项目并在Tomcat上部署_第1张图片

同样的,也可以使用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

修改后结果:


<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

修改后结果是:


<settings ...>
    <servers>
        <server>
            <id>TomcatServerid>
            <username>adminusername>
            <password>adminpassword>
        server>
    servers>
settings>

2.3 项目pom文件中配置Tomcat7 Maven 插件

修改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>

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("

Simple Servlet ran successfully

"
+ "Powered by Blyde"); } }

3.3 配置web.xml

在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>

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.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>

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 当浏览器正常打印

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

你可能感兴趣的:(工程WIKI,tomcat,servlet,vagrant,java,maven)