论坛首页 Java企业应用论坛

为公司写的1个简单的WEB框架,希望大家给点意见

浏览 19262 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (6) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-09  

因公司需要,为公司写了1个很简单的WEB框架,目前已经在公司很多内部系统中使用,希望大家能多给点意见:

功能简介:
   1. 把前台JSP页面和后面java表单类(这个称呼是自己随便取的,对应一般MVC框架中的C)自动对应起来,比如:
先假设所有的表单类都放在jnet.forms包下,你前台有个index.jsp,那对这个index.jsp的所有操作代码必须放在jnet.forms.index.java类中. (类似ASP.NET)
   2. 提交按钮基于事件原理(类似JSF)

看几个简单列子:
1. 简单的问候语句,用户在ndex.jsp中输入自己的名字,然后点提交,在index2.jsp中显示用户的名字,代码如下:

   index.jsp

 

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
      <form>
         输入你的名字:<input type="text" name="yourname" />
         <input type="submit" value="Forward 提交" name="forwardSubmit" />&nbsp;&nbsp;
         <input type="submit" value="redirect 提交" name="redirectSubmit" />&nbsp;&nbsp;
      </form>
    </body>
</html>

 

   index.java

 

package jnet.forms;

public class index extends BaseForm{

    public void index(){
        // 传值到JSP页面
        this.addValue("me", "XXXX");
    }

    public String forwardSubmit(){
        // 取页面传过来的值
        String yourname = this.getParam("yourname");
        // 把值传到下1个页面
        this.addValue("yn", yourname);

        return FormStatics.ACTIONRETURN_FORWARD + "index2.jsp";
    }

    public String redirectSubmit(){
        // 取页面传过来的值
        String yourname = this.getParam("yourname");
        // 把值通过url传到下个页面
        return FormStatics.ACTIONRETURN_REDIRECT + "index2.jsp?yn=" + yourname;
    }
}
 

   index2.jsp

 

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <c:if test="${param.yn==null}">
            <h1>你好:${yn}</h1>
        </c:if>
        <c:if test="${param.yn!=null}">
            <h1>你好:${param.yn}</h1>
        </c:if>
    </body>
</html>

 注释:index.jsp中的表单会自动提交并执行index.java中的方法,所以不需要写form的action属性,执行的后台方法就是你点击的submit按钮name属性对应的方法名。

        比如你点击的"Forward 提交"按钮,该按钮name="forwardSubmit",所以会执行index.java中的forwardSubmit方法

 

2. 加载列表,删除数据列子,list.jsp页面加载用户列表,并有个删除按钮可以删除对应的用户,代码如下:

list.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
      <form>
        <table>
            <tr>
                <th>id</th>
                <th>name</th>
                <th>&nbsp;</th>
            </tr>
            <c:forEach items="${list}" var="row">
                <tr>
                    <td>${row.id}</td>
                    <td>${row.name}</td>
                    <td>
                        <input type="submit" name="delete" value="删除" id="${row.id}" />
                    </td>
                </tr>
            </c:forEach>
        </table>
      </form>
    </body>
</html>

 list.java

 

package jnet.forms;

import java.util.ArrayList;
import java.util.List;

public class list extends BaseForm{

    public void index(){
        List lst = new ArrayList();
        lst.add(new user(1,"x1"));
        lst.add(new user(2,"x2"));
        lst.add(new user(3,"x3"));
        lst.add(new user(4,"x4"));

        this.addValue("list", lst);
    }

    public void delete(){
        // 取删除的行记录的id
        int id = this.getIntegerValue(eventArgument);
        System.out.println("你要删除的用户id是:" + id);
    }

    public class user{
        private int id;
        private String name;

        public user(int id,String name){
            this.id=id;
            this.name=name;
        }

        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
}

 

  注释:list.java中index方法为页面加载前执行的方法,如果需要在页面加载前执行一些操作(读取数据库,检查用户权限),就可以写在index方法中。

