Servlet(五):一个Servlet处理多个请求

一个Servlet处理多个请求   多个请求使用同一个Servlet 多个请求使用同一个Servlet 如果JSP中一个请求对应一个Servlet那要建很多Servlet,代码冗余较多。 我们可以把一个模块的请求封装在一个Servlet,实现功能的模块化,从而简化代码。 1.注解中配置多个url         @WebServlet( name="product", urlPatterns={"/product/q... 阅读详情

一、为什么要使用一个Servlet来处理多个请求?

当浏览器发送了一次请求到服务器时,servlet容器会根据请求的url-pattern找到对应的Servlet类,执行对应的doPost或doGet方法,再将响应信息返回给浏览器,这种情况下,一个具体的Servlet类只能处理对应的web.xml中配置的url-pattern请求,一个Servlet类,一对配置信息。如果业务扩展,需要三个Servlet来处理请求,就需要再加上两个具体的Servlet类,两对配置信息,如果继续向上扩展,是不是会认为如此写法的效率非常低下?并且会浪费更多的资源?

为了避免重复的操作(多次编写配置文件,多次新建具体的Servlet类)影响效率,就衍生出一套简单的操作来提高效率,一次配置,多次使用;一个Servlet具体类,处理多个请求。

二、如何使用一个Servlet来处理多个请求?

首先聊聊解决思路,有两种方法。一是根据请求的地址,截取其中的具体方法名,然后使用if-else判断匹配,再执行具体的方法。二是根据截取出来的方法名,使用反射机制,来执行具体的方法。

第一种方案很笨拙,需要不断的使用if-else来判断。第二种方法相对来讲,灵活的处理了原先需要使用if-else的判断逻辑,由类根据方法名自主去执行。

1、新建一个Maven项目,建好一个Servlet类

/**
 * 使用一个servlet处理多个请求
 * @author 小川94
 * @date 2018年6月14日
 */
public class CustomerServlet extends HttpServlet {
    
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);    
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求的URI地址信息
        String url = request.getRequestURI();
        // 截取其中的方法名
        String methodName = url.substring(url.lastIndexOf("/")+1, url.lastIndexOf("."));
        Method method = null;
        try {
            // 使用反射机制获取在本类中声明了的方法
            method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            // 执行方法
            method.invoke(this, request, response);
        } catch (Exception e) {
            throw new RuntimeException("调用方法出错!");
        }
    }
    
    private void queryEmp(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("执行查询员工的方法...");
        response.setContentType("text/html;charset=utf8");
        PrintWriter pw = response.getWriter();
        pw.println("<h1>查询员工的方法</h1>");
        pw.flush();
        pw.close();
    }
    
    private void addEmp(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("执行新增员工的方法...");
        response.setContentType("text/html;charset=utf8");
        PrintWriter pw = response.getWriter();
        pw.println("<h1>新增员工的方法</h1>");
        pw.flush();
        pw.close();
    }
    
    private void deleteEmp(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("执行删除员工的方法...");
        response.setContentType("text/html;charset=utf8");
        PrintWriter pw = response.getWriter();
        pw.println("<h1>删除员工的方法</h1>");
        pw.flush();
        pw.close();
    }
    
    private void queryEmpList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("执行查询所有员工的方法...");
        response.setContentType("text/html;charset=utf8");
        PrintWriter pw = response.getWriter();
        pw.println("<h1>查询所有员工的方法</h1>");
        pw.flush();
        pw.close();
    }
}

2、配置web.xml文件信息

  <servlet>
      <servlet-name>servlet</servlet-name>
      <servlet-class>servlet.CustomerServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>servlet</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>

3、编写jsp页面 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试一个Servlet处理多个请求</title>
</head>
<body>
    
    <h1>一个Servlet处理多个请求</h1>
    <hr>
    <a href="queryEmp.do">查询员工信息</a>
    <br/>
    <br/>
    <a href="addEmp.do">新增员工信息</a>
    <br/>
    <br/>
    <a href="deleteEmp.do">删除员工信息</a>
    <br/>
    <br/>
    <a href="queryEmpList.do">查询所有员工信息</a>
    
