當(dāng)瀏覽器發(fā)送了一次請求到服務(wù)器時,servlet容器會根據(jù)請求的url-pattern找到對應(yīng)的Servlet類,執(zhí)行對應(yīng)的doPost或doGet方法,再將響應(yīng)信息返回給瀏覽器,這種情況下,一個Servlet類,一對配置信息。多個業(yè)務(wù), 就需要多個Servert類, 效率太低下, 實際上我們是可以通過一個Servlet類實現(xiàn)多個業(yè)務(wù)請求的
這里通過類的反射機制及invoke方法來實現(xiàn)一Servlet類多請求的操作實例
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Method; @WebServlet(name = "ServletDoMore", value = "/domore/*") public class ServletDoMore extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 獲取請求的URI地址信息 String url = request.getRequestURI(); // 截取其中的方法名 String methodName = url.substring(url.lastIndexOf("/")+1); System.out.println(methodName); // 使用反射機制獲取在本類中聲明了的方法 Method method = null; try { method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); method.invoke(this, request, response); } catch (Exception e) { System.out.println("方法不存在"); } } private void add(HttpServletRequest request, HttpServletResponse respons)throws ServletException, IOException{ System.out.println("添加表單"); } private void addsave(HttpServletRequest request, HttpServletResponse respons)throws ServletException, IOException{ System.out.println("信息保存"); } private void update(HttpServletRequest request, HttpServletResponse respons)throws ServletException, IOException{ System.out.println("修改表單"); } private void updatesave(HttpServletRequest request, HttpServletResponse respons)throws ServletException, IOException{ System.out.println("修改保存"); } private void index(HttpServletRequest request, HttpServletResponse respons)throws ServletException, IOException{ System.out.println("信息列表"); } }
請求不同的地址如下就會訪問對應(yīng)的方法
http://localhost/domore/add http://localhost/domore/addsave http://localhost/domore/update http://localhost/domore/updatesave http://localhost/domore/index