论坛首页 Java版 企业应用

写了一个简单的MVC框架

浏览 8551 次
精华帖 (0) :: 良好帖 (10) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-08-04

用过一点struts,spring mvc,总觉得不如ROR直接方便,于是,做为练习,写了一个类ROR的简单框架,望大家批评指教。

1、先介绍一下配置,为保证和数据库连接,需要配置actionrecord.properties:

domain_base_class=com.et.ar.ActiveRecordBase

com.et.ar.ActiveRecordBase.driver_class=com.mysql.jdbc.Driver
com.et.ar.ActiveRecordBase.url=jdbc:mysql://localhost/mydb
com.et.ar.ActiveRecordBase.username=root
com.et.ar.ActiveRecordBase.password=soft123456
com.et.ar.ActiveRecordBase.pool_size=2

 进而需要在web.xml中进行配置:

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>com.et.mvc.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>controllerBasePackage</param-name>
            <param-value>controllers</param-value>
        </init-param>
        <init-param>
            <param-name>viewBasePath</param-name>
            <param-value>/WEB-INF/views/</param-value>
        </init-param>
        </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

2、建立模型对象

package models;

import com.et.ar.ActiveRecordBase;
import com.et.ar.Column;
import com.et.ar.Id;
import com.et.ar.Table;
import com.et.ar.Unique;

/**
 *
 * @author Administrator
 */
@Table(name="users")
public class User extends ActiveRecordBase{
    @Id     private Integer id;
    @Column 
    @Unique(message="名称必须唯一")
    private String name;
    @Column private String duty;
    @Column private String remark;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDuty() {
        return duty;
    }

    public void setDuty(String duty) {
        this.duty = duty;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

}

3、编写控制器代码:

package controllers;

import com.et.mvc.JspView;
import java.util.List;
import models.User;

/**
 *
 * @author Administrator
 */
public class UserController extends ApplicationController{
    public void list() throws Exception{
        List<User> users = User.findAll(User.class);
        request.setAttribute("users", users);
    }
    
    public void show() throws Exception{
        User user = User.find(User.class, request.getParameter("id"));
        request.setAttribute("user", user);
    }
    
    public void new_() throws Exception{
        User user = new User();
        request.setAttribute("user", user);
    }
    
    public JspView create() throws Exception{
        User user = User.createModel(User.class, "user", request.getParameterMap());
        System.out.println(user.getName());
        if (user.create()){
            redirect("/User/list.do");
            return null;
        }
        else{
            return new JspView("new_","user",user);
        }
    }
    
    public void edit() throws Exception{
        User user = User.find(User.class, request.getParameter("id"));
        request.setAttribute("user", user);
    }
    
    public JspView update() throws Exception{
        User user = User.find(User.class, request.getParameter("id"));
        user = User.updateModel(user, "user", request.getParameterMap());
        if (user.update()){
            redirect("/User/list.do");
            return null;
        }
        else{
            return new JspView("edit","user",user);
        }
    }
    
    public void destroy() throws Exception{
        User user = User.find(User.class, request.getParameter("id"));
        user.destroy();
        redirect("/User/list.do");
    }
}

4、再来看看视图

4.1 list.jsp

        <h2>用户资料列表</h2>
        <table border="1">
        <thead>
        <tr>
        <th>名称</th>
        <th>职务</th>
        <th>备注</th>
        <th>操作</th>
        </tr>
        </thead>
        <tbody>
        <c:forEach var="user" items="${users}">
        <tr>
        <td>${user.name}</td>
        <td>${user.duty}</td>
        <td>${user.remark}</td>
        <td><a href="edit.do?id=${user.id}">修改</a> <a href="destroy.do?id=${user.id}">删除</a></td>
        </tr>
        </c:forEach>
        </tbody>
        </table>
        
        <p><a href="new_.do">新增用户</a></p>

4.2 new_.jsp

        <h2>新增用户资料</h2>
        <ul>
            <c:forEach var="err" items="${user.errors}">
                <li>${err}</li>
            </c:forEach>
        </ul>
        <form action="create.do" method="POST">
            <jsp:include page="form.jsp"/>
            <input type="submit" value="提交" />
        </form>
        <p><a href="list.do">返回</a></p>

4.3 edit.jsp

