BaseServlet 利用反射定位方法


BaseServlet 原理

1. BaseServlet

package com.regino.test;

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.InvocationTargetException;
import java.lang.reflect.Method;

public class BaseServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 獲取客戶調用的方法
        String action = request.getParameter("action"); // 獲取要調用的方法名
        try {
            // 獲取當前類的字節碼對象
        /*
          getDeclaredMethod(methodName,Class types)
                參數1:方法名
                參數2:方法的參數類型
         */
            Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
            //執行方法
            //爲了防止方法是私有的,可以使用暴力反射
            method.setAccessible(true);
        /*
          invoke(obj,args)
            obj: 調用方法的對象
            args: 調用該方法需要的實參
         */
            method.invoke(this,request,response);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }

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

2. UserServlet

  • 繼承 BaseServlet 後直接寫方法就可以了。
package com.regino.travel.web.servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.regino.travel.domain.ResultInfo;
import com.regino.travel.domain.User;
import com.regino.travel.service.UserService;
import com.regino.travel.service.impl.UserServiceImpl;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.RandomStringUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

@WebServlet("/UserServlet")
public class UserServlet extends BaseServlet {

    // 註冊
    protected void register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ...
    }
}

原文鏈接:https://qwert.blog.csdn.net/article/details/106248363

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章