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