写了个简单的 MVC 框架

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

前言

前些日子写的轻量级 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 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • ftonz

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

  • 其他回帖
  • vanlin

    强大,这个有意思

  • sofayfay

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

    1 回复
  • 都是大佬

  • 查看全部回帖