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

来源:互联网 发布:淘宝导航设置颜色代码 编辑:程序博客网 时间:2024/06/03 03:15

在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参数即可。

原创粉丝点击