          因删除按钮的name="delete",所以会执行后台delete方法,删除按钮的id就绑定的就是用户的id,所以后台直接this.getIntegerValue(eventArgument)就能

          取到要删除的用户id

 

3.  上传文件,代码如下:

   upload.jsp

 

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <form enctype="multipart/form-data">
            <input type="file" name="file1" />&nbsp;&nbsp;
            <input type="submit" name="save" value="上传" />
        </form>
    </body>
</html>

 

  upload.java

 

public class upload extends BaseForm{
    public void save(){
        MultipartFile mf = this.getFile("file1");
        try {
            mf.saveTo("c:\\" + mf.getOriginalFilename());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

 

baseform主要是封装了一些简单的方法,如下:

public class BaseForm {
    public final static String eventArgument = "__EVENTARGUMENT";
    /**
     * 取request中的参数
     * @return
     */
    public String getParam(String key){
        return getRequest().getParameter(key);
    }

    /**
     * 取request中的参数数组
     */
    public String[] getParamValues(String key){
        return getRequest().getParameterValues(key);
    }
    /**
     * 取整数值
     * @param key
     * @return
     */
    public Integer getIntegerValue(String key){
        if(getParam(key) == null || getParam(key).trim().length()==0)
            return null;
        
        return Integer.valueOf(getParam(key));
    }

    public MultipartFile getFile(String key){
        MultipartRequest mr = (MultipartRequest) getRequest();
        return mr.getFile(key);
    }

    /**
     * 把值添加到请求中
     */
    protected void addValue(String key,Object value){
        getRequest().setAttribute(key, value);
    }

    private HttpServletRequest getRequest(){
        return ActionContext.getRequest();
    }
}

 

 

功能介绍完毕,功能很简单,不知道大家觉得这样简单的WEB框架怎么样,大家多给点意见,谢谢

   发表时间:2009-03-09  
有点tapestry的意思

0 请登录后投票
   发表时间:2009-03-11  
重复发明轮子..为啥不用sturts2

还是说教学用...不知道这么简单的东西可以用在复杂的应用上面么??
0 请登录后投票
   发表时间:2009-03-13  
感觉核心的东西是java反射,,,是够简单,但一些效率的问题,可能还有优化的地步
0 请登录后投票
   发表时间:2009-03-16  
toeo 写道
重复发明轮子..为啥不用sturts2

还是说教学用...不知道这么简单的东西可以用在复杂的应用上面么??


这个跟sturts2完全不一样,并不存在重复发明轮子的问题.

sturts2好不好不用说,但它并不是适合所有公司,所有人的使用和要求。

我做的这个简单框架目的并不是取代其他框架用在复杂的应用上(我也没这个能力),

只是为了适应公司的内部的需求而做的,这个要搞清楚。
0 请登录后投票
   发表时间:2009-03-16  
findhappy7 写道
感觉核心的东西是java反射,,,是够简单,但一些效率的问题,可能还有优化的地步


其他的WEB框架应该都是使用反射吧,不然怎么触发对应的方法?
0 请登录后投票
   发表时间:2009-03-16  
轮子没有好不好,能用就行.
但是自己用的轮子要持久.不能增加其他人的学习负担.
做轮子简单,用轮子难,写轮子教程更难.
struts虽然有可能不是你想要的,但是web开发需要的东西,开发人员只要google一下,就全有了.
你的轮子不看源代码,没办法加模块.
0 请登录后投票
   发表时间:2009-03-16  
这个模型根据不同的需求,,再不断的扩展,,又是一个struts了
0 请登录后投票
   发表时间:2009-03-17  
还可以,收藏下,还有待改进的地方
0 请登录后投票
   发表时间:2009-03-17   最后修改:2009-03-17
java快速开发平台ajf(agile java framework) 供大家消遣娱乐,玩玩耍下
javaeye帖子 http://www.iteye.com/topic/257804
个人主页  http://hi.baidu.com/ajf8
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics