携手创作,共同成长!这是我参与「掘金日新计划 · 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时不会起冲突。