方法一

可以通过在请求的时候加上参数,然后在servlet中获取请求的参数,再去调用对应的方法。达到一个servlet处理多个请求的目的

test.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'test.jsp' starting page</title>
</head>
<body>
<!--
请求的时候加上对应的请求参数
-->
<a href="customerServlet?method=add"> Add</a>
<br>
<br>
<a href="customerServlet?method=query"> Query</a>
<br>
<br>
<a href="customerServlet?method=delete"> Delete</a>
</body>
</html>

CustomerServlet.Java:

package com.aaa.mvcapp.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class CustomerServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取对应的请求参数
String method = request.getParameter("method");
//根据请求参数去调用对应的方法。
if ("add".equals(method)) {
add(request, response); } else if ("query".equals(method)) {
query(request, response);
} else if ("delete".equals(method)) {
delete(request, response);
}
} private void delete(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
System.out.println("delete"); } private void query(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
System.out.println("query");
} private void add(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
System.out.println("add"); }
}

方法二

1.在servlet的mapping中配置为 *.do来响应多个请求 
2. 在servlet中获取servletPath。(例如/=add.do) 
3. 去除/ 和.do,利用反射再去调用对应的方法。

web.xml(servlet配置):

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

test.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'test.jsp' starting page</title>
</head>
<body>
<a href="add.do"> Add</a>
<br>
<br>
<a href="query.do"> Query</a>
<br>
<br>
<a href="delete.do"> Delete</a>
</body>
</html>

CustomerServlet.java:

package com.aaa.mvcapp.servlet;

import java.io.IOException;
import java.lang.reflect.Method; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class CustomerServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // 获取方法名字
String servletPath = request.getServletPath();// /xxxxxx.do
// 去掉斜杠和.do
String methodName = servletPath.substring(1, servletPath.length() - 3);// xxxxxx try {
// 利用反射获取方法
Method method = getClass().getDeclaredMethod(methodName,
HttpServletRequest.class, HttpServletResponse.class);
// 执行相应的方法
method.invoke(this, request, response);
} catch (Exception e) {
// TODO: handle exception
}
} private void delete(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
System.out.println("delete"); } private void query(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
System.out.println("query");
} private void add(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
System.out.println("add"); }
}

这样一来不同的请求可以会用同一个servlet来处理,在servlet内部为不同的请求分别有不同的方法去处理。

一个servlet处理多个请求(使用Method的反射机制)的更多相关文章

  1. 如何用一个servlet处理多个请求

    一个servlet处理多个请求,原理:利用反射机制获取在selvlet类中的其他方法1.前端页面<%@ page language="java" contentType=&q ...

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

    一.为什么要使用一个Servlet来处理多个请求? 当浏览器发送了一次请求到服务器时,servlet容器会根据请求的url-pattern找到对应的Servlet类,执行对应的doPost或doGet ...

  3. 【WEB小工具】BaseServlet—一个Servlet处理多个请求

    package cn.itcast.test.web.servlet; import java.io.IOException; import java.io.PrintWriter; import j ...

  4. BaseServlet,让一个servlet处理多个请求

    BaseServlet 第一次学习servlet的时候是跟着传智播客免费的教学视频,其中崔希凡讲的是我学过自认讲的最好的一位,BaseServlet也是跟着他写过一次,当时很多东西不能理解,后来慢慢发 ...

  5. 怎么在一个servlet中实现多个功能 ?如何使一个Servlet处理多个请求?

    自学javaweb一直不知道一个servelt可以有多个功能!看了别人代码才知道这个可以有! 平时你建立servelt时候你会吧doget和dopost这两个勾上,要想实现多个功能,你不必要勾选dog ...

  6. 一个servlet如何处理多个请求

    页面1:表单的action=login?method=login 页面2:表单的action=login?method=insert ..... 然后通过method的值采用不同方法进行处理. 如下 ...

  7. 一个servlet处理多个请求或者叫方法

    http://blog.csdn.net/qq_25201665/article/details/52037607

  8. Tomcat是一个Servlet容器?

    "Tomcat是一个Servlet容器",这句话对于2019年的程序员应该是耳熟能详的. 单纯的思考一下这句话,我们可以抽象出来这么一段代码: class Tomcat { Lis ...

  9. (二)第一个Servlet

    一.预备知识 一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个 ...

随机推荐

  1. Python快速学习-获取对象信息

    1type() 获取对象的基本类型,判断两个对象类型. 2types 判断对象是否是函数,使用前要引入import types 3isinstance() 判断class类型,判断一个变量是否是某种类 ...

  2. js状态模式

    状态模式,当一个对象的内在状态改变时允许改变其行为,这个对象看起来是改变了其类. 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类当 ...

  3. hdu2243 ac自动机+矩阵快速幂

    和上一题有点相似,但是这题是求包含的,并且还要求和 可以求所有情况-不包含的情况,所有情况可用矩阵快速幂求得 还有一点就是如果题目说答案余2^64,直接开unsigned long long就行了,会 ...

  4. hdu 5237 Base64(模拟)

    Base64 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  5. Elasticsearch使用积累

    常用插件 Head查看分片情况,操作简单api Bigdesk监控所在机器的CPU,IO,JVM等指标,简单分片概览 KOPF查看集群gc回收磁盘性能, 分片情况, 简单操作api, 感觉该插件较He ...

  6. Django-form补充

    Django_form补充 问题1:  注册页面输入为空,报错:keyError:找不到password def clean(self): print("---",self.cle ...

  7. Eclipse插件开发_学习_02_GEF入门实例

    一.前言 这一节,我们将会创建一个GEF入门实例 二.新建RCP项目 1. New 一个 Plug-in Project 2.输入项目名 项目名:com.ray.gef.helloworld 3.Co ...

  8. JDBC进行处理大文件和批处理

    package cn.itcast.demo4; import java.io.FileInputStream; import java.io.FileOutputStream; import jav ...

  9. main函数的参数的用法

    说明:main函数的参数的用法源代码: #include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[] ...

  10. 1110. Complete Binary Tree (25)

    Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each in ...