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

古城微笑少年丶 2024-03-31 08:16 95阅读 0赞

目录

基于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项目变化比较大);(如下图)

c9df2948db2c45de823c55b7c2c26ada.png

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

3daa1173bf5d4b1ea272b911402a42b9.png

解释:

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

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

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


二、引入Servlet依赖

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

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

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

8821071b6ad1440795c1c76029df4012.png

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

d42f00198e3b42ad979bbcb2f13210e8.png

选择3.1.0版本(如下图):

16eff4fa22ed41b8a861e42aa4af314c.png

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

8ea52c28d6664d38b5ada5aa9d51b3cc.png

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

47ad5a6a3f3b40cbbc1adce24fe5f6dd.png

48aa4f7b0bee4340b11545ad84f3df0a.png

解释:

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

f8d51ab2f52d4be6aa1350ce8fa365e4.png


三、构建目录结构

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

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

626c681643f445d7991cf955584c311b.png

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

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

  1. <!DOCTYPE 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 Application</display-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)如下图:

406e0ebf12344af3a48fbd0033a9d85e.png

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

9b7e0466606c438ca9dcefba976c99c5.png

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

25105d69d886462186fddbecc0d1110f.png

doGet方法是什么?

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

扩展:

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

HttpServletRequest req是什么?

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

HttpServletResponse resp 是什么?

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

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

1a67ad177c114c7081972f13a657463a.png

解释:

表示当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打包(如下图)

27d3d18583ec442fbb8c3283ad3aee06.png

双击后,结果如下:

82c7cc5f91c94e21a79bddfeebe57e7c.png

问题:

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

jar包和war包有什么区别?

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

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

71a1f013210744db8337b232131e1549.png

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

972d3f6ef7c54a11afb62f3915098ee3.png


六、部署程序

将war包拷贝到Tomcat的webapps中;

8b9cbcc26dc34f618b2c1218a9d466f8.png

保存到(如下图目录)

104560a78a734a1ab43549b3ec9d4ae1.png

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


七、验证程序

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

可以观察到如下结果:

7a1a09a72c03440b846e5875a169fe02.png

这样就成功啦~



基于Smart Tomcat对Servlet进行部署

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


第一步:下载Smart Tomcat插件

08270ffadff24bc5abbc526c64799be3.png


第二步:进行相关配置

f04ac091f78740f0afb98260ecd03cc4.png

4924fddf0b0d483fb2a02b2c4db4b0fa.png

注意:

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


第三步:运行配置

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

2cfc2e15df8a4f0297e951c09d6bd94a.png

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

a6cc6e2eb0424f9dbc8dac0dc245a29f.png

注意:

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


第五步:验证程序

46660206a3464dccb2d270546c56fe89.png


Tomcat的运行方式

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

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


257a323d056e4deeb7c9f1f46e495dbb.gif

发表评论

表情:
评论列表 (有 0 条评论,95人围观)

还没有评论,来说两句吧...

相关阅读