package com.wenhao.web.servlet;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("all")
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决请求中文乱码
req.setCharacterEncoding("utf-8");
//解决响应中文乱码
resp.setContentType("text/html;charset=utf-8");
try {
//1 获得请求的method的名称
String methodName = req.getParameter("method");
//2 获得当前对象的class this->哪个类继承BaseServlet就代表那个对象
Class clazz = this.getClass();
//3 获得当前字节码中指定的方法
Method method = clazz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
//4 执行获得的方法
method.invoke(this, req,resp);
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("all")
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决请求中文乱码
req.setCharacterEncoding("utf-8");
//解决响应中文乱码
resp.setContentType("text/html;charset=utf-8");
try {
//1 获得请求的method的名称
String methodName = req.getParameter("method");
//2 获得当前对象的class this->哪个类继承BaseServlet就代表那个对象
Class clazz = this.getClass();
//3 获得当前字节码中指定的方法
Method method = clazz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
//4 执行获得的方法
method.invoke(this, req,resp);
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}

本文介绍了一个名为BaseServlet的类的设计与实现细节,该类通过反射机制实现了动态调用不同方法的功能,有效解决了Web应用中请求分发的问题。文章重点介绍了如何通过HttpServletRequest获取请求参数并确定要调用的方法名,然后利用反射机制执行相应的方法。
933

被折叠的 条评论
为什么被折叠?



