Servlet uses reflection to obtain the tool class after the parameter

Servlet uses reflection to obtain the request path? The tool class after the parameters

package cn.itcast.travel.web.servlet;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

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;

/**
 * Created by fei on 2019/11/23.
 */

public class BaseServlet extends HttpServlet {
    
    
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        //System.out.println("baseServlet的service方法被执行了");

        // 完成方法的分发
        // 1.获取请求路径
        String uri = req.getRequestURI();  // /travel/user/add
        //System.out.println("请求的路径"+uri);// /travel/user/add
        // 2.获取方法名称
        String methodName = uri.substring(uri.lastIndexOf('/') + 1);
        //System.out.println("方法名称:"+methodName);// add
        // 3.获取方法对象Method,需要用到反射相关知识
        // 谁调用我?我代表谁
        //System.out.println(this);//UserServlet的对象cn.itcast.travel.web.servlet.UserServlet@41a8098c

        try {
    
    
            Method method = this.getClass().getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
            // 4.执行方法 invoke:调用
            method.invoke(this,req,resp);
        } catch (NoSuchMethodException e) {
    
    
            e.printStackTrace();
        } catch (InvocationTargetException e) {
    
    
            e.printStackTrace();
        } catch (IllegalAccessException e) {
    
    
            e.printStackTrace();
        }

    }

    /**
     * 直接将传入的对象序列化为json,并且写回客户端
     * @param obj
     */
    public void writeValue(Object obj,HttpServletResponse response) throws IOException{
    
    
        ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=UTF-8");
        mapper.writeValue(response.getOutputStream(),obj);
    }

    /**
     * 将传入的对象序列化为json,返回
     * @param obj
     */
    public String writeValueAsString(Object obj) throws JsonProcessingException {
    
    
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(obj);
    }
}

Guess you like

Origin blog.csdn.net/weixin_49092628/article/details/111398212