`
BearRui
  • 浏览: 2867 次
  • 性别: 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框架怎么样,大家多给点意见,谢谢

分享到:
评论
47 楼 qinshanwu 2009-04-24  
还不错,值得学习
46 楼 yale 2009-04-23  
不错,可以好好的看看
45 楼 xiaojiit 2009-04-22  
个人观点:
先不说楼主的东西怎么样,最起码我挺敬佩楼的精神的,有自己的想法,自己的创新(包括技术的重复性)。这足以证明楼主拥有对事物一个独立的看法。
现在Java用的框架,不说哪个了,有几个是国内人开发的?(小弟新手,只听过一个,名字忘了),大都是拿来主义,用别人的东西,去做跟自己业务逻辑相关的东西,也许就是站在巨人的肩膀上看的更远吧。拥有自己的想法,写出真正的东西,这才是程序员,支持楼主!

有感而发,与楼主的技术问题不符,见谅。
44 楼 yiding_he 2009-04-20  
1、重复轮子并不一定是坏的东西,只要你的轮子比别人的圆!
2、就事论事,如果楼主对自制框架可能带来的风险有足够的考量,用用倒也无妨,但楼主必须负起责任来。
43 楼 kjj 2009-04-16  
支持楼主,你可以再创新一下,参考你的例子,我把我写的框架再改改思路,呵呵,不敢发怕人家说山寨,对于楼主的getParam()方法,我建议楼主看看xwork,获取参数很便捷!!
42 楼 BearRui 2009-04-16  
Joo 写道
星星!!!!!!
重复轮子好啊,有啥不好的,对公司有用,对个人有用,以后找工作还可以拿出来作谈资.顺便复习一下MVC和反射原理,非常好.起码一条XML配置都不用写,就这一条我就顶.咔咔.强大的BXXMVC


哈哈,丫跑着来啦。
41 楼 Joo 2009-04-15  
星星!!!!!!
重复轮子好啊,有啥不好的,对公司有用,对个人有用,以后找工作还可以拿出来作谈资.顺便复习一下MVC和反射原理,非常好.起码一条XML配置都不用写,就这一条我就顶.咔咔.强大的BXXMVC
40 楼 aidiyuxin 2009-04-15  
山寨框架可以更贴和实际情况,传统框架更加泛化,不明白,为什么山寨框架有罪啊
各有各的好么
39 楼 daquan198163 2009-04-05  


38 楼 tcrct 2009-04-05  
看了楼主的基本流程,还是好容易就明白是什么一回事了,所以这个框架也不复杂,本来我也想做一个这样的流程的。但后来想到通用性及以后扩展性,意思是说,我不在这公司做了。那还有人对系统进行更新维护等等。当然,是小公司啦,所以就简单点,直接用原始的SSH套,不搞什么封不封装的。

当然,这个也是看你的实现情况与需求出发了。
37 楼 murainwood 2009-03-31  
daquan198163 写道
BearRui 写道

确实没有全部去考察,我们做自己的框架,并不是否定其他的框架,很多框架比我们的要好很多哦。但是并没找到很适合我们使用的(可能是因为如你们所说的,没有全部考察)。

我们这个框架是有点模仿ASP.NET的机制做的1个,草率不草率可能大家的定义都不一样吧。

我很想知道你们的什么需求是现有框架无法满足的。

确实很好奇,是何等具有创新性的需求呢?看了半天,这个框架没看出啥高明的地方,失去兴趣之后,只有这个传说中特立独行的业务需求让我能好奇一下了
36 楼 icetang 2009-03-31  
就注意到满篇的hard code 了, 支持不支持I18N啊. 要保持良好的习惯啊.
35 楼 jansel 2009-03-28  
建议是基于一个框架去扩展自己产品共用的东西 Struts2和Wicket都是不错的选择
34 楼 chen4765654 2009-03-28  
现在struts2配置很灵活,注解和模糊匹配能大大降低struts.xml的配置量,自己写框架往往在伸缩性和扩展性上都没周全考虑,当你要一些全局性的改经时将是噩梦的开始
33 楼 daquan198163 2009-03-26  
BearRui 写道

确实没有全部去考察,我们做自己的框架,并不是否定其他的框架,很多框架比我们的要好很多哦。但是并没找到很适合我们使用的(可能是因为如你们所说的,没有全部考察)。

我们这个框架是有点模仿ASP.NET的机制做的1个,草率不草率可能大家的定义都不一样吧。

我很想知道你们的什么需求是现有框架无法满足的。
32 楼 BearRui 2009-03-25  
其实我发这个贴不是想跟大家讨论有没有必要做这个东西,而是希望大家对这样的框架发表一下功能上或者其他方面改进的一些意见。

比如大家希望最简单方便使用的框架应该具备什么功能之类的。

谢谢。
31 楼 BearRui 2009-03-25  
daquan198163 写道

现在主流的web框架你们都考察过了么? 现在的struts2也就是以前的webwork似乎不存在你说的配置复杂的问题,难道你说的是struts1.x?
如果还没考察好就开始自己上马山寨框架,未免太草率了。
ps:用继承要看情况,由于action本身就是框架的一部分,因此它用继承没有问题,而Model完全没必要用继承绑死在框架上。
用反射没问题,相对于数据库访问的开销不算什么。


确实没有全部去考察,我们做自己的框架,并不是否定其他的框架,很多框架比我们的要好很多哦。但是并没找到很适合我们使用的(可能是因为如你们所说的,没有全部考察)。

我们这个框架是有点模仿ASP.NET的机制做的1个,草率不草率可能大家的定义都不一样吧。
30 楼 daquan198163 2009-03-25  
BearRui 写道

1. 必要性确实很重要,我们公司开始使用JSF(包括金蝶在JSF上做的AOM),很不成熟,很多问题,所以放弃。后来使用struts,感觉配置很麻烦,太庞大,很多功能我们用不上,希望有的它又没有。一直觉得rails开发很方便,但因为一直用的JAVA,所以不能转,grails领导还不敢去尝试,所以就想到自己做1个简单的WEB框架。正因为这个框架很简单,所以可以说没花什么精力去开发和研究(1个人1个多星期就出来了)。

2. 我们做的这个框架只是为了公司内部使用,并不打算(也没这个能力)推广给其他人使用,BaseForm并不是必要的继承,只是自己的爱好和编码习惯,为了把公用方法放在1起,所以加了1个BaseForm。我的这个框架不需要继承任何类或接口。如果说继承就不能很好的扩展到话,那楼主为什么不说struts了?如果没记错的话struts的action类是必须继承它本身的一个类。

3. 性能问题我没什么发言权,因为都是做的都是企业内部网,没有做过JAVAEYE这样访问量的网站,不过在企业应用中还是没问题的(我们公司最大的系统就是用的这个,估计比我们公司人多的公司也不会太多吧)。我的原理确实用的是反射,不过我觉的struts也应该是用的反射,不然怎么引发你的action了?(本人才疏学浅,只能这么猜测)

4. 虽然不敢说我的编码风格好,但请注意下,这里只是1个demo,并不是1个项目,难道大家在做demo的时候还会去考虑操作系统,考虑国际化,考虑把很多信息写在配置文件中?

现在主流的web框架你们都考察过了么? 现在的struts2也就是以前的webwork似乎不存在你说的配置复杂的问题,难道你说的是struts1.x?
如果还没考察好就开始自己上马山寨框架,未免太草率了。
ps:用继承要看情况,由于action本身就是框架的一部分,因此它用继承没有问题,而Model完全没必要用继承绑死在框架上。
用反射没问题,相对于数据库访问的开销不算什么。
29 楼 BearRui 2009-03-25  
qinjingkai 写道
  看了楼主的文章和各位的评论,感受很多了;我这个人比较直率,不喜欢说恭维的话,也很喜欢事情最原生的一面;我觉得楼主的勇气另人佩服,但是从以下几方面 我对楼主的做法并不很赞同;
第一:必要性,也就是说 是否有必要自己开发自己的框架;开发人员应该是把主要的精力放在业务逻辑的设计和实现上;这个看来虽很小,但我觉得那是很深层次的东西,社会中无不体现这样的原则 ,那就是分工了 ;我们不可能每一个事情都是自己做,就好比我们吃的,穿的,并不是我们自己做不了,而是要看自己有没有这个特长和有没有这个必要;在开发中也是一样的道理,那么多成熟的框架为什么不用呢,而 要自己写呢;

第二 扩展性;楼主在代码中每个类都要继承一个名为BaseForm的类,这个是很有风险的东西;我们都知道java是只支持单继承的,这就要求我们在用继承的时候要非常的小心,要考虑到以后的扩展;举个简单的例,为什么很多在进行spring和structs整和的时候都不喜欢用继承spring的Baseaction的方式呢,很简单那就是以后要扩展的话,那是很困难的事情;

第三 性能性 楼主说在表单的form里面某一个name 就是要执行某一个类的名字为name的方法;我想问一下 你的映射关系是如何确定的,如果是用的反射的话,就是客户能够忍受,我自己都没部分忍受

第四 说说其他的问题 楼主的代码风格我不是很欣赏 就比如保存文件那个了     mf.saveTo("c:\\" + mf.getOriginalFilename());  这样写程序就非常死了一个是移植非常困难,根本就没有办法linux或者其他非window系统 其他 就不说了 呵呵

1. 必要性确实很重要,我们公司开始使用JSF(包括金蝶在JSF上做的AOM),很不成熟,很多问题,所以放弃。后来使用struts,感觉配置很麻烦,太庞大,很多功能我们用不上,希望有的它又没有。一直觉得rails开发很方便,但因为一直用的JAVA,所以不能转,grails领导还不敢去尝试,所以就想到自己做1个简单的WEB框架。正因为这个框架很简单,所以可以说没花什么精力去开发和研究(1个人1个多星期就出来了)。

2. 我们做的这个框架只是为了公司内部使用,并不打算(也没这个能力)推广给其他人使用,BaseForm并不是必要的继承,只是自己的爱好和编码习惯,为了把公用方法放在1起,所以加了1个BaseForm。我的这个框架不需要继承任何类或接口。如果说继承就不能很好的扩展到话,那楼主为什么不说struts了?如果没记错的话struts的action类是必须继承它本身的一个类。

3. 性能问题我没什么发言权,因为都是做的都是企业内部网,没有做过JAVAEYE这样访问量的网站,不过在企业应用中还是没问题的(我们公司最大的系统就是用的这个,估计比我们公司人多的公司也不会太多吧)。我的原理确实用的是反射,不过我觉的struts也应该是用的反射,不然怎么引发你的action了?(本人才疏学浅,只能这么猜测)

4. 虽然不敢说我的编码风格好,但请注意下,这里只是1个demo,并不是1个项目,难道大家在做demo的时候还会去考虑操作系统,考虑国际化,考虑把很多信息写在配置文件中?
28 楼 qinjingkai 2009-03-25  
  看了楼主的文章和各位的评论,感受很多了;我这个人比较直率,不喜欢说恭维的话,也很喜欢事情最原生的一面;我觉得楼主的勇气另人佩服,但是从以下几方面 我对楼主的做法并不很赞同;
第一:必要性,也就是说 是否有必要自己开发自己的框架;开发人员应该是把主要的精力放在业务逻辑的设计和实现上;这个看来虽很小,但我觉得那是很深层次的东西,社会中无不体现这样的原则 ,那就是分工了 ;我们不可能每一个事情都是自己做,就好比我们吃的,穿的,并不是我们自己做不了,而是要看自己有没有这个特长和有没有这个必要;在开发中也是一样的道理,那么多成熟的框架为什么不用呢,而 要自己写呢;

第二 扩展性;楼主在代码中每个类都要继承一个名为BaseForm的类,这个是很有风险的东西;我们都知道java是只支持单继承的,这就要求我们在用继承的时候要非常的小心,要考虑到以后的扩展;举个简单的例,为什么很多在进行spring和structs整和的时候都不喜欢用继承spring的Baseaction的方式呢,很简单那就是以后要扩展的话,那是很困难的事情;

第三 性能性 楼主说在表单的form里面某一个name 就是要执行某一个类的名字为name的方法;我想问一下 你的映射关系是如何确定的,如果是用的反射的话,就是客户能够忍受,我自己都没部分忍受

第四 说说其他的问题 楼主的代码风格我不是很欣赏 就比如保存文件那个了     mf.saveTo("c:\\" + mf.getOriginalFilename());  这样写程序就非常死了一个是移植非常困难,根本就没有办法linux或者其他非window系统 其他 就不说了 呵呵

相关推荐

    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