您的位置:首页 > 运维架构

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

2017-12-09 17:38 1016 查看
在jsp页面中调用sevlet中某个方法,比较麻烦。

因为创建的Servlet默认继承
HttpServlet
,在
HttpServlet
默认访问service方法,没有重写service方法,根据是get请求还是post请求,再去访问
doGet
或者
doPost
方法。这样导致整个Servlet结构入口只有一个,代码逻辑比较臃肿。

解决的思路就是:过滤器

解决办法

自定义BaseServlet

自定义一个
BaseServlet
继承
HttpServlet


重写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
参数即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: