Java学习笔记 --- Servlet(1)

news2025/7/19 16:53:04

一、Servlet技术 

1、Servlet基本介绍

1、Servlet 是 JavaEE 规范之一。规范就是接口

2、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。

3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

 

2、手动实现Servlet程序

1、编写一个类去实现 Servlet 接口

2、实现 service 方法,处理请求,并响应数据

package com.javaweb.servlet;

import javax.servlet.*;
import java.io.IOException;

public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * service方法是专门用来处理请求和响应的
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello Servlet 被访问");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

 

3、到 web.xml 中去配置 servlet 程序的访问地址

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- servlet 标签给 Tomcat 配置 Servlet 程序 -->
    <servlet>
        <!--servlet-name 标签 Servlet 程序起一个别名(一般是类名) -->
        <servlet-name>HelloServlet</servlet-name>

        <!--servlet-class 是 Servlet 程序的全类名-->
        <servlet-class>com.javaweb.servlet.HelloServlet</servlet-class>
    </servlet>

    <!--servlet-mapping 标签给 servlet 程序配置访问地址-->
    <servlet-mapping>
        <!--servlet-name 标签的作用是告诉服务器,我当前配置的地址给哪个 Servlet 程序使用-->
        <servlet-name>HelloServlet</servlet-name>

        <!--
            url-pattern 标签配置访问地址
            / 斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径
            /hello 表示地址为:http://ip:port/工程路径/hello
        -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

</web-app>

 

3、url地址到Servlet程序的访问 

 

4、Servlet的生命周期

1、执行 Servlet 构造器方法

2、执行 init 初始化方法

      第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。

3、执行 service 方法

      第三步,每次访问都会调用。

4、执行 destroy 销毁方法

      第四步,在 web 工程停止的时候调

 

5、GET 和 POST 请求的分发处理

