关于多个请求调用同一个Servlet

 1 package com.ouyang.dao;
 2
 3 import java.io.IOException;
 4 import java.lang.reflect.InvocationTargetException;
 5 import java.lang.reflect.Method;
 6
 7 import javax.servlet.ServletException;
 8 import javax.servlet.annotation.WebServlet;
 9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12
13 import org.apache.catalina.filters.AddDefaultCharsetFilter;
14
15 @WebServlet("*.do")
16 public class CustomerServlet extends HttpServlet {
17     private static final long serialVersionUID = 1L;
18
19     protected void doGet(HttpServletRequest request,
20             HttpServletResponse response) throws ServletException, IOException {
21         doPost(request, response);
22     }
23
24     protected void doPost(HttpServletRequest request,
25             HttpServletResponse response) throws ServletException, IOException {
26
27         String servletPath = request.getServletPath();
28
29         String methodName = servletPath.substring(1, servletPath.length() - 3);
30
31         try {
32             Method method = getClass().getDeclaredMethod(methodName,
33                     HttpServletRequest.class, HttpServletResponse.class);
34             method.invoke(this, request, response);
35         } catch (Exception e) {
36             e.printStackTrace();
37         }
38
39     }
40
41     private void add(HttpServletRequest request, HttpServletResponse response) {
42         System.out.println("add");
43
44     }
45
46     private void query(HttpServletRequest request, HttpServletResponse response) {
47         System.out.println("query");
48
49     }
50
51     private void delete(HttpServletRequest request, HttpServletResponse response) {
52         System.out.println("delete");
53
54     }
55 }

 1 <%@ page language="java" contentType="text/html; charset=utf-8"
 2     pageEncoding="utf-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10     <a href="add.do">Add</a>
11     <br>
12     <br>
13
14     <a href="query.do">Query</a>
15     <br>
16     <br>
17
18     <a href="delete.do">Delete</a>
19     <br>
20     <br>
21
22 </body>
23 </html>

难点有二:
  1.url-pattern 采用" .do   "来映射

  2.采用反射机制调用对应的方法

优点:

  1.便于维护

时间: 2024-11-09 13:16:05

关于多个请求调用同一个Servlet的相关文章

多个请求使用同一个Servlet

多个请求使用同一个Servlet 如果JSP中一个请求对应一个Servlet那要建很多Servlet,代码冗余较多. 我们可以把一个模块的请求封装在一个Servlet,实现功能的模块化,从而简化代码. 方法/步骤 1 1.新建test.jsp文件 2 2.输入如下代码,分别是3个请求,请求同一个Servlet,但是后边跟的参数method不同 3 3.新建CustomerServlet 4 4.代码如下,重点看红框标记的代码 因为增删改查的操作既有doGet 又有doPost,为了简化代码,我们

多个请求使用同一个 Servlet

方法一: UserServlet 的url-pattern:userServlet 添加:userServlet?method=add  查询:userServlet?method=query  删除:userServlet?method=delete 我们可以获取 method 请求参数的值,根据 method 的值调用对应的方法 方法二: UserServlet 的url-pattern:*.do 添加:add.do查询:query.do删除:delete.do 我们可以首先获取 servl

J2EE请求与响应—Servlet

一.什么是Servlet? Servlet是运行Web服务器上的一个特殊Java类,其特殊用途是响应客户端请求并做出处理,使得客户端与服务器端进行交互. 二.生命周期  Servlet生命周期是通过Web容器控制,主要分为以下几个阶段: 创建servlet的实例 初始化阶段,调用init()方法 响应请求,调用service()方法 销毁实例,调用destroy()方法 实例垃圾回收,调用finalize()方法  三.Servlet中几个重要的方法: 在Servlet生命周期中,servlet

Tomcat源码解读:我们发起的HTTP请求如何到达Servlet的

在上一节中,了解了Tomcat服务器启动的整个过程,现在来了解一下Tomcat如何接收到HTTP请求,并将请求送达至Servlet,Servlet处理后,响应信息又是如何返回给浏览器的呢?这两个问题是接下来要研究的课题,本节先研究第一个问题. 了解一点点网络知识的人,都会知道TCP连接通信是基于Socket的,上一节也有提到这点.通过上一节的说明,可以了解到Tomcat服务器在内部已经使用Endpoint类封装了Socket. 本篇会包含大量的源码解读说,由于篇幅原因,就将源码折叠起来,如果想了

ajax 请求调用问题

http://localhost/dev/list 和  http://127.0.0.1/dev/list 最近在架构整体常规通用系统的解决方案,遭遇AJAX请求不执行的问题,刚开始以为Spring Security权限设置那里有问题 ajax 请求调用问题: 问题情景: 在http://127.0.0.1/dev/list页面中调用了http://localhost/dev/listUser 接口,,, 使用chrome显示跨域, response for preflight is inva

java多线程下如何调用一个共同的内存单元(调用同一个对象)

1 /* 2 * 关于线程下共享相同的内存单元(包括代码与数据) 3 * ,并利用这些共享单元来实现数据交换,实时通信与必要的同步操作. 4 * 对于Thread(Runnable target)构造方法创建的线程,轮到它来享用CPU资源时. 5 * 目标对象就会自动调用接口中的run()方法 6 * */ 7 8 /* ----------------举例子------------------- */ 9 10 /* 11 * 使用Thread类创建两个模拟猫和狗的线程,猫和狗共享房屋中的一桶

C# 使用 HttpPost 请求调用 WebService

原文:C# 使用 HttpPost 请求调用 WebService 之前调用 WebService 都是直接添加服务引用,然后调用 WebService 方法的,最近发现还可以使用 Http 请求调用 WebService.这里还想说一句,还是 web api 的调用简单. WebService 服务端代码: public class WebServiceDemo : System.Web.Services.WebService { [WebMethod] public string Hello

怎么在yar的server端任何地方获得client请求调用的方法

先说下碰到的问题吧:上周调查个问题发现,在rpc server端解析client上传上来的post数据,解包,找函数,执行都在Yar_Server的函数handle中执行了.没有向后面的系统或者服务传递上下文的方法.为了调查问题我们只能在函数调用里面记录哪个方法被调用了. 那么是不是可以在Yar_Server里面试着增加个静态变量保存内容,限于自身能力,现只增加了一个方法,返回了调用的method,用于server端向后面传递. 如下, 小改之后就可以通过 Yar_Server::getCall

多线程调用同一个方法,局部变量会共享吗

对于一个局部变量应该是各线程独立的,一个线程不会改变另一个线程的临时变量. 多线程时, 几个线程间输出信息是交叉在一起的, 但你又没有区分是哪个线程输出的, 所以你自己就误认为是同一个线程输出的东西被改变了.  实际上是你自己的理解错误. 所有线程都用cout输出内容,你如何判断哪些内容是哪个线程输出的,而且cout是一个全局变量,多线程同时访问需要加锁,否则会出现一些莫名其妙的情况 结论: 局部变量是不会被修改的,而全局变量则很容易就被修改了,而你却还不知道. ////////////////