Servlet(9)—HttpServlet和改进Servlet实例

【JavaWeb】Servlet系列 --- HttpServlet【底层源码分析】 协议实际上是某些人,或者某些组织提前制定好的一套规范,大家都按照这个规范来,这样可以做到沟通无障碍。协议就是一套规范,就是一套标准。由其他人或其他组织来负责制定的。比如:我说的话你能听懂,你说的话,我也能听懂,这说明我们之间是有一套规范的,一套协议的,这套协议就是:中国普通话协议。我们都遵守这套协议,我们之间就可以沟通无障碍。HTTP协议:是W3C制定的一种超文本传输协议。(通信协议:发送消息的模板提前被制定好。)W3C:■万维网联盟组织... 阅读详情
  1. HttpServlet:针对Http协议定义的一个Servlet基类,唯一的功能就是强制类型转换ServletRequest转换成HttpServletRequest,ServletResponse转换成HttpServletResponse,HttpServlet继承自GenericServlet,而GenericServlet实现了Servlet接口和ServletConfig接口。也就是说编写Servlet类不需要直接实现Servlet类,去继承HttpServlet就行。
  2. 好处:
    • 不会产生多余无用的代码
    • 不用在强制类型转换了(为了获取请求的方式是get还是post需要用到需要用request.getMethod(),其中request必须是HttpServletRequest类型的,HttpServlet在service(ServletRequest req, ServletResponse res)已经强制类型转换好了)
    • 在service(HttpServletRequest req, HttpServletResponse resp)重载方法中获取请求方式,get请求会调用doget方法,post请求会执行dopost方法。所以我们可以再这2个方法中定义我们自己的业务逻辑

3 . Http中的方法:
HttpServlet()
doGet(HttpServletRequest, HttpServletResponse)
getLastModified(HttpServletRequest)
doHead(HttpServletRequest, HttpServletResponse)
doPost(HttpServletRequest, HttpServletResponse)
doPut(HttpServletRequest, HttpServletResponse)
doDelete(HttpServletRequest, HttpServletResponse)
getAllDeclaredMethods(Class< ? >)
doOptions(HttpServletRequest, HttpServletResponse)
doTrace(HttpServletRequest, HttpServletResponse)
service(HttpServletRequest, HttpServletResponse)
maybeSetLastModified(HttpServletResponse, long)
service(ServletRequest, ServletResponse)

改进后的实例:
HttpServlet

/**
 * 针对Http协议定义的一个Servlet基类
 *唯一的功能就是强制类型转换ServletRequest转换成HttpServletRequest,ServletResponse转换成
 *HttpServletResponse
 */
public class MyHttpServlet extends MyGenericServlet {

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        if(arg0 instanceof HttpServletRequest){
            HttpServletRequest httpServletRequest = (HttpServletRequest) arg0;
            if(arg1 instanceof HttpServletResponse){
                HttpServletResponse httpServletResponse = (HttpServletResponse) arg1;
                service(httpServletRequest, httpServletResponse);
            }
        }   
    }

    public void service(HttpServletRequest arg0, HttpServletResponse arg1)
            throws ServletException, IOException {
        //1.获取请求方式
        String method = arg0.getMethod();

        //2.根据请求的方式再调用对应的处理方法
        if("GET".equalsIgnoreCase(method)){
            doGet(arg0, arg1);
        }else if("POST".equalsIgnoreCase(method)){
            doPost(arg0, arg1);
        }
    }

    public void doPost(HttpServletRequest arg0, HttpServletResponse arg1) 
            throws ServletException, IOException{

    }

    public void doGet(HttpServletRequest arg0, HttpServletResponse arg1) 
            throws ServletException, IOException{

    }
}

Servlet:

