Bootstrap

通过Tomcat / Small Tomcat,如何部署Servlet?(超详细)

目录

基于Tomcat对Servlet进行部署

一、创建项目

二、引入Servlet依赖

三、构建目录结构

四、编写代码

五、打包程序

六、部署程序

七、验证程序

基于Smart Tomcat对Servlet进行部署

第一步:下载Smart Tomcat插件

第二步:进行相关配置

 

第三步:运行配置

 第四步:确认部署是否成功

第五步:验证程序

Tomcat的运行方式


基于Tomcat对Servlet进行部署

        以下将会通过七个步骤,以打印“hello”为例,对Servlet进行部署;

        使用工具(这是配套使用的方案!):idea2021或2020,jdk 8,Java Servlet API 3.1.0版本,Tomcat 8.5;


一、创建项目

        首先,需要创建一个maven项目(这里建议使用idea社区版2021或2020,因为2022版本创建maven项目变化比较大);(如下图)

项目创建好后,可以看到目录结构(如下图)

解释:

  • main文件里主要存放业务代码;
  • resources存放代码需要的依赖资源(暂时不用);
  • test测试代码;
  • test下的java文件是项目的“阵眼”,是全局配置文件,有很多关于项目相关属性的配置;

为什么要使用maven来构建项目?

        以前写的代码,都是在idea中的main方法里直接点击运行即可,针对简单的程序还可以,但对于有多个模块,病区相互依赖的程序来说,使用maven,就方便了我们进行编译和打包操作;


二、引入Servlet依赖

        Servlet不是java标准库自带的,所以需要下载Servlet依赖;(maven的一个核心功能就是能自动管理依赖:把使用库中依赖的东西,自动从中央仓库中下载下来)

打开中央仓库搜索servlet:(如下图)

地址:Maven Repository: Search/Browse/Explore (mvnrepository.com)

选择第一个API:(如下图)

选择3.1.0版本(如下图):

 

 选择maven,复制里面的内容(如下图)

        返回idea,打开pom.xml,手动写下这个标签(如下图),把刚刚复制的内容粘贴到这个标签里

 

解释:

        这时候idea就会自动根据你刚刚粘贴进去的内容,去中央仓库下载依赖,依赖下载完成之前,这里是标红报错的,等待他下载好之后,就手动刷新一下(如下图);


三、构建目录结构

        根据Tomcat要求的目录,咱还需要添加点东西(如下图)

注意:一定要注意命名,严格按照下图格式!

 web.xml中需要写点东西,写的内容不用记,直接复制,这部分内容是固定的,Tomcat会识别他,所以不能没有;

这里给出代码(直接复制就可以):

<!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>
    <display-name>Archetype Created Web Application</display-name>
</web-app>

        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

这个是schema文件,描述了你的xml中都允许写哪些节点,结点间的层次关系,那些属性是合法的;

        作用:验证 + 补全;

        如果这里标红报错了,之影响以上作用,但是咱目前来说用不上,但是如果实在不限看到标红,可以alt + enter;

四、编写代码

        将代码放到java目录下(也可以创建一些package)如下图:

        将创建好的这个公开的类里继承HttpServlet;(这是刚才通过maven下载的servlet的jar包);

根据请求计算响应——写下doGet方法:(如下图)

 doGet方法是什么?

        doGet就表示,当Tomcat收到GET请求时,就会调用到此方法;

扩展:

        这里还有很多函数,写doGet函数,就表示使用GET方法,写下doPost函数,就会使用Post方...

HttpServletRequest req是什么?

        这是Tomcat的请求报文,将他解析成一个对象了;

HttpServletResponse resp 是什么?

        这是Tomcat构造的一个空的对象,就是根据请求所要计算的响应,resp相当于“输出型参数”,doGet就需要根据req 的数据 + 业务逻辑构造出一个完整的resp对象;最后Tomcat就把resp对象转化成Http响应报文;

接下来,还需要在此方法之上,加一段代码(如下图):

 解释:

        表示当GET请求并且url里的路径是/hello请求的时候,Tomcat才会调用到这里的doGet方法;所以我们在请求中写不同的路径,就会关联上不同的类,也就会执行不同的方法;

修改这个方法里的内容(以打印hello为例):解释都在注释里

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);注意这里自动生成的代码一定要删掉,否则一定会出问题,这是为了防止程序员忘记写对应的重写方法专门弄的一个保险
        System.out.println("hello");//在Tomcat这里打印日志
        resp.getWriter().write("hello");//给客户端返回hello
    }
}

解释:为什么一定要删掉 super.doGet(req, resp) 这段代码?

       这是为了防止程序员忘记写对应的重写方法专门弄的一个保险;

       当代码中有 super.doGet,然后你在写下计算的响应代码,而 super.doGet 中引用父类的方法已经有默认的响应(响应是用 resp.sendError,此方法将抛出illegalstateexception。使用此方法后,应将响应视为已提交;简而言之就是一个检查机制,检查你是否忘记写重写方法),你接着又写了一次响应,就相当于有两次响应,所以若不删除这段代码,你会得到了非法的状态异常。


五、打包程序

打包是干什么的?

        需要将缺失的依赖下载好,然后编译所有的.java文件,得到一堆class文件,再将.class压缩到一个压缩包中;

Servlet程序是怎么跑起来的?为什么要打包?

        以前所写的Java代码中,都包含main方法,这就相当于一个带发动机的火车车头,剩下的java代码就是车厢;在Servlet的代码中,Tomcat就是带发动机的火车车头,Servlet代码就是车厢,打包就是将写好的代码挂在车头后面~

具体做法:直接使用maven打包(如下图)

 双击后,结果如下:

 问题:

        虽然成功的打包出了jar包,但是tomcat不认识,因为tomcat是要求压缩包的格式为war包!

jar包和war包有什么区别?

        最主要的区别就是,war包会将整个webapp的目录都打包进去,包括web.xml,以及外来的一些静态html、css等;

解决办法:修改pom.xml,在其中写下如下代码:

 最后在点击一次打包,就可以观察在target中看到我们所需要的文件了(如下图)


六、部署程序

将war包拷贝到Tomcat的webapps中;

保存到(如下图目录)

最后运行你的Tomcat,就可以发现,你的war包会自动解压缩;


七、验证程序

        通过浏览器构造一个HTTP请求,访问Tomcat服务器;

可以观察到如下结果:

 这样就成功啦~



基于Smart Tomcat对Servlet进行部署

        实际上,对于以上的七步,还可以进行优化:第五第六步是可以“一键式”打包和部署,使用IDEA社区版,可以使用第三方的Smart Tomcat插件来完成;


第一步:下载Smart Tomcat插件


第二步:进行相关配置

 

注意:

        Context path是网络路径,这相当于将webapp映射成了 Context path;


第三步:运行配置

        一键式的完成打包部署;(实际上,就是让idea直接调用tomcat,并且加载写的servlet程序);(如下图)

 第四步:确认部署是否成功

 注意:

        这里标红不要害怕,不是报错,Tomcat的日志信息就是这样的颜色,看到startup in xxxms就表示成功了;


第五步:验证程序

  


Tomcat的运行方式

        1.直接在startup里运行,手动拷贝war包;

        2.Smart Tomcat直接通过java代码,调用tomcat的jar包运行,不需要调用的时候指定tomcat加载哪个webapp;


悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;