封装Servlet,跳过service,doPost,doGet直接写方法

本文介绍了一种改进的JSP调用Servlet方法的方式。通过自定义BaseServlet类并使用反射机制,使得可以在一个Servlet中实现多个业务方法,并通过URL参数指定调用哪个方法,从而避免了代码臃肿。

在jsp页面中调用sevlet中某个方法,比较麻烦。
因为创建的Servlet默认继承HttpServlet,在HttpServlet默认访问service方法,没有重写service方法,根据是get请求还是post请求,再去访问doGet或者doPost方法。这样导致整个Servlet结构入口只有一个,代码逻辑比较臃肿。
解决的思路就是:过滤器

解决办法

自定义BaseServlet

  1. 自定义一个BaseServlet继承HttpServlet
  2. 重写service方法。在service方法中,首先获得传入的method参数,知道需要调用的是哪个方法,然后通过反射机制,去获得servlet指定的方法,最后用method对象的.invoke方法来执行该方法。

BaseServlet代码如下:

@SuppressWarnings("all")
public class BaseServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        try {
            //1 获得请求的method的名称
            String methodName = request.getParameter("method");

            //2 获得当前被访问的对象的字节码对象
            Class clazz = this.getClass();//ProductServlet.class

            //3 获得当前字节码对象中的指定方法
            Method method = clazz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);

            //4 通过反射的方法 执行相应的功能方法
            method.invoke(this, request,response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

Servlet继承BaseServlet

public class myServlet extends BaseServlet{
    public void myMethod(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException{
                ······;
            }
}

jsp调用Servlet方法

在jsp中调用方法只要在url中添加method=myMethod参数即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值