Servlet的代码优化,让代码具有复用性将代码耦合性降低,每添加一个方法方法就要多添加一个servlet这样很浪费空间,所以我们要把所有方法放在一个类里面,用方法名来判断该用那个方法,这样提高了代码

本文介绍了一种优化Servlet的方法,通过创建一个基类`BaseServlet`,使用反射根据请求路径调用相应的方法,减少大量独立Servlet的创建。示例中展示了如何将Brand相关操作集中到一个Servlet中,提高代码复用性和效率。此外,还提到路径设置为`/brand/*`以接收不同请求。
摘要由CSDN通过智能技术生成

列如:

每一个添加方法

BrandServletAdd

BrandSelectAll

非常的浪费资源

所以我们把每个方法都提取到一个类里面就想Mapper接口一样

public interface BrandMapper {
    @Select("select * from tb_brand")
    @ResultMap("brandResultMap")
    List<Brand> selectAll();

    @Insert("insert into tb_brand values(null,#{brandName},#{companyName},#{ordered},#{description},#{status})")
    void add(Brand brand);

    @Select("select * from tb_brand where id = #{id}")
    @ResultMap("brandResultMap")
    Brand selectById(int id);

    @Update("update tb_brand set brand_name = #{brandName},company_name = #{companyName},ordered = #{ordered},description = #{description},status = #{status} where id = #{id}")
    void Update(Brand brand);

    @Delete("delete from tb_brand where id = #{id}")
    void deleteById(int id);
}

所以我们可以换一种思路来写创建一个类继承

public class BaseServlet extends HttpServlet{}

把方法名字的路径和方法名字写成一样,方待会反射调用方法列如路径名字是selectAll

我们就可以把他当做方法名传给反射里面的 getMethod 就可获取到该方法

这样就不用创建过多的类了案列如下

public class BaseServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String s = req.getRequestURI();
        int i = s.lastIndexOf("/");
        String u = s.substring(i + 1);
        Class<? extends BaseServlet> aClass = this.getClass();
        try {
            Method method = aClass.getMethod(u, HttpServletRequest.class, HttpServletResponse.class);
            method.invoke(this,req,resp);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

 以上是获取地址然后拆分获取到路径最后一位,就是方法名字啦

然后在设置一个类比如Brand继承着现在这个类

@WebServlet("/brand/*")
public class BrandServlet extends BaseServlet{
    private BrandServletImpl bs = new BrandServletImpl();
    public void selectAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Brand> brands = bs.selectAll();
        String s = JSON.toJSONString(brands);
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(s);
    }
    public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        BufferedReader reader = request.getReader();
        String s = reader.readLine();
        System.out.println(s);
        Brand brand = JSON.parseObject(s, Brand.class);
        BrandServletImpl brandServlet = new BrandServletImpl();
        brandServlet.add(brand);
        response.getWriter().write("ok");
    }
}

记住路径一定要 /brand/* 用通配符这样可以接收一切的路径

总结:每添加一个方法方法就要多添加一个servlet这样很浪费空间,所以我们要把所有方法放在一个类里面,用方法名来判断该用那个方法,这样提高了代码的复用性

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值