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

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

前言

最近使用JSP做一个小项目,遇到一个问题,一个servlet只能处理一个请求,一个项目有几十个请求那么就需要几十个servlet,这样显然不是我们想要的。像SSM框中的Controller,可以实现一个Controller能处理多个请求。参考网上大牛的思想,利用反射技术实现一个servlet处理多个请求。

代码

模拟实现用户的增删改查效果。
1.项目的工程结构如下:
在这里插入图片描述
2.index.jsp中的代码

<body>
	<a href="PersonServlet?method=getPersons">列出所有用户信息</a>
	<br>
	<a href="PersonServlet?method=addPerson">添加用户</a>
	<br>
	<a href="PersonServlet?method=updatePerson">修改用户</a>
	<br>
	<a href="PersonServlet?method=deletePerson">删除用户</a>
	<br>
	<a href="PersonServlet?method=getPerson">根据id查询用户</a>
	<br>
</body>

3.PersonServlet代码

package com.gdpi.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/PersonServlet")
public class PersonServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	// 一个servlet处理多个请求:通过在请求时加参数,然后在servlet中获取请求的参数,然后调用对应的方法。

	// 获取对应的请求参数
	String methodName = request.getParameter("method");
	try {
		// 利用反射技术获得方法
		Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class,
				HttpServletResponse.class);
		// 如果方法是proteced,必须进行如下操作
		// method.setAccessible(true);
		// 执行相应的方法
		method.invoke(this, request, response);
	} catch (Exception e) {
		e.printStackTrace();
	}

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {

	doGet(request, response);
}

// 添加用户
public void addPerson(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	System.out.println("执行添加用户。。。。。。。。。。。。");
	response.setContentType("text/html; charset=utf-8");
	PrintWriter out = response.getWriter();
	out.print("<h1>执行添加用户!</h1>");
	out.flush();
	out.close();
}

// 修改用户
public void updatePerson(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	System.out.println("执行修改用户。。。。。。。。。。。。");
	response.setContentType("text/html; charset=utf-8");
	PrintWriter out = response.getWriter();
	out.print("<h1>执行修改用户!</h1>");
	out.flush();
	out.close();
}

// 删除用户
public void deletePerson(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	System.out.println("执行删除用户。。。。。。。。。。。。");
	response.setContentType("text/html; charset=utf-8");
	PrintWriter out = response.getWriter();
	out.print("<h1>执行删除用户!</h1>");
	out.flush();
	out.close();
}

// 根据id查询用户
public void getPerson(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	System.out.println("执行根据id查询用户。。。。。。。。。。。。");
	response.setContentType("text/html; charset=utf-8");
	PrintWriter out = response.getWriter();
	out.print("<h1>执行根据id查询用户!");
	out.flush();
	out.close();
}
//列出所有的用户
public void getPersons(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	System.out.println("执行查询所有的用户。。。。。。。。。。。。");
	response.setContentType("text/html; charset=utf-8");
	PrintWriter out = response.getWriter();
	out.print("<h1>执行查询所有的用户!</h1>");
	out.flush();
	out.close();
}
}

执行效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值