反射优化servlet层

客户端每次发送请求时都会执行我们写的servlet的service方法然后响应结果,每次实现一个功能我们就要新建一个servlet来实现功能,这样就会出现功能没写多少类创建了不少

为了让一个servlet实现多个方法,可以通过反射来调用

我们定义一个类来让它继承HttpServlet然后让servlet层所有的类继承它

在执行时子类由于没有service方法就会取父类找到service

这样还可以初始化浏览器请求与响应的乱码问题

public class BaseServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF8");
        resp.setCharacterEncoding("UTF8");
        resp.setContentType("text/html; charset=UTF8");
}

通过浏览器输入的路径来获取我们想要调用的方法名

//获取路径名

String uri = req.getRequestURI();

//截取/最后的路径,获得方法名

String substring = uri.substring(uri.lastIndexOf("/") + 1);

然后找到对应子类,获取对应的实例方法方法

//通过路径反射调用子类的对应的方法
        //获取子类类对象

Class<? extends BaseServlet> aClass = this.getClass();
//通过反射获取类对象对应的实例方法
Method declaredMethod = aClass.getDeclaredMethod(substring, HttpServletRequest.class, HttpServletResponse.class);
    //调用实例方法
declaredMethod.invoke(this,req,resp);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值