servlet代码的抽取

一个web项目通常有很多servlet,不便于管理,所以可以通过抽取代码,再分层,方便管理

第一种方法:将servlet文件抽取到了一个类中,一个servlet变成一个方法,通过参数调用相应的方法,与商品有关的servlet放到一起

public class PrdocutServlet extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


//获得请求的哪个方法的method
String methodName = request.getParameter("method");


if("productList".equals(methodName)){


productList(request,response);


}else if("categoryList".equals(methodName)){


categoryList(request,response);
}

}


public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
 
public void productList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

public void categoryList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

public void productList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}


第二种方法:思考:如何通过方法名就调用相应方法,就不用上面的else if语句呢?反射就可以做到,这种方法就是第一种的改进,红色代码是第一种方法改动的代码,并且删除了doget和dopost方法

public class PrdocutServlet extendsBaseServelt {

 
public void productList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

public void categoryList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

public void productList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

此时请求来到productServlet,没找到service方法,就去找父类,创建一个父类,在父类中调用的this代表的是当前对象,就是自己

public class BaseServlet extends HttpServlet {


@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

req.setCharacterEncoding("UTF-8");

try {
//1、获得请求的method的名称
String methodName = req.getParameter("method");
//2、获得当前被访问的对象的字节码对象
Class clazz = this.getClass();//ProductServlet.class ---- UserServlet.class
//3、获得当前字节码对象的中的指定方法
Method method = clazz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
//4、执行相应功能方法
method.invoke(this, req,resp);

} catch (Exception e) {
e.printStackTrace();
}

}
}

此时,找到了service,通过反射调用方法,好处是要加入与productServelt同级的userServlet方法块时,直接继承父类BaseServlet就可以
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值