`
BearRui
  • 浏览: 2870 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

阅读更多

因公司需要,为公司写了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框架怎么样,大家多给点意见,谢谢

分享到:
评论
7 楼 chbest 2009-03-16  
轮子没有好不好,能用就行.
但是自己用的轮子要持久.不能增加其他人的学习负担.
做轮子简单,用轮子难,写轮子教程更难.
struts虽然有可能不是你想要的,但是web开发需要的东西,开发人员只要google一下,就全有了.
你的轮子不看源代码,没办法加模块.
6 楼 xdw1516 2009-03-16  
顶!留脚印
5 楼 BearRui 2009-03-16  
findhappy7 写道
感觉核心的东西是java反射,,,是够简单,但一些效率的问题,可能还有优化的地步


其他的WEB框架应该都是使用反射吧,不然怎么触发对应的方法?
4 楼 BearRui 2009-03-16  
toeo 写道
重复发明轮子..为啥不用sturts2

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


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

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

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

只是为了适应公司的内部的需求而做的,这个要搞清楚。
3 楼 findhappy7 2009-03-13  
感觉核心的东西是java反射,,,是够简单,但一些效率的问题,可能还有优化的地步
2 楼 toeo 2009-03-11  
重复发明轮子..为啥不用sturts2

还是说教学用...不知道这么简单的东西可以用在复杂的应用上面么??
1 楼 kimmking 2009-03-09  
有点tapestry的意思

相关推荐

    Web开发+java+ssh框架

    这一空白,它为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功能却非常丰富。 优点: a.Hibernate 使用 Java 反射机制而不是字节码增强程序来实现透明性。 b....

    自己搭的WEB项目简易流程源码

    自己搭的WEB项目简易流程源,希望各位有空帮忙看一下代码,提出你们的宝贵意见和建议,使这个流程和开发更为方便,本源码未使用SSH框架,但借鉴了STRUTS,SPRING里面的一些东西,设计模式也没有怎么用,希望各位能把...

    JHPHP框架 v2.0 beta.rar

    简单的写一个运行过程 1、 用户发送请求 2、 Web应该引入JHPHP框架文件 3、 JH.php接收用户请求参数app,mod,act(默认)去选择不同的controlle文件的和方法 4、 Controller选择并向model发送数据请求 5、 Model...

    ExtJS_MVC框架的搭建实例

    通过一个简单的例子来演示如何使用SSM + ExtJS MVC框架构建一个Web应用: 1. **需求分析**: 假设我们需要构建一个用户管理系统,包括用户列表展示、添加、编辑和删除等功能。 2. **设计数据库**: 设计数据库表结构...

    自写的一个简易统计图统计图控件

    这个自写的统计图控件提供了简单便捷的数据可视化解决方案,对于那些希望快速集成图表功能但又不希望引入大型图表库的项目来说,是一个很好的选择。然而,为了不断提高,开发者鼓励用户提出建议和意见,以进一步完善...

    Creating A Complete Web Service

    通过本教程的学习,您不仅能够掌握如何创建一个完整的 Web 服务,还能了解到如何将其集成到一个更大的应用框架中,从而提高服务的整体可用性和用户体验。希望本教程能为您在 Web 服务领域的探索提供有价值的指导和...

    uw-chatrooms:一个简单的多房间聊天应用程序,使用node.js作为Web服务器,express3作为Web框架,用于实时事件处理的socket.io和用于模板化的jade构建

    一个简单的多房间聊天应用程序,使用node.js作为Web服务器,express3作为Web框架,socket.io用于实时事件处理以及使用Jade作为模板来构建。 我是从一个朋友那里得到这个想法的,他想为大学校园创建一个聊天网络应用...

    python框架和应用

    本章节通过一个具体的案例——乔氏牙膏公司的自动化客户支持系统——来展示如何利用Python框架来构建实用的应用程序。 ##### 案例背景 乔氏牙膏公司是一家仅有一名员工的小型初创公司,专门生产新型牙膏。为了扩大...

    Struts In Ation(中文)

    - **关于本书**:本书适合已经有一定Java Web开发基础的读者,特别是对于那些希望掌握Struts框架并应用于实际项目中的开发者来说,本书将是一个非常有价值的资源。 - **谁创建了Struts?**:Struts框架最初是由...

    [聊天留言]转折点.net留言系统_zzd.netgbook(ASP.NET源码).rar

    1. ASP.NET:ASP.NET是微软开发的一个服务器端Web应用程序框架,它允许开发者使用.NET Framework编写动态网页。这个框架提供了丰富的控件、数据绑定、状态管理等特性,使得开发高效且易于维护的Web应用变得简单。 2...

    Wf+Asp.Net Approval

    而ASP.NET是Microsoft开发的一个用于构建Web应用程序的框架。将两者结合,可以创建出具有动态审批流程的Web应用程序。 **描述:“顺序工作流 一个简单的ASP.net+Wf Approval 例子 学习中…… 希望大家提意见”** ...

    基于WEB的学生信息管理系统

    而“学生管理系统”文件可能是一个数据库脚本或者系统源代码的一部分,具体用途需要打开文件查看才能明确。 该系统的核心功能可能包括以下几个方面: 1. **学生信息录入**:允许管理员输入学生的姓名、学号、班级...

    简单的学生信息管理

    这里使用的"WindowsFormsApplication1"可能是一个默认的项目名称,暗示了程序使用Windows Forms作为UI框架,通过控件如文本框、按钮等构建交互界面。 3. **数据管理**:学生信息的存储可能涉及到数据库操作。在C#中...

    webgis应用开发(附源码)[借鉴].pdf

    这个未完成的项目提供了一个初步的框架,开发者计划逐步完善并分享给有类似需求的人。通过这种方式,希望促进WebGIS应用开发的讨论和交流,同时也鼓励大家提出改进意见。 总的来说,WebGIS应用开发中的一个重要策略...

    Certinside 310-083考试指南

    根据给定的文件信息,我们可以总结出以下关于“Certinside 310-083考试指南”的相关知识点: ### 一、概述 **Certinside 310-083考试指南** 是一个...对于希望获得这一专业认证的人来说,这是一个非常有价值的工具。

    为您的Linux应用开发加油提速(一)

    本文演示了如何使用IBM的WebSphereStudio产品来创建一个使用Struts的简单Web应用程序,Struts是一个用于开发Web应用程序的概念框架,它是Apache软件基金会Jakarta项目的一部分。如果您有任何疑问、意见,或者希望...

    中国象棋C#vs2010+小程序

    【标题解析】:“中国象棋C# vs2010+小程序”指的是使用Microsoft Visual Studio 2010(简称VS2010)开发的一个基于C#编程语言的中国象棋游戏项目,同时可能包含一个轻量级的用户界面或小程序版本。 【描述解析】:...

    C#的记事本(有源代码)

    描述中提到的“请各位大虾评一评,给点意见,本人是菜鸟...”暗示这可能是由一个新手开发者编写的,并希望得到社区的反馈和建议来改进其代码。 以下是一些相关的C#和记事本程序开发的知识点: 1. **C#基础**:C#是...

    网页制作-在线作业_C答案.pdf

    7. 框架集:框架集`&lt;frameset&gt;`用于在一个文档内定义多个框架的布局,每个框架都是一个独立的显示区域,可以加载不同的网页内容。 8. 文字滚动方向:通过CSS属性`direction`可以设置文字的滚动方向,例如`direction...

Global site tag (gtag.js) - Google Analytics