项目实战2:编写类

78 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

这篇文章将会带来这个图书管理系统的类规范

前端:

该项目我是通过IDEA的maven进行构建的。因此前端资源放在了webapp下。

后台:

后台代码我放在了maven项目中的java包。

util放置工具类的包,此包中的类以后可以复用

entity放置实体类的包,此包中的类是跟数据库表的字段一一对应的

dao放置与数据库交互的类的包,对于数据库的增删改查的操作都在这里

service放置处理业务逻辑的代码,隔离dao层与controller

controller放置与服务对外暴露的接口,即继承于HttpServlet的类

util层

在该层中我写了连接到数据库的工具类,由于不能使用连接池技术,只能手写这个连接到数据库的工具类,在该类中封装了获取连接和关闭连接的方法,可以实现一定的解耦

entity层

在该层中创建的实体类的属性与数据库表中的属性一一对应

dao层

该层下还有个impl包用来实现dao接口,达到解耦的目的,在该层中都是关于后台连接到db的操作,

service层

用来实现impl中的方法,并进行单元测试

controller层

在该层中,我创建了个BaseServlet用来判断所调用的servlet,好处是关于user或是book的操作只用2个类就可以完成。BaseServlet的代码如下

public class BaseServlet extends HttpServlet {
    //根据请求的最后一段路径进行方法分发
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取请求路径
        //2.获取最后一段路径,方法名
        String uri = req.getRequestURI();//此时获取到的是/brand-case/brand/selectAll
        int index = uri.lastIndexOf('/');
        String methodName = uri.substring(index+1);//  index:/selectAll index+1:selectAll
        //3.执行方法
        //3.1获取BrandServlet字节码对象Class,利用反射
        Class<? extends BaseServlet> cls = this.getClass();

        try {
            //3.2获取方法Method对象
            Method method = cls.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            //3.3执行方法
            method.invoke(this,req,resp);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

继承于HttpServlet,通过java基础知识来获取到相应的方法名,并进行相应的调用。该技术的关键在于反射技术的运用。通过反射来调用网址,十分完美地解决了controller层下类冗余的问题,也合理地运用了Java基础知识来解决问题。通过反射调用方法还能更好地进行解耦,在后期,我还会加入监视器来完成该方法禁止调用前端页面。写完该类后,操作user的userController只需要继承于BaseServlet就可以完成方法的调用,在userController的类上加入@WebServlet("/user/*")注解,这样子操作其他如bookController时不会起冲突。