public class LoginServlet3 extends MyHttpServlet {

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException  {
        //获取请求的方式
        String method = request.getMethod();
        System.out.println("请求方式:" + method);

        //1.获取请求参数username,password(获取的是表单信息)
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        //2.获取当前web应用的初始化参数user,password。
        String initUser = getServletContext().getInitParameter("user");
        String initPassword = getServletContext().getInitParameter("password");

        PrintWriter out = response.getWriter();
        //3.比对
        if(initUser.equals(username) && initPassword.equals(password)){
            //4.打印响应字符串
            out.println("Hello: " + username);
        }else{
            out.println("Sorry: " + username);
        }
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException  {
        //获取请求的方式
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        String method = httpServletRequest.getMethod();
        System.out.println("请求方式:" + method);

        //1.获取请求参数username,password(获取的是表单信息)
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        //2.获取当前web应用的初始化参数user,password。
        String initUser = getServletContext().getInitParameter("user");
        String initPassword = getServletContext().getInitParameter("password");

        PrintWriter out = response.getWriter();
        //3.比对
        if(initUser.equals(username) && initPassword.equals(password)){
            //4.打印响应字符串
            out.println("Hello: " + username);
        }else{
            out.println("Sorry: " + username);
        }
    }
}

页面:

<body>

