• 通过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会识别他,所以不能没有;

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

    1. web-app PUBLIC
    2. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    3. "http://java.sun.com/dtd/web-app_2_3.dtd" >
    4. <web-app>
    5. <display-name>Archetype Created Web Applicationdisplay-name>
    6. 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为例):解释都在注释里

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

    解释:为什么一定要删掉 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;


  • 相关阅读:
    青少年ADHD双通路模型的神经相关性
    防御安全第四次作业
    服务器常见问题排查(一)——cpu占用高、上下文频繁切换、频繁GC
    k8s.3-kubeadm部署单Master节点kubernetes集群 1.21
    NET 使用自带 DI 批量注入服务(Service)和 后台服务(BackgroundService)
    【Flutter Widget】AppBar 和 PopupMenu
    【多路IO复用】select
    【python】anaconda使用指南
    中科院自动化所:基于关系图深度强化学习的机器人多目标包围问题新算法
    如何解决机器视觉高速图像处理软件的加密需求?
  • 原文地址:https://blog.csdn.net/CYK_byte/article/details/127915171