</body>
</html>

4、测试

测试的结果和预期一致,编写了一个servlet类,处理了页面的多个请求,也处理了四种不同的业务需求。


文章首发于我的个人公众号:悦乐书。喜欢分享一路上听过的歌,看过的电影,读过的书,敲过的代码,深夜的沉思。期待你的关注!

公众号后台输入关键字“Java学习电子书”,即可获得12本Java学习相关的电子书资源,如果经济能力允许,还请支持图书作者的纸质正版书籍,创作不易。

一个servlet类处理多个请求(反射优化),简单易懂 一个servlet类处理多个请求(反射优化),通过反射将不同对象的不同请求执行对应的方法 阅读详情

相关推荐

手把手教你用CANape调试XCP安全会话:DLL权限管理+四种加密模式实战演示

本文详细介绍了如何使用CANape调试XCP安全会话,重点解析了DLL权限管理的实现与配置方法,并通过实战演示了标定页切换、DAQ测量、STIM旁路和PGM刷写四种典型加密模式的操作流程与调试技巧,帮助工程师深入理解并掌握XCP安全访问机制。

smartcontract5的博客 563

servlet 如何处理多请求访问以及线程讲解

一、Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的:   1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在一个Servlet实例);   2.容器初始化化Servlet主要就是读取配置文件(例如tomcat,可以通过servlet.xml的<Connector>设置线程池中线程数目,初始化线程池通过web.xml,初始化每个参数值等等。   3.当请求...

Chen4852010的博客 1975

微信支付V2,jsapi支付拉起收银台报错:调用支付JSAPI缺少参数:total_fee

拉起收银台报错

m0_54355172的博客 3873

记录一个servlet实现多个请求

一个servlet如何实现多个请求

一个人的夏天 252

CFturbo 2024保姆级教程:从流量扬程到三维叶轮,手把手搞定离心泵水力设计

本文提供CFturbo 2024离心泵水力设计的全流程实战指南,从流量扬程参数输入到三维叶轮模型导出,详细解析设计步骤与优化技巧。涵盖叶轮尺寸确定、子午面型线设计、叶片角度调整等关键环节,帮助工程师高效完成CAE辅助的离心泵水力设计,提升设计质量与效率。

weixin_42569329的博客 937

【ShaderToy】开篇

写在前面呜呼,好久没有写博客了,好惭愧。题外话,感觉越大就越想家,希望可以一直和家人在一起,哪怕只是坐在一起不说话也觉得很温暖,一想到要分开眼睛就开始酸,哎。开学还是爬上来老实更新博客学习吧~今天爬上来一看,发现优快云的博客编辑终于更新了!进步总是好的,以前的编辑器实在很捉急。使用这种标记语言的确方便了很多,但好像颜色字体没法设置?程序员果然对美观没什么追求。ShaderToy如果你还没听过Sha

candycat 8万+

模仿Controller实现在一个Servlet中处理多个请求

/ 1、获得方法名称 String op = request . getParameter("op");// 2、通过方法名和方法所需要的参数获得Method对象 try {throw new RuntimeException("调用的方法:" + op + "不存在" , e);} // 3、通过Method对象调用方法 //调用和请求匹配的处理方法 String result = null;try {} // 如果返回的result不为空 if(result!

哈 434

水与光的奇妙“切割之舞”:水导激光切割技术探秘

水导激光切割技术的诞生,是材料加工领域不断追求高精度、高质量加工的成果。传统激光切割技术在加工过程中,材料会因瞬间高温而产生热变形、热影响区大以及切割面粗糙等问题,这些弊端在对一些高精度、热敏性材料的加工中尤为突出 ,迫切需要一种新的技术来克服这些难题。水导激光切割技术的起源可以追溯到 20 世纪 80 年代。1986 年,德国公司 Aesculap-Werke AG 首次提出了将水流引入激光切割过程的创新想法,并制造出首代水导激光设备。不过,当时的技术尚处于雏形阶段,仅仅是在光纤出口添加了一小柱水流,激光

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1674

一个Servlet类实现多个请求处理(Servlet优化)

一、优化Servlet类 思路说明: 对于刚接触Servlet来说,在我们在处理,jsp+servlet增删改查时,需要建立多个Servlet来处理,不同功能中的请求。 其实,我们只需要一个Servlet就可以处理多个请求,这只需要我们在jsp页面向servlet发送请求时候,并传递一个参数,这个参数值是用来标记此请求,进入BeanServlet类我们只需要对这个参数值进行判断,然后创建对应的处理请求的方法即可! 具体实现 jsp页面 <%@ page language="java" conten

. 5408

SpringBoot + MyBatis-Plus 高效实现数据变更记录:从注解到通用审计方案(附源码)

*** 数据变更审计插件* 拦截增删改操作,自动记录变更日志*/@Component@Resource/*** 拦截SQL执行*/@Override/*** 数据变更审计插件* 拦截增删改操作,自动记录变更日志/*** 拦截SQL执行。

2601_94871597的博客 561

【YOLOv11】087、YOLOv11多任务学习:检测、分割、分类联合学习

摘要: 工业质检场景中,多任务模型(检测、分类、分割)的需求日益增长。针对边缘设备部署的挑战,本文提出基于YOLOv11的多任务学习方案。通过共享主干网络和设计分支头(检测、分割、分类),实现高效推理;采用动态权重平衡策略解决多任务损失不平衡问题;并优化数据流处理(支持部分标注)和推理剪裁(按需启用分支)。实验表明,该方法在Jetson Orin上帧率提升3倍,内存占用减少40%,为工业质检提供了轻量高效的解决方案。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 449

BaseServlet,让一个Servlet可以同时处理多个请求

普通的Servlet一个Servlet只能处理一个请求,可以仿Struts1中的DispatchAction让一个Servlet处理多个请求。 做法是: 让普通处理请求的Servlet继承父类的BaseServlet,然后让父类单独继承HttpServlet.然后再在处理请求的servlet中定义自己的处理请求的方法,但方法中必须包HttpServletRequest, HttpServle

风的专栏 1万+

宇瞳杯视讯镜头完成版(除公差/鬼像分析)

宇瞳杯视讯镜头完成版(除公差/鬼像分析)

weixin_72050316的博客 1049

利用反射实现一个servlet处理多个请求

前言: 最近在用jsp+sevlet+Mysql知识写一个简单的博客系统,刚开始写的时侯没有了解到反射机制,所以便使用一个servlet处理一个请求的方式,这种方式无疑是不行的当你有成千上万个请求的时候难道要写成千上万个servlet嘛? 后来了解到反射机制可以实现一个servlet处理多个请求,有两种方法可以实现。 实现原理 不同的请求通过不同的方法来响应,反射起的作用是把执行方法名动态化,同过...

Superman_peng的博客 977

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

如何让一个servlet处理多个请求

为什么需要一个servlet处理多个请求 在web.xml中一个servlet只能绑定一个url-pattern,如果一个servlet只处理一个请求的话,业务一多这种写法就会效率非常低下。并且会浪费更多的资源。 解决思路 每次请求servlet都会调用它的service()方法那么我们只需要重写servlet的service方法。前端将此次请求需要调用的方法名通过参数传递过来。在servi...

weixin_44017874的博客 785

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

反射实现一个servlet处理多个接口请求

反射实现一个servlet处理多个接口请求 还记得在刚开始学习JavaEE的时候,在使用Servlet时,一个Servlet只能处理一个请求,写在`doGet`或是`doPost`的方法中。这样会造成如果接口API多的话,会产生大量的Servlet文件,造成类爆炸,而且项目结构并不清晰。 解决办法是可以采用反射实现一个servlet处理多个接口请求。 使用反射实现一个servlet处理多个接口请求,如果想要添加一个接口的API就不必再新增一个servlet文件了,直接添加方法就可以了。

Duktig的博客 1245

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

一个Servlet处理多个请求的方法

方法一: 可以在jsp中对一个变量赋予不同的值来实现不同的功能。 如下面这个例子。利用表单标签给op赋予不同的值findOne和findAll来实现根据id查询或者查所有的用户。 index.jsp &lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt...

qq_35654259的博客 2037

一个servlet处理多个请求

方法:在servlet中利用反射来调用对应请求的处理方法。 1、index.jsp页面 &lt;html&gt; &lt;head&gt; &lt;title&gt;留言板&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;div&gt;&lt;h1&gt;留住你心中的美好!&lt;/h1&gt;&am

Owen_L_Y的博客 683

在一个Servlet中处理多个请求方法

1. 在一个Servlet中可以有多个请求处理方法! 2. 客户端发送请求时,必须多给出一个参数,用来说明要调用的方法   请求处理方法的签名必须与service相同,即返回值和参数,以及声明的异常都相同! 3. 客户端必须传递一个参数! package servlet; import java.io.IOException; import java.io.PrintWriter;

fandoudou123的专栏 4448

使得一个servlet可以处理多个请求对象(BaseServlet)

BaseServlet是用来作为其它Servlet父类的,它有如下两个优点: 一个Servlet多个处理方法 BaseServlet的作用是用来简化Servlet。通过我们需要为每个功能编写一个Servlet,例如用户注册写一个RegistServlet,用户登录写一个LoginServlet。如果使用BaseServlet,那么我们可以只写一个UserServlet,然后让UserSe...

WonderKing'blog 614

一个Servlet处理多个请求(转载)

一、为什么要使用一个Servlet来处理多个请求? 当浏览器发送了一次请求到服务器时,servlet容器会根据请求的url-pattern找到对应的Servlet类,执行对应的doPost或doGet方法,再将响应信息返回给浏览器,这种情况下,一个具体的Servlet类只能处理对应的web.xml中配置的url-pattern请求,一个Servlet类,一对配置信息。如果业务扩展,需要三个Ser...

zamaochick的博客 402

实现一个servlet处理多个请求

实现一个servlet处理多个请求 一开始我们学习servlet的时候都是一个servlet处理一个请求,这样导致发现最后会创建很多类出来,不好维护。这里这里我们用反射来解决这个问题了,用一个servlet处理多个请求。 首先创建一个基础servlet—BaseServlet public class BaseServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpSer

xiaozhuzhuyang的博客 1037

多个请求共用一个Servlet

之前在练习的时候因为请求少一直没注意过这个问题,就直接一个请求新建一个Servlet,但是如果请求多了以后就会发现,需要不停的创建新的servelet以及不停的在web.xml中配置servelt,会导致项目看起来十分的杂乱,严重降低效率。于是就需要去思考,如何将一系列的请求用一个servelt封装起来。 实现多个请求公用一个servelt有两种方法 方法一 在每一个请求后面跟上?me...

珈凝的博客 1081

servlet如何同时处理多个请求

Servlet如何处理多个请求访问?  Servlet容器默认是采用单实例多线程的方式处理多个请求的:  1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在一个Servlet实例);  2.容器初始化化Servlet主要就是读取配置文件(例如tomcat,可以通过servlet.xml的设置线程池中线程数目,初始化线程池通过web.xml,初始化每个...

1879

Servlet如何处理请求

servlet是如何处理传来的不同的请求的呢? 我们首先要对servlet的生命周期有一个了解! servlet生命周期 新建一个web项目,new一个servlet,这里叫做TestServlet. 在TestServlet中重写构造方法,init,service,doGet,doPost,destory等方法. package com.jd.servlet; import java.io....

wllana的博客 8457
上一篇: Servlet(四):转发与重定向、路径问题
下一篇: Servlet(六):连接数据库,完整的CRUD
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值