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

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类