HelloWorldServlet

环境准备

windows环境

  1. intellij idea ultimate 2018.1
  2. jdk1.8

开始

step1 初始项目结构

在这里插入图片描述
输入项目名称“HelloWorldServlet”

查看项目文件结构,默认有一个web.xml
在这里插入图片描述
web.xml内容

<?xml version="1.0" encoding="UTF-8"?>
<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_4_0.xsd"
         version="4.0">
</web-app>

step2 编写Servlet

右键"src"->“New”->“Servlet”,新建Servlet源文件
在这里插入图片描述
在这里插入图片描述

import java.io.IOException;

public class HelloWorldServlet extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {

    }

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
    System.out.print("doGet");//自己添加代码段
    }
}

step3 编译生成war包,部署到tomcat上并运行tomcat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

切换到Deployment标签,添加Artifact
在这里插入图片描述
点击ok,此时在ApplicationServer视图窗口下,点击start
在这里插入图片描述
报错
在这里插入图片描述

缺少servlet依赖
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

之后发现默认以provide模式引入tomcat jar包
在这里插入图片描述
此时project窗口可以看到外部依赖引入了本地安装的tomcat程序目录下lib文件夹中的依赖库
在这里插入图片描述
servet源文件不标红提示错误了,所以对module添加servlet依赖正常应该挪到step2,这里只是示范错误使用方式

继续回到ApplicationServer视图窗口下,点击start,可以正常启动

在这里插入图片描述
但是,如果需要把请求路由到自定义Servlet的话,需要修改web.xml,添加servlet-mapping
在这里插入图片描述
重新执行"Run"->“Run ‘HelloWorldServletTomcat’”,在浏览器中输入http://localhost:8080/HelloWorldServlet回车,ide的tomcat的server输出窗口下可以看到“doGet”,自定义的Servlet程序生效,任务完成
在这里插入图片描述

总结

整个开发流程
编译
打包
部署
发布

相对于前端应用开发,多了一个部署过程,因为servlet程序依赖web容器,tomcat服务器作为web容器有要求web应用服务程序的格式

开发的servlet程序能运行的前提是生成可以部署到web容器(如tomcat服务器)上的war包或者已经解开的文件夹,war包内容包含(servlet相关class、web.xml还有一些资源文件等)

关键词:
artifact在整个构建过程中扮演重要角色,覆盖了编译和打包流程,指定了输出类型
artifact(这是maven的概念还是idea这个ide的概念????)
artifact两种主要类型:archive类型(war包)和exploded类型(文件夹)
artifact中output directory和output layout区别?

问:但是没有在本地找到输出war包,如何单独生成war包方便后续发布???
答:

  1. 新建一个archive类型的artifact
    “File”->“Project Structure”->“Artifcats”->"+"->“Web Application:Archive”->“From …”
    ,war包默认输出到项目根目录下“out\artifacts\XXX_war”,如下图1
  2. “Run->“Edit Configurations…”,选择Tomcat运行任务,然后把新建的archive类型的artifact部署上去,点击确定,如下图2
  3. 运行tomcat任务,查看“out\artifacts\XXX_war”下的war包

图1
在这里插入图片描述
图2

在这里插入图片描述

引申

上面介绍的是基于tomcat run task去执行集打war包、部署war包到tomcat、运行tomcat一体化的任务,可以再细分流程吗?

1.单独打war包

方式一.命令行(了解原理)

如果之前有创建exploded类型artifact并编译成功过,则在项目根目录\out\artifacts\xxx_war_exploded,直接执行jar -cvf xxx_war.war *,如jar -cvf HelloWorldServlet_war.war *将所有class、xml和resources打包

如果之前没有,则需要先去执行javac将所有的java源文件编译成class,然后再执行jar打包

方式二.使用idea(推荐)

直接“Build”->"Build Artifacts…"选择archive类型的artifact然后build即可
在这里插入图片描述

在这里插入图片描述
查看项目根目录\out\artifacts\xxx_war即可看到输出的war包

方式三.使用maven(推荐)
方式四.使用gradle(待续)

2.单独把war包部署到tomcat

把生成的war包,直接放到tomcat安装根目录\webapps目录下,直接运行tomcat安装根目录\bin\startup.bat文件,tomcat会自动把webapps下的所有war包部署到tomcat上并运行

可以看下tomcat安装根目录\conf\server.xml文件部分内容,描述了tomcat支持在webapps目录自动解war包并部署的逻辑

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

下图是启动tomcat后,部分部署成功的日志输出
在这里插入图片描述
打开浏览器,输入localhost:8080/HelloWorldServlet回车,验证发现tomcat控制台输出doGet,实验成功!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值