写了个简单的 MVC 框架

本贴最后更新于 2289 天前,其中的信息可能已经天翻地覆

前言

前些日子写的轻量级 MVC 框架已经写得差不多了,基于 Servlet,同时我也封装了 JDBC 来提供对数据库的访问。当初写这个框架是为了了解 servlet 是如何工作的,同时也作为自己的一个小项目,思路参考了《架构探险:从零开始写 Java Web 框架》。虽然写这个框架只是作为学习之用,但后面还是会继续完善和优化。附上 Github 地址

快速使用

Maven

<dependency> <groupId>group.jbee</groupId> <artifactId>jbee-framework</artifactId> <version>1.0.1</version> </dependency>

还未上传 Maven 仓库,找不到依赖可 clone 本项目,执行 mvn
install 打包到本地仓库。也可以直接下载 jar 包,点此下载

其他依赖

MySQL 驱动

<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.33</version> </dependency>

配置文件

在 resource 目录下新建 jbee.properties 配置文件,配置项如下

/***JDBC 驱动*/ jbee.framework.jdbc.driver=com.mysql.jdbc.Driver /***JDBC URL*/ jbee.framework.jdbc.url=jdbc:mysql://localhost:3306/jbee /***JDBC 用户名*/ jbee.framework.jdbc.username=root /***JDBC 密码*/ jbee.framework.jdbc.password=123456 /***JDBC 连接池最大数量*/ jbee.framework.jdbc.max=5 /***JDBC 连接池最小数量*/ jbee.framework.jdbc.min=2 /***应用基础包名*/ jbee.framework.app.base_package=group.jbee.jbeedemo /***JSP路径*/ jbee.framework.app.jsp_path=/view/ /***静态资源路径*/ jbee.framework.app.static_path=/static/

当然,还有 web.xml 配置

<servlet-mapping> <servlet-name>defaultservlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>defaultservlet</servlet-name> <servlet-class>group.jbee.framework.DispatcherServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet>

以上就是所有必要的配置,下面看如何使用

IOC

IOC 是 Spring 的核心,Jbee 也实现了一个简单的 IOC 容器。
使用注解 @Inject 修饰需要注入的类。

示例代码:

@Controller public class HelloAction { @Inject private UserService userService; ...... }
@Service public class UserService { @Inject UserMapper userMapper; public List<User> getUserInfo(User user){ return userMapper.getUserInfo(user); } public void createUser(User user){ userMapper.createUser(user); } }

Controller

与 Spring MVC 差不多,使用 @Controller 注解来修饰控制器类,使用 @Action 注解来匹配 URL

示例代码:

@Controller public class HelloAction { @Inject private UserService userService; //返回json数据 @Action("POST:/Action1") public Data action1(Param param){ Map<String,Object> params = param.getMap(); String name = (String) params.get("name"); User user= new User(); user.setName(name); Data data=new Data(userService.getUserInfo(user)); return data; } //返回jsp页面 @Action("GET:/Action2") public View action1(){ View view = new View("hello.jsp"); //使用EL表达式${data}取值 view.setModel("data","HelloJbee!"; return view; } }

DAO

持久层与 Mybatis 类似,只需编写 DAO 接口以及 SQL 语句,目前只支持静态 SQL,用占位符#{}来设置参数。接口用注解 @Repository 声明,方法用 @Select、@Insert、@Delete、@Update 来声明。

示例代码:

@Repository public interface UserMapper { @Select("select * from users where name=#{name}") List<User> getUserInfo(User user); @Insert(value = "insert into users(name,password) values(#{name},#{password})") void createUser(User user); }

最后

将项目打 war 包,放到 Tomcat 等 servlet 容器里就可以跑起来了。

寒假比较摸,AOP 还没写-。-,会尽快写完吧,毕竟大三下又要很忙了。

框架实现原理后面我也会分享在博客里。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3195 引用 • 8215 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • vanlin via DUK-AL20

    强大,这个有意思

  • 其他回帖
  • ftonz

    如果按照书中所写,是自己实现的。那个 DI 比较简单,有个约定:所有的 class 都是无构造函数的,注入都是依靠 @inject 注解进行属性注入。类和实例用一个 Dictionary 管理保存

  • sofayfay via macOS

    bean 的查找和加载是自己实现的还是使用 spring?

    1 回复
  • someone9891 via macOS

    都是大佬

  • 查看全部回帖