学习本节内容之前,需要掌握之前博主博文中的HTTP,Tomcat等等。
目录
3.利用smart Tomcat 一键完成打包部署并重启Tomcat
maven是Java中非常知名的“工程管理工具”/“构建工具”。它的核心功能主要有以下三个方面:
①管理依赖:
这里的依赖是指的是在进行A操作之前,需要先进行B操作。依赖有的时候是非常复杂,需要嵌套的。在我们平时写代码的时候,也是有很多依赖的。比如经常会依赖标准库,也会依赖一些第三方库,引入一些其他的jar包,前面写jdbc代码的,当时就下载了一个mysql驱动包。写代码的时候也会有关系很复杂的依赖,如果全要靠我们手动去解决的话,那是相当麻烦的,我们还需要研究清楚究竟是怎么进行关联的。而为了解决上述的依赖问题,很多编程语言都引入了自己的包管理工具(即:自动解决了依赖)
基本上各种语言都有,java:Maven gradle;python:pip;js:npm等等。
举个例子:我们在睡觉前是需要先洗漱的,而在这个洗漱里又嵌套了很多其它的操作,比如洗澡,刷牙,洗脸等。
②构建/编译:
是指上也是在调用jdk
③打包:
是指把java代码构造成jar包,或者war包。jar包就是一个特殊的压缩包,类似于rar,里面就是把各种.class文件给放到一起了。
我们直接基于IDEA内部现成的Maven来操作哈
①选择Maven创建项目:
很多大佬实现了很多的第三方库,这些第三方库就是统一把他们放到中央仓库里面的,方便用户去查找。
②创建好项目后的目录结构:
③如何使用Maven项目:
最常用的就是如上图的打包操作,但是不仅仅是如此,图中罗列的所有都可以实现的。
①什么是Maven中的管理依赖:
这里的管理依赖是指使用Maven帮我们下载安装第三方库。
②以mysql为例实现管理依赖:
(1)去中央仓库上找到mysql的驱动包。(下面这个是中央仓库的地址)
https://mvnrepository.com/ https://mvnrepository.com/(2)将上述红框内容复制粘贴到pom.xml中
图中的红色部分表示暂时还未下载安装,会自己自动进行下载,首次下载可能时间较长,大家需要耐心等待。
如上面所示,已经创建了一个Maven项目
需要在代码中引入servlet api,这个api不是内置的,而是第三方Tomcat提供的。当然我们仍然可以借助Maven直接引入。
①我们仍然需要在中央仓库里找到servlet的API。
②将其内容复制到pom.xml中
此时没有红色表示均是已经下载完成了的。
注意!!!
JDK,Tomcat,servlet的版本最好是要配套的。若是没有配套的话,也不是说完全用不了,可能会存在少数的bug。所以建议是一定得配套。而在这里,我用的版本是jdk8,Tomcat8.5,servlet3.1。
虽然Maven帮我们创建了一些目录,但是还是不够,不足以支撑我们写一个servlet项目,所以还需要我们手动再创建一些目录和文件出来。
①在src/main的路径下创建一个webapp目录,注意此处是单数。
②再在webapp目录下创建一个子目录WEB-INF
③在②的基础上在 WEB-INF 目录下创建一个文件web.xml
并在xml中手动进行如下配置(注意:此处只需要复制粘贴,不需要记住)
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 Applicationdisplay-name> web-app>
编写代码是在java中创建类实现的。
①各方面注意事项:
在网络程序中,就涉及到一对相当重要的概念:
请求:request
响应:responsedoGet方法要做的工作,就是根据请求,计算生成响应。
②一个服务器的工作流程,可以分为三个典型的步骤:
(1)接收请求并解析
(2)根据请求计算响应
(3)构造响应数据,并返回给客户端
这里面,(1)(3)这两步,Tomcat已经帮我们做好了。因此我们只需要实现(2),也就是doGet要实现的内容。举个通俗的例子:
我去一个饭店点餐,我点了一份蛋炒饭,那在商家接到我的单之后,就会给后厨,其中一个人会去装一碗饭,同时,另一个打鸡蛋,另一个人开始准备炒,这三个行为可以看做三个线程的并发操作,最后炒好了,商家又端给我。这三个人的工作就相当于在请求计算响应的过程。
③对下面的解释
@WebServlet("/hello")
为什么要/hello?这是因为这一步就相当于把HelloServlet这个类,和HTTP请求中的URL中带有/hello这样的请求,给关联起来了。对于Tomcat而言,会有很多的请求,而我们当前需要调用的只是这一个,/hello =》http://123.123.123:8080/hello。这个样子才会让Tomcat来调用HelloServlet这个类,来进行处理。/hello是和HelloServlet这个类关联起来了,但是要想执行到doGet,还得保证方法也是GET方法。如果是POST/hello,仍然无法执行到doGet。
④综合代码如下:
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/hello") public class Helloservelt extends HttpServlet {//能够成功继承这个类,说明之前引入的servlet是没有问题的 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //不能调用父类的doGet方法 //super.doGet(req, resp); System.out.println("Hello world");//服务器控制台打印 //在页面上打印,把这个字符串放到http响应的body里面,浏览器就会把body的内容显示在页面上了 //这里为了表示Tomcat的页面所呈现的是动态的,不是静态的html,所以用了System.currentTimeMillis()来展示 resp.getWriter().write("这是一个Hello world" + System.currentTimeMillis()); } }
我们仔细观察,可以发现上面我们写的代码,是没有main方法的,也就是不能够运行,因此我们需要把当前的代码打包,然后部署到Tomcat中,再通过Tomcat来进行调用。
①找到打包所在位置:
②进行相关准备操作:修改pom.xml
jar和war都是java发布程序的压缩包格式。war算是给Tomcat专门搞的,这里不光会包含一些.class,还可以包含配置文件,以及依赖的第三方jar,还有html,css,js......
③判断打包完成:
并且我们可以在目录这边看到
把war包拷贝到Tomcat的webapps目录下
然后打开Tomcat
①直接输入对应的网址,来看是否正确
②路径的解释:
③注意!!!每当我们刷新页面时,就会得到不同的数值,这是因为通过java代码生成的内容是可变的,而HTML中的内容是静态的,是不可变的。
对于上述的七大步骤,我们会发现,每次修改代码的时候,都需要重新打包,部署。这个样子是相当麻烦的,所以我们尝试通过IDEA上的插件,直接把Tomcat给集成进来了,从而做到“一键式”完成打包部署。但是我们需要哦注意的是!!!Tomcat和IDEA是两个独立的程序,Tomcat并不是IDEA的一部分,不要搞混。
而这个连接器就是smart Tomcat
①安装:
②配置:(只有第一次需要进行配置,后续不需要)
然后我们就会在首页右上角看到这个
直接按这个按钮就可以进行一键自动打包部署。
按按钮后xianshi
此时就相当于重新启动了Tomcat,就不需要去手动了。这里是红色,但是并不是错误的意思,大家这里需要稍微注意一下。
表示你要访问的资源在服务器上不在
主要存在以下两个问题
①请求资源路径写得不对
②路径虽对,但是服务器没有正确把资源加载起来
③web.xml写错了,只有当目录中存在了web.xml,并且里面的内容也是正确的,Tomcat才能正确加载这个webapp;
演示:(这里以情况①进行演示)
这里的话就是第一路径错误了,我们前面在这里设置正确的第一路径是/untitled20,而这里是untitled2,所以第一路径出现了错误。
405Method Not Allowed(这里的方法指的是HTTP的方法)
①重写方法出现问题,不对应导致的405
什么时候浏览器发送的是GET请求?
(1)直接在地址栏里,输入URL
(2)通过a标签进行跳转
(3)通过img/link/script...
(4)通过form表单,method指定为GET
(5)通过ajax,type指定为GET
什么时候浏览器发送的是POST请求?
(1)通过form表单,method指定为POST
(2)通过ajax,type指定为POST示例:
②没有注释掉父类方法
结果:
500也是一个非常高频的错误。
5开头一般是指服务器出现异常,常见的就是服务器代码出现了问题,异常抛到了Tomcat这里。不过很好解决的是,代码出现异常就会被catch捕捉到,异常就会沿着栈向上传递,最后我们可以在页面上看到到底是什么异常。
示例:
这样我们就能够很快找到问题所在。因此出现这种问题,相对而言是很容易解决的。
空白页面就是什么也没有,就是重写的方法里面并没有做任何处理,响应里面没有任何东西,就会出现空白页面,这个时候我们最好检查一下重写的方法
这种问题一般就是两种情况,第一种就是网路问题(即TCP上的层次不通)
第二种就是Tomcat没有被正确启动,最常见的就是Tomcat的端口被占用了。出现这两种情况,就会出现以下页面
Servlet属于上层建筑(应用层),而下面的传输层,网络层,数据链路层,物理层…都是属于经济基础,他们之间都有着密不可分的关系。
Tomcat其实是一个应用程序,它是运行在用户态的普通进程,实质上也是一个java进程。用户通过写代码来计算响应请求,而后通过Servlet和Tomcat来进行交互。Tomcat进一步和浏览器之间的网络传输,仍然是走的之间在网络原理中所学习的,也就是封装和分用
整体的过程图显示如下:
当然,浏览器在与服务器的交互过程中,也会出现涉及到TCP的三次握手这些,等等。
本期就介绍到这里,下期将主要为大家介绍servlet的一些核心API,感谢观看。