• 实现动态页面的技术Servlet


    ???Hello,我是,为了能够更好的学习Servlet,我给大家整理了一些前置知识,方便更好的理解Servlet:

    在这里插入图片描述

    目录

    ??一.Servlet

    首先想要学懂Servlet的话,就必须要做到理解HTTP协议,这里的API是和HTTP协议是关联十分紧密的!!而想要学习Servlet就需要学习一些前置知识:前面学习的HTTP和Tomcat都是Servlet的前置知识,另外maven也是一个非常重要的工具??

    ??1.maven

    ?? 1.1 创建maven项目

    maven是一个Java世界中,非常知名的"工程管理工具"/“构建工具”(核心功能:管理依赖(进行A操作要先进行B操作,A需要依赖B,在maven里面就可以直接引入依赖了),构建/编译(也是调用jdk),打包 (maven能把这些操作穿起来,不需要再分开编译打包了));那么如何使用maven呢,我这里就搭配idea来使用了
    在这里插入图片描述
    idea里面就可以直接可以选择maven的方式创建项目了
    在这里插入图片描述
    而下面的这些东西就是一些参数,将这个项目发布到maven仓库的话,这些就是这个程序的身份标识,而目前这些可以直接是默认的,不需要修改,名字改一下就可以了,简单解释一下下面的东西:GroupID表示你所在的公司/组织,ArtifactId表示当前的项目名字,Version表示当前项目的版本;完成创建之后一个maven项目就创建成功了!

    ?? 1.2 maven的目录结构

    创建号一个maven项目之后,就会有这样的目录(介绍一些具体的结构):
    在这里插入图片描述

    • src/main/java:这个目录就可以放我们写的javajava代码
    • src/main/resources:这个目录可以用来放一些依赖的资源
    • src/test/java:这个目录用来放单元测试的代码(这个暂时不涉及)
    • pom.xml:这个是maven项目的核心配置文件(这个就可以表示当前maven项目是一个什么样的项目,依赖的文件,一切相关的配置都放置在这个xml里面),文件是以xml格式组织的

    ?? 1.3 如何使用maven项目

    在这里插入图片描述
    ①操作:maven项目里面可以有很多操作,而使用最多的就是package,打包所有的文件(而执行了package就会执行上面的所有操作,完成之后就会打包成一个war包)
    ②引入依赖:先在中央仓库里面找到所需要的驱动包,然后把maven标签也里面的xml配置复制下来,粘贴到pom.xml里面就行了,记得版本要和Tomcat的版本匹配
    在这里插入图片描述

        <dependencies>
            <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注意:在pom.xml里面粘贴这些需要使用dependencies标签包起来,dependencies就是表示多个依赖,里面可以放不止一组依赖,引入之后,记得刷新一下,不然可能下载不成功,不能使用,就会报错!!!
    在这里插入图片描述
    引入成功就会有这样的库~
    在这里插入图片描述

    ??2.完成一个Servlet程序

    Servlet是Tomcat的一组API,下面具体使用一下:

    ?? 2.1 创建一个maven项目

    这个上面已经创建过了,就不再说如何创建了

    ?? 2.2 引入依赖

    需要什么api,就从maven中央仓库中,找到对应的xml配置,放到dependencies标签中就可以了,记得刷新下载!

    ?? 2.3 创建目录结构

    虽然maven项目已经有一些目录了,但是仍然不足以支撑完成一个Servlet项目,因此就需要手动的创建一些目录和文件出来,这样的目录结构也是约定好的,默这样创建好了:
    在这里插入图片描述
    然后这个xml文件里面也要放一些默认的配置:

    <!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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这些也不需要手动敲,直接复制粘贴这个就可以了

    ?? 2.4 完成Servlet代码

    完成了上述步骤之后就可以来编写代码了,在java里面创建个类就看有写代码了:

    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 HelloServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //req表示请求,resp表示响应
            //不能调用父类的doGet方法
            //super.doGet(req, resp);
            //这个是让服务器在控制台打印
            System.out.println("Hello world");
            //在页面上打印,把这个字符串放到http响应的body里面,浏览器就会把body的内容显示在页面上了
            resp.getWriter().write("Hello world" + System.currentTimeMillis());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 这里需要继承HttpServlet类,另外如果使用的方法是get方法的话就需要重写doGet方法(两个参数一个是请求,一个是响应),记住不要使用父类的doGet方法,父类的doGet方法什么都没做,直接返回了405,就找不到这个方法了,因此这里就需要我们自己来根据请求计算生成的响应了,这也就是重写doGet方法的所需要做的工作了,doGet方法就会在Tomcat服务器收到HTTP GET请求的时候被Tomcat调用(就是一个回调函数);
    • 另外一个服务器的基本工作流程就是:①接收请求并解析,②根据请求计算响应③构造响应数据并返回给客户端;而Tomcat已经将一三步做好了,这里就只需要手动完成第二步的工作了,也就是doGet这个方法,另外doPost等一系列其他的方法都是有的!!
    • resp.getWriter().write(“Hello world” + System.currentTimeMillis()),就是将后面的内容写到响应的body中了,getWriter就是返回了一个Writer对象(字符流对象),而后面的write就是写数据的方法;
    • 最后记得@WebServlet(“/hello”),这个注解就会把当前的这个HelloServlet类和HTTP请求中的URL里面路径带有/hello这样的请求给关联起来了,具体解释一下:Tomcat可能会收到很多很多的请求,例如/123,/hh,/www,/hello…而这里的代码只是其中一个请求,也只处理路径中带有/hello这样的请求,只有/hello才会让Tomcat调用这个类!!!而且请求是什么方法,就会调用什么样的重写方法~

    ?? 2.5 打包

    这里是没有main方法直接我们执行的,因此就需要将我们写的代码打包起来部署到Tomcat,然后Tomcat就会在合适的时候调用这个代码,使用上面说的package就可以进行打包了,但是打包之前一定要设置打包的类型和名字方便后面查询

        <!-- 打包的时候一定要修改打包类型和名字    -->
        <!-- 打的包是一个 war 包. 默认是 jar 包   -->
        <packaging>war</packaging>
        <!-- 指定打出的 war 包名字 -->
        <build>
            <finalName>helloS</finalName>
        </build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    后面访问页面的时候输入的url为http://127.0.0.1:8080/helloS/hello就可以了,这里设置的finalName是Context Path就是端口号后面的地址,是第一级路径,而后面hello是servlet Path(就是@WebServlet(“/hello”)里面的地址,是第二级路径;
    在这里插入图片描述
    在这里插入图片描述
    出现这样的情况就打包成功了

    ?? 2.6 部署

    将打包好的war复制到Tomcat的webapps目录里面就可以了

    ?? 2.7 验证

    启动Tomcat,验证是否成功,启动了Tomcat之后就可以通过http://127.0.0.1:8080/helloS/hello这样的url来访问了,这两级目录就如同上面介绍的地址~
    在这里插入图片描述

    ?? 2.8 补充优化

    一个新的项目创建好,前三步只需要第一次创建,而后续就不需要做出改变了,而后面的操作,如果修改了代码,就需要重新部署打包,这还是有点麻烦的,因此整理可以借助一个idea的插件smart Tomcat将5-6步合并起来,(直接将Tomcat集成进来,做到"一键式"完成打包部署),就很方便了,需要记住的是Tomcat和idea不是一个东西,只是这里集成起来了,但是实质上Tomcat和idea不是同一个东西~
    在这里插入图片描述
    在这里插入图片描述
    注意需要修改这三个地方,Name随便写,Tomcat Server需要找到Tomcat的安装目录,Context Path就需要记住,这是访问服务器的url的第一级地址需要匹配,使用了Smart Tomcat之后第一级路径就不再是压缩包的名字了,而是自己指定的Context Path!!
    在这里插入图片描述
    然后点击三角号就可以直接完成5-6步操作了

    在这里插入图片描述

    ?? 二.常见的出错

    ?? 1. 出现404

    在这里插入图片描述

    出现404无非就是访问的资源在服务器上不存在,主要是以下问题:

    • 第一级路径没有写,只写了第二级路径,或者第二级路径没有写,只写了第一级路径;
    • 请求的路径和服务器设置的路径不匹配;
    • web.xml写错了(里面没写东西,或者内容写错了),只有当目录中存在了web.xml,并且里面的内容也是正确的,Tomcat才能正确加载这个webapp(页面);

    ?? 2. 出现405

    在这里插入图片描述

    出现405就是方法不被允许,重写的方法出现问题了:

    • 没有重写doGet/doPost方法
    • 重写的方法不匹配,需要处理的是get方法,但是在代码中重写了其他方法,
      需要的是Post方法,但重写了其他方法,这里简单介绍一些常见的GET请求:
      ① 在地址栏里面直接输入url
      ② 通过a标签跳转
      ③ 通过img/link/script…
      ⑥ 通过form表单,方法指定为GET
      ⑤ 通过ajax,方法指定为GET
      常见的POST请求:
      ① 通过form表单,方法指定为POST
      ② 通过ajax,方法指定为POST
    • 没有删除调用父类的方法

    在这里插入图片描述

    ?? 3. 出现500

    在这里插入图片描述
    出现500就表示服务器里面出问题了,一般500就是意味着服务器代码出问题了,代码里面的异常没有处理,抛到Tomcat这了(在代码里面抛出异常了,如果有catch可以捕获到,但是没有catch的话,异常就会按着调用栈向上传递),然后就出现问题了,但是出现500是非常好处理的,下面的调用栈就会直接告诉我们错误的准确位置,直接根据提示去找就可以了!!!

    ?? 4. 出现"空白页面"

    空白页面就是啥都没有,就是重写的方法里面并没有做任何处理,响应里面没有任何东西,就会出现空白页面,检查一下重写的方法就好了~

    ?? 5. 出现无访此网站

    在这里插入图片描述
    无法访问一般就是Tomcat启动失败了(@WebServlet(“/hello”)没写"/"就会启动失败),或者根本没有启动,需要去看一下这些细节问题!!!
    在这里插入图片描述

    ?? 三.Servlet的运行原理

    在这里插入图片描述

    Servlet属于上层建筑(应用层),而下面的传输层,网络层,数据链路层,物理层…都是属于经济基础,这些都是紧密相连的
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    虽然我们在写代码的时候,是关注不到这些底层的网络通信工作的,但是在调试/定位问题的时候,这些还是非常有必要的~Servlet的具体运行原理就介绍到这了,后面再详细介绍一些Servlet的相关API!

    在这里插入图片描述

  • 相关阅读:
    港澳通行证识别易语言代码
    猿创征文|时间序列分析算法之平稳时间序列预测算法和自回归模型(AR)详解+Python代码实现
    深入源码!详解MultipartFile
    状态设计模式完成商品的创建状态之间的流转
    基于Django + Web + MySQL的智慧校园系统
    【FPGA】十进制计数器 | 实现 4-bit 2421 十进制计数器 | 有限状态机(FSM)
    spring-cloud-alibaba-dubbo-issues1805修复
    网络安全(黑客)自学
    【微服务】微服务集成Rocketmq,一篇文章就够了
    Jmeter接口自动化(九)函数 下
  • 原文地址:https://blog.csdn.net/m0_55613022/article/details/125402056