    <form action="loginServlet" method="get">
        user:<input type="text" name="user"/>
        <br>
        password:<input type="password" name="password"/>
        <br>
        interesting:
        <input type="checkbox" name="interesting" value="read"/>read
        <input type="checkbox" name="interesting" value="walk"/>walk
        <input type="checkbox" name="interesting" value="swing"/>swing
        <input type="checkbox" name="interesting" value="shopping"/>shopping
        <input type="checkbox" name="interesting" value="tv"/>TV
        <br>
        <input type="submit" value="Submit"/>
    </form>
</body>
Tesseract OCR 字库训练教程:提高识别率进阶版 通过 Tesseract 字库训练,你可以提高 OCR 对特定文本或字体的识别能力。训练过程包括准备训练数据、生成标签文件、运行训练工具,以及将训练结果集成到实际项目中。虽然训练过程需要一些时间和精力,但对于需要高精度文本识别的场景来说,字库训练是非常有效的提升识别率的方法。 阅读详情

相关推荐

用PLECS搞定三相逆变器电流环:从传递函数推导到PI参数整定的保姆级教程

本文提供了一份详细的PLECS教程,指导如何从传递函数推导到PI参数整定,实现三相逆变器电流环的闭环控制。通过坐标变换、控制器设计和仿真验证等步骤,帮助工程师快速掌握电流环控制技术,提升电力电子系统的稳定性和可靠性。

weixin_27102543的博客 398

HttpServlet 详解(基础)

HttpServlet详解大家都知道Servlet,但是不一定很清楚servlet框架,这个框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口和类.在javax.servlet.http包中定义了采用HTTP通信协议的HttpServlet类.Servlet的框架的核

小熊Leo的专栏 7565

高精度计算Π的值(C语言)

题目要求 限制使用双向链表作存储结构,请根据用户输入的一个整数(该整数表示精确到小数点后的位数,可能要求精确到小数点后500位),高精度计算PI值。可以利用反三角函数幂级展开式来进行计算。 输入5 输出3.14159 思路分析 反三角函数幂级展开式 由公式可以看出,只要计算出来每一个R(n)的值再相加取二倍就可以得到Π的值。 经过推算,要是令R(1)=2,只需要将每个R(n),相加即可。 因...

weixin_46251155的博客 8031

doPut()详解

先看它与post的区别: PUT 与 POST 方法的区别在于,PUT方法是幂等的:调用一次与连续调用多次是等价的(即没有副作用),而连续调用多次POST方法可能会有副作用,比如将一个订单重复提交多次。 注释的中文意思为: 服务器调用(通过&lt;code&gt;service&lt;/code&gt;方法)以允许servlet处理PUT请求。 PUT操作允许客户端在服务器上放置文件,类...

Anakki的博客 2386

双臂复合机器人眼在手外标定实战:从原理到D435标定流程详解

本文详细解析了双臂复合机器人中眼在手外标定的核心原理与实战流程。通过阐述坐标系转换与AX=XB方程,重点介绍了使用Intel RealSense D435相机进行标定的完整步骤,包括环境搭建、数据采集、计算与验证,并提供了关键的避坑指南,帮助工程师实现相机与机械臂基座间的精确坐标对齐。

weixin_29100927的博客 445

怎么在豆包里做生成式引擎优化(GEO)

本文系统介绍了豆包平台生成式引擎优化(GEO)的全套方法体系。文章首先解析了豆包与传统搜索引擎的核心差异,强调其多模态理解和上下文感知特性,并指出GEO需从关键词匹配转向用户意图动态解析。随后详细阐述了GEO优化的三大核心策略:用户意图解析技术、实时内容适配框架和权威信号强化方法,配以技术实现路径和案例说明。最后提出GEO与SEO融合的未来趋势,建议企业构建统一知识库,实现全渠道声誉管理。全文包含大量实操代码和工具链指导,为企业在AI时代的内容优化提供系统解决方案。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 2370

Servlet--HttpServlet实现doGet和doPost请求的原理

Servlet--HttpServlet实现doGet和doPost请求的原理 更多原创性能测试文章关注 十年性能测试专家&7DGroup公众号 一、HttpServlet简介 1、HttpServlet是GenericServlet的子类,又是在Generi...

Bruce小鬼 4万+

告别图像畸变:手把手教你用HALCON的`gen_image_to_world_plane_map`做高精度视觉测量

本文详细解析了HALCON的`gen_image_to_world_plane_map`算子在工业视觉测量中的应用,通过精确的几何变换消除透视畸变,提升测量精度。文章涵盖相机标定、世界坐标系建立、实战应用及性能优化,适用于液晶屏质检、金属板检测等场景,帮助工程师实现高精度视觉测量。

weixin_28718487的博客 421

从Servlet到HttpServlet都经历了什么

在之前的文章Servlet执行原理浅谈中对Servlet的整个原理做了大概介绍。我们知道客户端发送的请求是交给Servlet中的service方法进行处理。而在实际使用时,并没有直接重写service方法,而是继承了HttpServlet,重写了doGet、doPost等方法,而这期间又发生了什么呢。 首先,我们观察Servlet这个类: public interface Servlet { void init(ServletConfig var1) throws ServletException;

Chemlez'blog 204

Winform使用TreeView控件实现带复选框的三态树

刚接触c#,项目中用到Treeview实现三态,即选中、未选中、半选中状态,并且要求父子节点选择联动,效果类似下图网上有很多例子,于是研究了一下,结合网上大佬们的例子,所以在这里记录一下。首先新建一个Winform工程拖个TreeView控件,然后运行。。。嗯。。。加点数据吧。private void CreateTree() { TreeNode anime = new TreeNode...

laoyezha的博客 2万+

VS code 调试显示preLaunchTask“g++“已终止,退出代码为-1。 生成‘... .exe‘文件错误

总结: 以后每个工程都需要按照这样的流程:创建一个.c/.cpp文件 -> F5运行 -> 配置tasks.json文件-> launch.json文件 -> 运行

qq_45151652的博客 2513

Servlet API(一)GenericServlet类、HttpServlet类、doget()、dopost()

文章目录一、Servlet API二、Servlet接口三、GenericServlet类实例一:扩展GenericServlet类实现service()方法 一、Servlet API Servlet:用来完成B/S架构下,对客户端请求的响应处理 Servlet API:为Servlet提供了统一的编程接口 常见的Servlet容器:Servlet 在容器中运行 Tomcat Jetty / Resin 二、Servlet接口 Servlet接口是Servlet API中的基本接口,每个Serv

小岛上的盛夏的博客 972

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

如何解决JSP页面顶端报错 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

题目有点长,昨天刚接触jsp,按照网上的教程安装完 tomcat 和 eclipse EE 之后,新建jsp文件却出现了如下报错: The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 教程没有问题,传送门:http://www.runoob.com/jsp/jsp-setu

u014691453的专栏 3万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

JavaWeb_servlet(4)_ HttpServlet

JavaWeb_servlet HTTP 请求的 Servlet ● 因为现在我们的请求都是基于 HTTP 协议的,所以我们应该专门为 HTTP 请求写一个 Servlet 做为通用父类。 对于专注于 HTTP 的 Servlet,我们需要处理以下几个问题: service() 方法的参数 ServletRequest 和 ServletResponse,但因为所有的请求都是 HTTP 请求,所...

魏宇轩 615

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Servlet学习笔记(三)HttpServlet的讲解

1 概述 Servlet是Java Web应用的最核心组件,Servlet运行在Servlet容器(比如tomcat)中,能够为用户的请求提供各式各样的服务: 动态生成Html文档 把请求转发给同一个Web应用中的其他Sevlet组件,或者是jsp组件 把请求转发给其他Web应用中的Servlet组件 读取客户端的Cookie,以及向客户端写入Cookie 访问其他服务器资源,(比如数据库) servlet之所以能完成如此众多的功能,主要依赖于几个常用的武器: 请求对象(Servl

m0_46741750的博客 265

【JavaWeb】创建servlet实例的方法

需要实现Servlet接口来创建任何servlet(直接或间接)。它提供了个生命周期方法,用于初始化servlet,服务请求以及销毁servlet和个非生命周期方法。

Robin的博客 1442

【javaweb】tomcat9.0中的HttpServlet

在Tomcat中,HttpServlet 是 Java Servlet API 中的一个抽象类,用于简化基于HTTP协议的Servlet的开发。HttpServlet 扩展了 GenericServlet 类,并提供了专门处理HTTP请求的方法,例如 doGet、doPost、doPut 等。用于处理HTTP GET请求。开发人员可以重写此方法以实现对GET请求的响应逻辑。用于处理HTTP POST请求。开发人员可以重写此方法以实现对POST请求的响应逻辑。用于处理HTTP PUT请求。

m0_61629312的博客 968

为什么使用HttpServlet?http协议特点、servlet

因为只有HttpServlet是基于http协议,实现Servlet接口,而http协议是短连接协议,能够实现客户端访问服务端后,数据交互后 连接自动断开。同时http协议基于tcp、ip协议,封装了tcp、ip协议 是一个应用层协议,能够自动断开,其它的,例如GenericServlet是定义一般的,与协议无关的Servlet,是抽象类,主要给子类继承使用 tcp/ip: 安全协...

A458545418的博客 452

三个写servlet方法的实例

第一个通过实现servlet接口的方式来开发  /** *//** * @(#)Hello.java * * * @author   shiyi05 * @version 1.00 2008/5/9 *///这是我的第一个servlet,使用 implements Servlet实现servlet接口的方式来开发package com.rao;import javax.servlet.

shiyi05的专栏 2401

HttpServlet,GenericServlet

在这里我们讲到了Servlet例子与注解配置,但是这种实现Servlet的方式每次都要实现5个方法,而对我们来说用最多的往往只是service方法,而其他方法是没用的。所以我们换一种方式来实现Servlet 我们先看一下Servlet的体系结构 发现Servlet的实现类:GenericServlet 那我们就不实现Servlet接口了,去继承GenericServlet类看一下 package com.lingaolu.servlet; import javax.servle.

林高禄 8160

Java Web开发:Tomcat、Servlet、HttpServlet

Java Web开发中的资源 静态web资源 HTML CSS JS 动态web资源 Servlet JSP URL 请求路径 URL (Uniform Resource Locator) ,统⼀资源定位符是对互联⽹上资源位置的⼀种表示,互联⽹上的每个⽂件都有⼀个唯⼀的URL。 完整格式如下 协议://域名:端⼝号/资源位置?参数=值 * 协议,http、https、ftp等 * 域名,域名或IP地址,都可以访问WEB资源 * 端⼝号,程序必须使⽤端⼝号,才可以让另⼀个计算机访问。ht

消极的人永远是对的,积极的人选择勇往直前 580

HttpServlet

一、简介 HttpServlet是Servlet接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。 二、响应流程 1.Web客户向Servlet容器发出Http请求 2.Servlet容器解析Web客户的Http请求 3.Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息 4.Servlet容器创建一个HttpResponse对象 5.Servlet容器调用HttpServlet的se

qq_42398447的博客 6391

HttpServlet和DispatcherServlet的区别

HttpServlet和DispatcherServlet是原生和MVC中封装的servlet的区别。Servlet定义一套处理网络请求的规范,但并不能直接处理请求,而是由tomcat监听端口,根据url等信息,确定要将请求交给哪个servlet去处理,service方法返回响应对象,再返回给客户端。dispatcherServlet是子接口,作为一个前端控制器为每个请求配置一个统一的servlet来处理,体现了MVC和代码解耦理念的支持,起到了路由分发的作用,根据配置的节点有效地将请求转发到控制器方法。

m0_72397750的博客 900
上一篇: Servlet(8)—GenericServlet和改进Servlet实例
下一篇: Servlet(10)—请求转发和请求重定向
T_P_F
博客等级 码龄11年 36粉丝 286原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值