• Servlet(一)


     学习本节内容之前,需要掌握之前博主博文中的HTTP,Tomcat等等。

    目录

    1.关于Maven

         1.1什么是Maven

         1.2Maven的下载安装

         1.3基于IDEA的使用方式

              1.3.1创建项目

              1.3.2管理依赖

    2.七步骤完成一个servlet程序

         2.1创建一个Maven项目

         2.2引入依赖

         2.3创建目录结构

         2.4编写servlet代码

         2.5打包

         2.6部署

         2.7验证程序

    3.利用smart Tomcat 一键完成打包部署并重启Tomcat

         3.1安装smart Tomcat

         3.2如何进行一键操作

    4.常见错误汇总

         4.1“404”

         4.2“405”

         4.3“500”

         4.4“空白网页”

         4.5“无法访问此网站”

    5.servlet的运行原理


    1.关于Maven

         1.1什么是Maven

    maven是Java中非常知名的“工程管理工具”/“构建工具”。它的核心功能主要有以下三个方面:

    ①管理依赖:

    这里的依赖是指的是在进行A操作之前,需要先进行B操作。依赖有的时候是非常复杂,需要嵌套的。在我们平时写代码的时候,也是有很多依赖的。比如经常会依赖标准库,也会依赖一些第三方库,引入一些其他的jar包,前面写jdbc代码的,当时就下载了一个mysql驱动包。写代码的时候也会有关系很复杂的依赖,如果全要靠我们手动去解决的话,那是相当麻烦的,我们还需要研究清楚究竟是怎么进行关联的。而为了解决上述的依赖问题,很多编程语言都引入了自己的包管理工具(即:自动解决了依赖)

    基本上各种语言都有,java:Maven gradle;python:pip;js:npm等等。

    举个例子:我们在睡觉前是需要先洗漱的,而在这个洗漱里又嵌套了很多其它的操作,比如洗澡,刷牙,洗脸等。

    ②构建/编译:

    是指上也是在调用jdk

    ③打包:

    是指把java代码构造成jar包,或者war包。jar包就是一个特殊的压缩包,类似于rar,里面就是把各种.class文件给放到一起了。

         1.2Maven的下载安装

    我们直接基于IDEA内部现成的Maven来操作哈

         1.3基于IDEA的使用方式

              1.3.1创建项目

    ①选择Maven创建项目:

    很多大佬实现了很多的第三方库,这些第三方库就是统一把他们放到中央仓库里面的,方便用户去查找。

    ②创建好项目后的目录结构:

     ③如何使用Maven项目:

    最常用的就是如上图的打包操作,但是不仅仅是如此,图中罗列的所有都可以实现的。 

              1.3.2管理依赖

    ①什么是Maven中的管理依赖:

    这里的管理依赖是指使用Maven帮我们下载安装第三方库。

    ②以mysql为例实现管理依赖:

    (1)去中央仓库上找到mysql的驱动包。(下面这个是中央仓库的地址)
    https://mvnrepository.com/ https://mvnrepository.com/

     (2)将上述红框内容复制粘贴到pom.xml中

    图中的红色部分表示暂时还未下载安装,会自己自动进行下载,首次下载可能时间较长,大家需要耐心等待。 

    2.七步骤完成一个servlet程序

         2.1创建一个Maven项目

    如上面所示,已经创建了一个Maven项目

         2.2引入依赖

    需要在代码中引入servlet api,这个api不是内置的,而是第三方Tomcat提供的。当然我们仍然可以借助Maven直接引入。

    ①我们仍然需要在中央仓库里找到servlet的API。

     ②将其内容复制到pom.xml中

    此时没有红色表示均是已经下载完成了的。

    注意!!!

    JDK,Tomcat,servlet的版本最好是要配套的。若是没有配套的话,也不是说完全用不了,可能会存在少数的bug。所以建议是一定得配套。而在这里,我用的版本是jdk8,Tomcat8.5,servlet3.1。 

         2.3创建目录结构

    虽然Maven帮我们创建了一些目录,但是还是不够,不足以支撑我们写一个servlet项目,所以还需要我们手动再创建一些目录和文件出来。

    ①在src/main的路径下创建一个webapp目录,注意此处是单数。

    ②再在webapp目录下创建一个子目录WEB-INF 

    ③在②的基础上在 WEB-INF 目录下创建一个文件web.xml

     并在xml中手动进行如下配置(注意:此处只需要复制粘贴,不需要记住)

    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>

         2.4编写servlet代码

    编写代码是在java中创建类实现的。

    ①各方面注意事项:

    在网络程序中,就涉及到一对相当重要的概念:
    请求:request
    响应:response

     doGet方法要做的工作,就是根据请求,计算生成响应。

    ②一个服务器的工作流程,可以分为三个典型的步骤:
    (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。

    ④综合代码如下:

    1. import javax.servlet.ServletException;
    2. import javax.servlet.annotation.WebServlet;
    3. import javax.servlet.http.HttpServlet;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import java.io.IOException;
    7. @WebServlet("/hello")
    8. public class Helloservelt extends HttpServlet {//能够成功继承这个类,说明之前引入的servlet是没有问题的
    9. @Override
    10. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    11. //不能调用父类的doGet方法
    12. //super.doGet(req, resp);
    13. System.out.println("Hello world");//服务器控制台打印
    14. //在页面上打印,把这个字符串放到http响应的body里面,浏览器就会把body的内容显示在页面上了
    15. //这里为了表示Tomcat的页面所呈现的是动态的,不是静态的html,所以用了System.currentTimeMillis()来展示
    16. resp.getWriter().write("这是一个Hello world" + System.currentTimeMillis());
    17. }
    18. }

         2.5打包

    我们仔细观察,可以发现上面我们写的代码,是没有main方法的,也就是不能够运行,因此我们需要把当前的代码打包,然后部署到Tomcat中,再通过Tomcat来进行调用。

    ①找到打包所在位置:

    ②进行相关准备操作:修改pom.xml

    jar和war都是java发布程序的压缩包格式。war算是给Tomcat专门搞的,这里不光会包含一些.class,还可以包含配置文件,以及依赖的第三方jar,还有html,css,js......

    ③判断打包完成:

     并且我们可以在目录这边看到

         2.6部署

    把war包拷贝到Tomcat的webapps目录下

    然后打开Tomcat 

         2.7验证程序

    ①直接输入对应的网址,来看是否正确

    ②路径的解释:

    ③注意!!!每当我们刷新页面时,就会得到不同的数值,这是因为通过java代码生成的内容是可变的,而HTML中的内容是静态的,是不可变的。

    3.利用smart Tomcat 一键完成打包部署并重启Tomcat

    对于上述的七大步骤,我们会发现,每次修改代码的时候,都需要重新打包,部署。这个样子是相当麻烦的,所以我们尝试通过IDEA上的插件,直接把Tomcat给集成进来了,从而做到“一键式”完成打包部署。但是我们需要哦注意的是!!!Tomcat和IDEA是两个独立的程序,Tomcat并不是IDEA的一部分,不要搞混。 

     而这个连接器就是smart Tomcat

         3.1安装smart Tomcat

    ①安装:

    ②配置:(只有第一次需要进行配置,后续不需要) 

    然后我们就会在首页右上角看到这个

    直接按这个按钮就可以进行一键自动打包部署。 

         3.2如何进行一键操作

    按按钮后xianshi

    此时就相当于重新启动了Tomcat,就不需要去手动了。这里是红色,但是并不是错误的意思,大家这里需要稍微注意一下。 

    4.常见错误汇总

         4.1“404”

    表示你要访问的资源在服务器上不在

    主要存在以下两个问题

    ①请求资源路径写得不对

    ②路径虽对,但是服务器没有正确把资源加载起来

    ③web.xml写错了,只有当目录中存在了web.xml,并且里面的内容也是正确的,Tomcat才能正确加载这个webapp;

    演示:(这里以情况①进行演示)

    这里的话就是第一路径错误了,我们前面在这里设置正确的第一路径是/untitled20,而这里是untitled2,所以第一路径出现了错误。 

         4.2“405

    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

    示例:

    ②没有注释掉父类方法

    结果:

         4.3“500”

    500也是一个非常高频的错误。

    5开头一般是指服务器出现异常,常见的就是服务器代码出现了问题,异常抛到了Tomcat这里。不过很好解决的是,代码出现异常就会被catch捕捉到,异常就会沿着栈向上传递,最后我们可以在页面上看到到底是什么异常。

    示例:

     这样我们就能够很快找到问题所在。因此出现这种问题,相对而言是很容易解决的。

         4.4“空白网页”

    空白页面就是什么也没有,就是重写的方法里面并没有做任何处理,响应里面没有任何东西,就会出现空白页面,这个时候我们最好检查一下重写的方法

         4.5“无法访问此网站”

    这种问题一般就是两种情况,第一种就是网路问题(即TCP上的层次不通)

    第二种就是Tomcat没有被正确启动,最常见的就是Tomcat的端口被占用了。出现这两种情况,就会出现以下页面

    5.servlet的运行原理

    Servlet属于上层建筑(应用层),而下面的传输层,网络层,数据链路层,物理层…都是属于经济基础,他们之间都有着密不可分的关系。

     Tomcat其实是一个应用程序,它是运行在用户态的普通进程,实质上也是一个java进程。用户通过写代码来计算响应请求,而后通过Servlet和Tomcat来进行交互。Tomcat进一步和浏览器之间的网络传输,仍然是走的之间在网络原理中所学习的,也就是封装和分用

    整体的过程图显示如下:

     当然,浏览器在与服务器的交互过程中,也会出现涉及到TCP的三次握手这些,等等。 

    本期就介绍到这里,下期将主要为大家介绍servlet的一些核心API,感谢观看。 

  • 相关阅读:
    upload-labs靶场第17关设计PHP函数解析
    嵌入式算法——傅里叶变换算法
    mysql是如何查询数据的?
    Spring Boot要如何学习?【云驻共创】
    C#毕业设计——基于C#+asp.net+sqlserver的网络商店设计与实现(毕业论文+程序源码)——网络商店
    1、Emmet语法
    .NET中测量多线程基准性能
    公开透明,是OKR实践中的第一个改变
    【CSS】画个三角形或圆形或环
    Qt源码解读(一)Windows消息循环和事件循环机制
  • 原文地址:https://blog.csdn.net/weixin_58850105/article/details/126760285