前言
最近使用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();
}
}
执行效果