        <h2>修改用户资料</h2>
        <ul>
            <c:forEach var="err" items="${user.errors}">
                <li>${err}</li>
            </c:forEach>
        </ul>
        <form action="update.do?id=${user.id}" method="POST">
            <jsp:include page="form.jsp"/>
            <input type="submit" value="提交" />
        </form>
        <p><a href="list.do">返回</a></p>

4.4 form.jsp

<p>名称:<input type="text" name="user[name]" value="${user.name}" /></p>
<p>职务:<input type="text" name="user[duty]" value="${user.duty}" /></p>
<p>备注:<input type="text" name="user[remark]" value="${user.remark}" /></p>

 

这样,实现了基本的CRUD操作。

 

这个框架同时考虑了AJAX的操作,可以返回JsonView, TextView等。

如果覆盖控制器的beforeFilter和afterFilter则可以进行基本的过滤操作。

 

 

   
时间:2008-08-04
为什么现在啊猫啊狗都出书,都写框架,因为这些啊猫啊狗都没看过modle1 modle2,直接框架开始学java的
   
0 请登录后投票
时间:2008-08-04
williamy 写道
为什么现在啊猫啊狗都出书,都写框架,因为这些啊猫啊狗都没看过modle1 modle2,直接框架开始学java的

哈哈
   
0 请登录后投票
时间:2008-08-05
williamy 写道
为什么现在啊猫啊狗都出书,都写框架,因为这些啊猫啊狗都没看过modle1 modle2,直接框架开始学java的


大牛们火之前不也是啊猫啊狗,你这是什么理论。比起啊猫啊写框架,我更加讨厌大牛们将某几个框架奉为标准。

我们的目标当然是创新,而不是盲从。

写框架与写书不一样,框架不好你可以不用,书不好则会害人。所以写框架我觉得应该鼓励。
   
1 请登录后投票
时间:2008-08-05
jasongreen 写道
williamy 写道
为什么现在啊猫啊狗都出书,都写框架,因为这些啊猫啊狗都没看过modle1 modle2,直接框架开始学java的


大牛们火之前不也是啊猫啊狗,你这是什么理论。比起啊猫啊写框架,我更加讨厌大牛们将某几个框架奉为标准。

我们的目标当然是创新,而不是盲从。

写框架与写书不一样,框架不好你可以不用,书不好则会害人。所以写框架我觉得应该鼓励。


严重同意,抱着框架当时髦,而不懂其原理,不管其是否合用的开发人员最可悲
   
1 请登录后投票
时间:2008-08-05
gafking 写道
jasongreen 写道
williamy 写道
为什么现在啊猫啊狗都出书,都写框架,因为这些啊猫啊狗都没看过modle1 modle2,直接框架开始学java的


大牛们火之前不也是啊猫啊狗,你这是什么理论。比起啊猫啊写框架,我更加讨厌大牛们将某几个框架奉为标准。

我们的目标当然是创新,而不是盲从。

写框架与写书不一样,框架不好你可以不用,书不好则会害人。所以写框架我觉得应该鼓励。


严重同意,抱着框架当时髦,而不懂其原理,不管其是否合用的开发人员最可悲


嗯,相当的同意,楼主的创新精神值得大家学习。现在很多程序员抱着struts,spring等等这些框架到处宣扬,问起原理来,没几个人能说的明白,可悲!!!!像楼主这样的钻研创新的人很少见啦!!!
   
0 请登录后投票
时间:2008-08-05
支持自己写的框架,写在在烂也是原创!而且可以不断的改进,创新!

仅仅会使用现成的,永远不会有进步!
   
0 请登录后投票
时间:2008-08-05
2楼的不知道有没有仔细看楼主的文章,我觉得楼主的框架在一定范围内还是很好用的。 写个mvc的框架有那么难么,国外很多项目都是独立的框架,不过十几个类就可以搞定。我也在写,呵呵。只要项目中好用,为什么不写呢。
   
0 请登录后投票
时间:2008-08-05
小鸟mvc,在web上搞mvc就是纯胡说八道,顶多一个dispatcher,几个帮助类,鸟mvc。也就jsf有点象mvc,所以就最糟糕
   
0 请登录后投票
时间:2008-08-05
1,我用啊貓啊狗,很難聽,對不起 2,我說啊貓啊狗也做框架,説這是框架 其實框架是程序的半成品,是一對手腳架,或者程序的骨架。就像官方説話一樣,總是有一個套路,比如“我們雙方領導人達成共識,對大陸,臺灣兩岸遲遲不能實現自由三通表示強烈的譴責,以及對中華民族的未來表示美好的祝願”,那内容去了,總是能夠剩下一句話的骨架,這個就是框架
   
0 请登录后投票
论坛首页 Java版 企业应用

跳转论坛:
JavaEye推荐