package com.javaweb.servlet;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * service方法是专门用来处理请求和响应的
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello Servlet 被访问");
        // 类型转换(因为它有 getMethod()方法)
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        // 获取请求的方式
        String method = httpServletRequest.getMethod();
        if ("GET".equals(method)) {
            doGet();
        } else if ("POST".equals(method)) {
            doPost();
        }
    }

    /**
     * 做 get 请求的操作
     */
    public void doGet(){
        System.out.println("get 请求");
        System.out.println("get 请求");
    }
    /**
     * 做 post 请求的操作
     */
    public void doPost(){
        System.out.println("post 请求");
        System.out.println("post 请求");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

 

6、通过继承HttpServlet实现Servlet程序

一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。

1、编写一个类去继承 HttpServlet 类

2、根据业务需要重写 doGet 或 doPost 方法

3、到 web.xml 中的配置 Servlet 程序的访问地址 

Servlet 类的代码:

package com.javaweb.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HelloServlet2 extends HttpServlet {
    /**
     * doGet()在 get 请求的时候调用
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet2 的 doGet 方法");
    }

    /**
     *  doPost()在 post 请求的时候调用
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet2 的 doPost 方法");
    }
}

web.xml 中的配置:

    <servlet>
        <servlet-name>HelloServlet2</servlet-name>
        <servlet-class>com.javaweb.servlet.HelloServlet2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet2</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>

 

7、使用IDEA创建Servlet程序

配置 Servlet 的信息:

 

8、Servlet 类的继承体系

 

 

二、HTTP协议

        协议是指双方,或多方,相互约定好,大家都需要遵守的规则,叫协议。 所谓 HTTP 协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫 HTTP 协议。 HTTP 协议中的数据又叫报文。

 

1、请求的HTTP协议格式

客户端给服务器发送数据叫请求。 服务器给客户端回传数据叫响应。

请求又分为 GET 请求,和 POST 请求两种

 

GET 请求

1、请求行

      (1) 请求的方式 GET

      (2) 请求的资源路径[+?+请求参数]

      (3) 请求的协议的版本号 HTTP/1.1

2、请求头 key : value 组成 不同的键值对,表示不同的含义

 

POST 请求

1、请求行

      (1) 请求的方式 POST

      (2) 请求的资源路径[+?+请求参数]

      (3) 请求的协议的版本号 HTTP/1.1

2、请求头 key : value 组成 不同的键值对,表示不同的含义

3、请求体 ===>>> 就是发送给服务器的数据

 

2、常用请求头的说明 

 Accept: 表示客户端可以接收的数据类型

Accpet-Languege: 表示客户端可以接收的语言类型

User-Agent: 表示客户端浏览器的信息

Host: 表示请求时的服务器 ip 和端口号

 

3、哪些是 GET 请求,哪些是 POST 请求

GET 请求有哪些:

1、form 标签 method=get

2、a 标签

3、link 标签引入 css

4、Script 标签引入 js 文件

5、img 标签引入图片

6、iframe 引入 html 页面

7、在浏览器地址栏中输入地址后敲回车

 

POST 请求有哪些:  

1、form 标签 method=post

 

4、响应的 HTTP 协议格式

1、响应行

      (1) 响应的协议和版本号

      (2) 响应状态码

      (3) 响应状态描述符

2、响应头

      key : value 不同的响应头,有其不同含义 空行

3、响应体 ---->>> 就是回传给客户端的数

 

5、常用的响应码说明

200 表示请求成功

302 表示请求重定向

404 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)

500 表示服务器已经收到请求,但是服务器内部错误(代码错误)

 

6、MIME 类型说明

MIME 是 HTTP 协议中数据类型。

MIME 的英文全称是"Multipurpose Internet Mail Extensions" 多功能 Internet 邮件扩充服务。

MIME 类型的格式是“大类型/小 类型”,并与某一种文件的扩展名相对应。

常见的 MIME 类型:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/395494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

院士交锋,专家论道|NLP大模型技术与应用十大挑战,剑指AI未来

2023年2月24日下午&#xff0c;第四届OpenI/O启智开发者大会NLP大模型分论坛在深圳人才研修院隆重举办。NLP大模型论坛会议现场众多NLP领域顶级专家学者与多家国产NLP大模型开发团队汇聚一堂&#xff0c;学术界与产业界破圈交流&#xff0c;激荡尖端思想、分享前沿动态&#xf…

Linux学习第二十二节-网卡IP设置

1.修改网卡IP地址 方式一&#xff1a;通过修改网卡配置文件修改 网卡配置文件位置&#xff1a; /etc/sysconfig/network-scripts/网卡名 #ifconfig 表示用于显示和设置网卡的参数 #ip addr 表示用于显示和设置网卡的参数 #systemctl restart network 表示重启网络 …

Spark Join大小表

Spark Join大小表无法广播过滤后大小表数据分布均匀大小表 : 大小表尺寸相差 3 倍以上 Join 优先考虑 BHJ小表的数据量 > 广播阈值时&#xff0c;优先考虑 SHJ 无法广播 大表 100GB、小表 10GB&#xff0c;都远超广播变量阈值 当小表的尺寸 > 8GB时&#xff0c;创建广…

剑指-Offer-30-包含min函数的栈

剑指 Offer 30.包含min函数的栈 题目描述&#xff1a; 定义栈的数据结构&#xff0c;请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中&#xff0c;调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例&#xff1a; MinStack minStack new MinStack(); minSt…

Python中的错误是什么,Python中有哪些错误

7.1 错误(errors) 由于Python代码通常是人类编写的&#xff0c;那么无论代码是在解释之前还是运行之后&#xff0c;或多或少总会出现一些问题。 在Python代码解释时遇到的问题称为错误&#xff0c;通常是语法和缩进问题导致的&#xff0c;这些错误会导致代码无法通过解释器的解…

2023年绿色建筑国际会议(ICoGB 2023)

2023年绿色建筑国际会议&#xff08;ICoGB 2023&#xff09; 重要信息 会议网址&#xff1a;www.icogb.org 会议时间&#xff1a;2023年5月19-21日 召开地点&#xff1a;斯德哥尔摩 截稿时间&#xff1a;2023年4月1日 录用通知&#xff1a;投稿后2周内 收录检索&#xff…

剑指 Offer 61 扑克牌中的顺子

摘要 扑克牌中的顺子 一、集合 Set 遍历 根据题意&#xff0c;此5张牌是顺子的 充分条件 如下&#xff1a; 除大小王外&#xff0c;所有牌 无重复 &#xff1b;设此5张牌中最大的牌为max&#xff0c;最小的牌为min&#xff08;大小王除外&#xff09;&#xff0c;则需满足…

深入理解浏览器解析机制和XSS向量编码

目录 1、HTML解析 字符实体(character entities) HTML字符实体(HTML character entities) 字符引用(character references) 在HTML中有五类元素 五类元素的区别如下 深入了解下RCDATA元素 2、URL解析 3、JavaScript解析 4、解析流 1、HTML解析 从XSS的角度来说&…

es倒排索引原理

1、简介 网上看到的一篇文章&#xff0c;对Lucene的倒排索引是如何执行的&#xff0c;说的比较易懂&#xff0c;就转过来分享下。 Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好&#xff0c;比如年龄在18和30之间&a…

kubeadm安装K8S(集群)

前言市面上很多k8s的安装工具&#xff0c;作为产品的设计者和推广者&#xff0c;K8S组织也知道自己的产品部署起来十分的困难&#xff0c;于是把开源爱好者写的工具kubeadmn收编为正规军&#xff0c;纳入到了自己的麾下。为什么我们要用kubeadmn来部署&#xff1f;因为kubeadm不…

【代码实践】DeepBDC for few-shot learning代码运行

DeepBDC是Jiangtao Xie等人在CVPR2022上提出的few-shot classification方法&#xff0c;论文全名为“Joint Distribution Matters: Deep Brownian Distance Covariance for Few-Shot Classification”。本文旨在记录在Window系统下运行该官方代码&#xff08;https://github.co…

Linux学习第二十四节-Podman容器

一、容器的概念 容器是由一个或多个与系统其余部分隔离的进程组成的集合。我们可以理解为“集装箱”。 集装箱是打包和装运货物的标准方式。它作为一个箱子进行标记、装载、卸载&#xff0c;以及从一个 位置运输到另一个位置。该容器的内容与其他容器的内容隔离&#xff0c…

传统企业数字化转型真的有必要吗?应该如何做转型?

随着数字经济的快速发展&#xff0c;各行各业数字化转型成为必然。从最初的信息化建设&#xff0c;到数字企业、数字政府建设&#xff0c;再到如今的数字经济建设&#xff0c;传统企业在数字化转型中的作用越来越大。与此同时&#xff0c;数字化转型对传统企业提出了更高的要求…

【Java开发面试】AHXX面试总结

1. java中常用的集合有哪些 java中常用的集合类有List,Set,Map,其中List和Set继承了Collection。 List的实现类有&#xff1a;ArrayList&#xff0c;LinkedList&#xff0c;Vector&#xff0c;Stack Set的实现类有&#xff1a;TreeSet&#xff0c;HashSet Map的实现类有&#…

MySQL运维篇之读写分离

04、读写分离 4.1、介绍 读写分离&#xff0c;简单地说是把对数据库的读和写操作分开&#xff0c;以对应不同的数据库服务器。主数据库提供写操作&#xff0c;从数据库提供读操作&#xff0c;这样能有效地减轻单台数据库的压力。 通过Mycat即可轻易实现上述功能&#xff0c;…

02_Linux终端操作,shell命令,软件安装,文件系统结构,磁盘管理

目录 终端操作 常用Shell命令 Ubuntu软件安装方法 Ubuntu文件系统结构 绝对路径和相对路径 Ubuntn下磁盘管理 终端操作 打开终端快捷键Ctrlaltt 或鼠标右键 常用Shell命令 1.目录信息查看命令ls ls -a 显示目录所有文件及文件夹,包括隐藏文件,比如以.开头的 ls -l…

Synopsys Sentaurus TCAD系列教程之--Sprocess(SmallMOS_2D3D) 解析

SmallMOS_2D3D解析 #header## STI depth set sti_depth 0.15 ## Half STI width set sti_width sti_width ## Half gate length set gate_len <lg/2> ## SD length (from center) set sd_len [expr $gate_len0.05]#endheader## X lines line x location 0.0 spacing 0.…

OSI ARP TCP-IP HDCP

OSI七层参考模型分层名称基本功能应用层用户与网络、应用程序与网络的接口&#xff0c;直接向用户提供服务表示层处理用户信息的表示问题&#xff0c;如编码、数据格式转换和加密解密会话层组织和协调两个会话进程之间的通信传输层应用进程之间的连接&#xff0c;提供端到端的服…

Coremail邮件系统全新上线存档邮箱功能

邮箱积累邮件太多&#xff0c;搜索起来又慢又麻烦&#xff01; 我的重要邮件忘记下载丢失了&#xff01;14天自动删除太难了&#xff01; 有没有可能重要邮件自动存档&#xff0c;解救一下“遗忘星”人&#xff1f; 在我们日常工作中&#xff0c;邮件是最经常使用的办公工具之一…

Spark/Hive

Spark/HiveHive 原理Spark with HiveSparkSession Hive Metastorespark-sql CLI Hive MetastoreBeeline Spark Thrift ServerHive on SparkHive 擅长元数据管理Spark 擅长高效的分布式计算 Spark Hive 集成 : Hive on Spark : Hive 用 Spark 作为底层的计算引擎时Spark w…