我们学Java知识的时候学过反射机制,主要是用来获取调用类的成员变量、构造器、方法,还可以实例化对象,只要是想获取的就可以得到,在这里相对来说它是强大的,具有很大的灵活性。但是它会破坏安全性,打破封装性。然而再强大的东西都有软肋,它的软肋就是枚举,只有枚举类可以防止反射,Java虚拟机会在底层保护它,保护它不会反射,可以天然的防止反射和反序列化。
利用反射获取Servlet中要执行的方法:
下面我们在servlet中通过反射来减少区分方法的代码,封装一个BaseServlet工具类。这个类要继承HttpServlet,然后重写HttpServlet中的service方法,设置请求的字符编码格式,获取客户端提交到服务端的Type对应的方法,判断方法是否为空,为空的话就返回默认方法execute,返回的是null值。接下来定义一个变量,用来存放功能执行完之后要跳转的路径。然后获取子类字节码对象,获取字节码对象中名称为type的方法,如果方法名不为null,就调用找到的方法,也可以判断一下要跳转的路径不为null时,请求到服务端的跳转,如果servlet不用到请求到页面的跳转,也可以不用判断。
详细代码:
public class BaseServlet extends HttpServlet{
/**
* 重写service方法
*/
@Override
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding(