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

2024-05-02 19:38

本文主要是介绍Servlet(9)—HttpServlet和改进Servlet实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  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 {@Overridepublic 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 {@Overridepublic 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);}}@Overridepublic 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>

这篇关于Servlet(9)—HttpServlet和改进Servlet实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955018

相关文章

swiper实例

大家好,我是燐子,今天给大家带来swiper实例   微信小程序中的 swiper 组件是一种用于创建滑动视图的容器组件,常用于实现图片轮播、广告展示等效果。它通过一系列的子组件 swiper-item 来定义滑动视图的每一个页面。 基本用法   以下是一个简单的 swiper 示例代码:   WXML(页面结构) <swiper autoplay="true" interval="3

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

(超详细)YOLOV7改进-Soft-NMS(支持多种IoU变种选择)

1.在until/general.py文件最后加上下面代码 2.在general.py里面找到这代码,修改这两个地方 3.之后直接运行即可

YOLOv8改进 | SPPF | 具有多尺度带孔卷积层的ASPP【CVPR2018】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40+篇内容,内含各种Head检测头、损失函数Loss、Backbone、Neck、NMS等创新点改进——点击即可跳转 Atrous Spatial Pyramid Pooling (ASPP) 是一种在深度学习框架中用于语义分割的网络结构,它旨

JavaWeb系列六: 动态WEB开发核心(Servlet) 上

韩老师学生 官网文档为什么会出现Servlet什么是ServletServlet在JavaWeb项目位置Servlet基本使用Servlet开发方式说明快速入门- 手动开发 servlet浏览器请求Servlet UML分析Servlet生命周期GET和POST请求分发处理通过继承HttpServlet开发ServletIDEA配置ServletServlet注意事项和细节 Servlet注

如何实现一台机器上运行多个MySQL实例?

在一台机器上一个MySQL服务器运行多个MySQL实例有什么好处?这里我先入为主给大家介绍这样做至少存在两个好处(看完这篇文章后理解会更透彻): (1)减轻服务器链接负担 (2)为不同的用户提供不同的mysqld服务器的访问权限以方便这些用户进行自我管理。   下面我介绍具体的实现过程: 一、准备工作     台式机一台、Windows系统、MySQL服务器(我安装的版本是MySQL

Docker Compose--安装Nginx--方法/实例

原文网址:Docker Compose--安装Nginx--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Docker Compose如何安装Nginx。 目录结构 ├── config│   ├── cert│   │   ├── xxx_bundle.pem│   │   └── xxx.key│   ├── conf.d│   └── nginx.co

【智能优化算法改进策略之局部搜索算子(五)—自适应Rosenbrock坐标轮换法】

1、原理介绍 作为一种有效的直接搜索技术,Rosenbrock坐标轮换法[1,2]是根据Rosenbrock著名的“香蕉函数”的特点量身定制的,该函数的最小值位于曲线狭窄的山谷中。此外,该方法是一种典型的基于自适应搜索方向集的无导数局部搜索技术。此法于1960年由Rosenbrock提出,它与Hooke-Jeeves模式搜索法有些类似,但比模式搜索更为有效。每次迭代运算分为两部分[3]: 1)

智能优化算法改进策略之局部搜索算子(六)--进化梯度搜索

1、原理介绍     进化梯度搜索(Evolutionary Gradient Search, EGS)[1]是兼顾进化计算与梯度搜索的一种混合算法,具有较强的局部搜索能力。在每次迭代过程中,EGS方法首先用受进化启发的形式估计梯度方向,然后以最陡下降的方式执行实际的迭代步骤,其中还包括步长的自适应,这一过程的总体方案如下图所示:     文献[1]

用 idea 启动多个实例

在学习负载均衡的时候,要模拟多个实例均提供一个服务,我们要如何用 idea 启动多个实例呢?         如下图,我们已经启动了一个 ProductService 服务,现在想再启动两个相同的服务 1. 选中要启动的服务,右键选择 Copy Configuration... 2 在弹出的框中,选择 Modify options -> Add VM option