• Servlet的基本使用


    目录

    一、Servlet是什么

    二、Servlet的基本使用

    1、创建项目

    2、引入依赖

    3、创建目录

    4、编写代码

    5、打包程序

    6、部署程序

    7、验证程序

    三、优化部署方式

    1、安装Smart Tomcat

    2、使用Smart Tomcat

    四、使用Servlet时常见的错误

    1、404 

    2、405

    3、500

    4、无法访问页面

    5、出现空白页面

    一、Servlet是什么

    Servlet是Tomcat提供给Java程序猿的一组API,用来帮助程序猿简单高效的开发webapp,构建动态页面

    静态页面:内容始终固定的页面,即使访问用户不同/访问时间不同/输入的参数不同,页面的内容也不会发生变化,例如Tomcat的欢迎页面:

    动态页面:和静态页面相对的页面,当访问的用户不同/访问的时间不同/输入的参数不同时,页面的内容会发生变化,例如B站的主页:

    二、Servlet的基本使用

    使用Servlet写一个简单的“hello world”代码需要分为以下七个步骤:

    (本文以Idea2021.3.2版本为例,新版的Idea可能有所不同)

    1、创建项目

    (1) 打开Idea创建一个Maven项目:

    (2) 选择项目要存放的目录:

    (3) 项目创建成功的样子:

    Maven是Idea内置的一个构建工具,可以用来编译代码、打包程序、管理依赖…… 

    2、引入依赖

    Servlet并不是Java标准库自带的,我们需要在刚才创建的项目中生成的pom.xml文件中引入Servlet依赖的jar包。

    (1) 在Java中央仓库:Maven Repository: servlet (mvnrepository.com)搜索servlet,选择第一个结果:

    (2) 选择3.1.0版本

    Servlet的版本要和Tomcat的版本匹配,如果Tomcat是8.5版本,那么就需要使用Servlet3.1.0版本。

    查询版本对应关系:Apache Tomcat® - Which Version Do I Want?

    (3) 在pom.xml文件中创建一个标签:

     (4) 把中央仓库的Maven里的内容复制到标签中: 

    修改后的pom.xml文件:

    注意:如果是第一次使用maven,那么这里面的部分代码会变成红色的,maven会根据代码的内容,自动下载项目依赖的jar包到本地,下载完成后刷新一下就好了。

    如果下载好之后代码还是标红,那么就需要根据报错的信息在网上搜索解决的方案。

    3、创建目录

    当项目创建好之后,Idea会自动生成一些目录:

    其中:

    src:表示源代码所在的目录;

    main/java:表示业务代码的根目录,后续创建的.java文件就放在这个目录中;

    main/resources:表示项目的一些资源文件所在的目录;

    test/java:表示测试代码的根目录;

    pom.xml:表示项目中的“阵眼”,全局配置文件,存放项目相关的配置属性。

    但这些目录还不够,还需要创建一个符合Tomcat要求的目录结构:

    (1) 在main目录下,创建一个webapp目录:

    (2) 在webapp目录下,创建一个WEB-INF目录:

    (3) 在WEB-INF目录下,创建一个web.xml文件:

    注意:不要把文件名写错,Tomcat要识别web.xml这个文件。

    (4) 编写web.xml

    往web.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>

    4、编写代码

    (1) 在main/java目录下创建一个类,并继承HttpServlet类:

    HttpServlet类来自于刚才通过maven下载的Servlet的jar包,如果这里的HttpServlet类标红,手动刷新一下就好了~ 

    (2) 重写父类的doGet方法:

    req对象是HTTP请求报文,被Tomcat解析成了一个对象;

    resp对象则是Tomcat构造的一个空的对象,doGet方法会根据req里的一些数据和具体的业务逻辑来构造生成一个完整的resp对象(所以resp相当于一个“输出型参数”),然后Tomcat再把resp对象转换成HTTP响应报文。

    (3) 加上@WebServlet注解

    加上注解后,表示Tomcat在收到的GET请求中,找到路径为/hello的请求时才会调用Hello类中的toGet方法。

    5、打包程序

    我们当前写的代码中是没有main方法的,要想让代码跑起来,需要把当前代码打包起来放到Tomcat中就可以跑起来了~

    (1) 点击Idea右侧的Maven按钮,展开Lifecycle,找到package选项:

    (2) 双击package选项,出现BUILD SUCESS表示打包成功了:

    此时左侧会生成一个target目录,里面会包含一个jar包:

    但是Tomcat需要识别的是war包格式,所以我们需要重新打包出一个war包:

    jar包和war包的区别:

    jar包是普通的java程序打包的结果,里面会包含一些.class文件;

    war包是java web的程序,除了包含.class文件外,还会包含HTML,CSS,JS,图片以及其他的jar包,打包成war包才能被Tomcat识别。

    (3) 在pom.xml中新增一个标签,表示打包的方式是war包格式:

        <packaging>warpackaging>

    (4) 在pom.xml中新增一个标签,内置一个标签,表示打包出的war包名字:

    1. <build>
    2. <finalName>HelloServletfinalName>
    3. build>

    完整的pom.xml文件:

    (5) 重新使用maven的package打包就会生成一个war包:

    6、部署程序

    (1) 把刚才打包的war包拷贝到Tomcat的webapps目录下:

    (2) 启动Tomcat,把war包解压缩,此时会生成一个新的目录:

    7、验证程序

    此时,在浏览器地址栏中输入:127.0.0.1:8080/HelloServlet/hello时就可以看到结果了:

    在上面的URL中,/HelloServlet目录又称为ContextPath,/hello目录又称为ServletPath

    (1) Tomcat通过ContextPath可以确定一个webapp,然后就会加载该目录下所有的类,重点识别出被@WebServlet注解的类;

    (2) 然后根据ServletPath找到注解为/hello的类,找到类之后,就会创建一个类的实例(只会创建一次,如果之前创建过了,就会复用之前的实例);

    (3) Tomcat再解析出HTTP请求的方法“GET”,根据HTTP请求的方法来调用类中对应的toGet方法。

    GET请求调用toGer方法;POST请求调用toPost方法;PUT请求调用toPut方法……

    三、优化部署方式

    上述第5步和第6步操作比较繁琐,并且只要代码中有一点改动,都需要重新执行打包程序和部署程序的操作,我们可以在IDEA上安装一个Smart Tomcat插件来优化这些操作:

    1、安装Smart Tomcat

    (1) 打开IDEM,依次点击左上角的File、Settings:

    (2) 在Settings对话框中选择Plugins、Marketplace,然后搜索smart tomcat,最后点击Install即可。

    2、使用Smart Tomcat

    (1) 点击右上角的Add Configurations:

    (2) 在弹出的对话框中点击左上角的+号,然后选择刚才下载的Smart Tomcat:

    (3) 在弹出的对话框中进行如下设置(红色框中的内容是需要修改的,其余部分不变):

    (4) 点击OK之后,右上角就生成了一个运行配置:

    (5) 点击右上角绿色的三角符号,就可以一键式完成打包部署操作(让IDEA调用tomcat,并加载刚才写的Servlet程序):

    出现这样的页面就说明操作成功了,此时就可以打开浏览器查看程序运行结果:

    注意:使用Smart Tomcat进行一键式打包部署操作时,需要关闭控制台的Tomcat,否则会出现下面这种错误情况:

    因为控制台中运行的Tomcat已经占用了8080(业务端口)和8005(管理端口)端口号,由于同一个端口号不能被多个程序绑定,所以当我们使用Smart Tomcat调用Tomcat时就会绑定端口失败。

    四、使用Servlet时常见的错误

    1、404

    404表示用户访问的资源不存在,如果出现404,很可能是URL写错了。

    (1) 首先检查一下URL是否写错:

    ① 检查URL中是否写了Context Path;

    注意:Context Path有两种情况:

    (a) 如果是使用startup.bat的方式启动Tomcat(即控制台的方式),此时Context Path指的是webapps中的webapp目录名(即一开始打包的war包名)。 

    (b) 如果是使用Smart Tomcat的方式启动Tomcat,此时Context Path指的是配置Smart Tomcat时手动填写的。

    ② 检查URL中是否写了Servlet Path;

    ③ 检查Servlet Path和@WebServlet注解中的路径是否一致;

    (2) 查看web.xml文件中的内容是否写错。

    如果web.xml中的内容写错了,也会出现404错误。

    2、405

    如果出现405,则表示对应的HTTP请求方法没有实现。

    例如HTTP请求的方法是GET,但是代码中没有doGet方法:

    (在浏览器地址栏中直接输入一个URL,就会发送一个GET请求) 

    3、500

    如果出现500,一般是Servlet代码中抛出了异常。

    例如,修改当前doGet方法:

     重新访问页面:

    页面中会提示当前代码中抛出了什么异常,以及是在哪一行抛的异常。 

    4、无法访问页面

    这种情况一般是Tomcat启动失败。

    例如在没有运行Tomcat的情况下访问页面:

    5、出现空白页面

    如果出现空白页面,说明响应为空。

    例如,注释掉 resp.getWriter().write("hello") 这行代码:

    重新访问页面:

  • 相关阅读:
    侦听器watch及其和计算属性、methods方法的总结
    PACS外围硬件--九五小庞
    21天学习挑战赛--执行时长
    2023华为杯研究生数学建模C题分析
    【无标题】超时超时超时超时超时
    {大厂漏洞 } OA产品存在SQL注入
    校招零Offer要不要先找实习?
    数据结构与算法4-递归
    【计算机网络】 TCP协议头相关知识点
    《LeetCode力扣练习》代码随想录——链表(两两交换链表中的节点---Java)
  • 原文地址:https://blog.csdn.net/m0_67683346/article/details/127891737