Daughter go to school the first

  Sept. 26,2005,this is a commemorable day,the first time,my daughter go to the kindergarten.Her grandmother took her go to school morning,afternoon it is her mother took her.The first time,daughter knew what is the discipline.

  throgh a week,until now,National Day,daughter has adapted herself to the life in the school basically.

get some basic knowledge about rss from rss.sina

 ?什么是RSS???2004年最热门的互联网词汇之一:RSS 2005年1月03日 (http://wm23.com/resource/R01/Internet_1005.htm)

 ?RSS利于发布什么样的内容 2005年3月11日(http://www.donews.net/walaqi/archive/2005/03/11/298648.aspx)

 ?利用RSS进行项目沟通 2005年3月16日(http://blog.csdn.net/wangchinaking/archive/2005/03/16/321270.aspx)

 ?深度:中国RSS现状调查 2005年1月13日(http://www.ccw.com.cn/news2/look/htm2005/20050113_09EL8.htm)

 ?主流Blog程序 2005年2月08日(http://www.blogchina.com/new/display/64629.html)

 ?RSS列表 2005年3月16日(http://www.donews.net/sogoo/archive/2005/03/16/303272.aspx)

  There are several questions give me strong impression:

  1.Rss is the trend of the content exchanging,although this maybe impact ad business(by this reason,some website don't provide rss service.)

  2.Rss can make people avoid the garbage information from the internet,such as spam,harmful information,ad information;

  3.迪斯尼 has build a inner knowledge sharing platform successfully with Blog and Rss technique,this is a successful example in this area-(knowledage sharing),the successful example is very rare now.

we can do something out of network

for example:we can orgernize the members in same city hold party every year.And,invite some learning experts make some speech about learning.etc..

in order to make our website going on(better ISP service),we can build some business about learning service,for example,sale books,cd,and recieve some software developing task.

(转帖)用JSTL实现JSP应用程序快速开发 作者

转帖者注:由于本站留言板只有管理员才能查看,且没有明确的说明这个限制。致使hard在留言板中提交的这篇文章不能被大家看见,真是对不起。我会在留言板上明确标明这个限制。以后的留言板也许会作一些改进。

以下是hard提交文章的正文。

标题: 用JSTL实现JSP应用程序快速开发  作者: hard  创建时间: 2005-09-03 11:03:27  删除 

内容

在这篇文章中,我将为大家介绍一种基于JSP且灵活有趣的技术,那就是JSTL.JSTL全称为Java Server Pages Standard Tag Library.虽然JSP已经变的非常流行,但JSTL在基于SQL数据库的简单、快速的前后台开发中还是没有被广泛的应用。一旦你了解了JSTL,你就会了解到它的优点,并发现在你作为程序员的日常工作中,它已经被应用到了很多方面。我这里假设你已经熟悉HTML,能理解基本的SQL语句,和Jsp的基础知识。因为下面的内容要涉及到这些知识。

  JSTL是一个已经被标准化的标记库集合,她支持迭代、条件、XML文档的解析,国际化,和利用SQL与数据库交互的功能。起初,JSTL规范一直由JCP(Java Community process program)组织下的JSR #52 发展完善,"JCP肩负着Java 技术发展的重任"--官方网站这样评价。JCP作为一个开放性的组织,他同时吸收正式的会员和非正式会员.JCP对于Java技术规范的形成与发展发挥了重要的主导作用。JSTL主要包括四个基本部分的标记库:Core,XML,国际化,和对SQL的支持。由于这篇文章的主要是以其中的SQL部分的应用来快速了解JSTL,所以我们这篇文章只介绍了 Core和SQl标签库的一些基本功能。

  这项技术简单而且功能强大,足以和PHP、ColdFusion一较高下.他在拓展Java的应用领域方面有足够的能力,这些领域不只包括大型的可再升级的Web应用程序,对于仅拥有简单主页的Web程序一样没问题。这允许你在建立站点的时候可以避免那些经常考虑的XML的集成和与数据库的连接。正如我刚才提到的一样,JSTL的关键点就是简单易用。还有,那就是JSTL是基于JSP构建的, 他允许我们使用所有的Java技术,这一点我们有必要记住。

  开始之前,我们需要弄清楚怎样才能运行JSTL.由于是基于JSP技术的,所以我们运行它就需要一个能够编译JSP的容器,这里我们使用免费的JSP容器:TOMCAT(http://jakarta.apache.org/tomcat/index.html).至于如何安装这个产品已经超出了本文所讲述的范围。毫无疑问,这个软件产品现在已经很普及了,而且关于如何安装的文档资料也是很多。这里假设您已经安装并成功配置了这个容器,你只需再安装JSTL运行所需文件即可,它可以从这里下载http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html你不需要真正的安装它,只需要将其中的.JAR文件包含到你的应用程序的WEB-INF/lib目录下即可,稍后我会具体说到该怎么做.

  因为我们要在一个支持标准SQL的数据库上运行程序,你需要在你的电脑上安装有一个数据库。数据库的类型有许多种,这里我选择了MySql。我之所以选择他的原因在于首先,我们需要展示JSTL对于构造简单快速的应用程序领域所起的作用,同时能和一直在这个领域处于主导地位的PHP+MySql有所比较;第二点那就是MySql是可以免费下载并包含有一个针对JAVA的JDBC驱动.总之,为了使用下面的例子,你需要下载一个MYSQL服务器(http://www.mysql.com/products/mysql/index.html; MySql Connector/J JDBC驱动程序http://www.mysql.com/products/connector-j/index.html;还有就是MySql control center http://www.mysql.com/products/connector-j/index.html),这个产品可以让你非常容易的操作管理Mysql数据库文件。全部下载完成后,你需要安装mysql和mysql Control Center。另外还有就是mysql的JDBC驱动需要放到你的web应用程序中的/Web-INF/lib目录中。

  在创建程序代码之前,你需要创建并填写数据库表。关于这方面的主题文章也相当广泛,具体如何操作超出了本文的范围。这里我推荐给你我们上面提及的一个可视化的管理工具 MySQL Control Center.你可以用他来创建一个用来运行程序的测试用户,数据库以及创建一个测试表,并填写若干记录。关于登陆名及密码 数据库名称这些配置环境参数,你应该记住他们,稍后需要应用到我们的代码中。

  现在,你就可以准备创建自己的第一个JSTL应用程序了它需要我们做下面一些事情:

  整个实例程序代码包括两个文件Hello.jsp和 Continue.jsp

  Hello.jsp文件允许你输入数据库名称、登陆名称、登陆密码、数据库表名。Continue.jsp:接受Hello.jsp中的数据信息并且连接数据库,并对数据库中的表执行一个Select请求.

  下面是这个系统所有的代码文件,我将逐一进行解释。这些代码相当简单,对于代码的结构,我相信你即使没有我的解释你也能理解的.

1: <!-- Hello.jsp -->

2: <html>

3: <head>

4: <title>Hello</title>

5: </head>

6: <body bgcolor="#ffffff">

7: <h1>Please, enter all necessary information and click OK.</h1>

8: <form method="post" action="Continue.jsp">

9: <br>Your login to database:

<input type="text" name="login" size="15">

10: <br>Your password to database:

<input type="password" name="password" size="15">

11: <br>Your database name:

<input type="text" name="database" size="15">

12: <br>Your database table:

<input type="text" name="table" size="15">

13: <br><br><input type="submit" name="submit" value=" OK ">

14: </form>

15: </body>

16: </html>

  (请注意文本左侧的数字只是为你提供一些标记信息,你不需要将他们输入到你的代码文件中。)

  上面就是所有Hello.jsp的源代码,很惊奇吧,他仅仅是纯粹的HTML代码,就这么简单,我想应该没有注释的必要了.我之所以将这些代码片段包含进文章中就是为了展示一下JSTL集成到那些需要快速扩充额外功能的HTML站点中是多么的简单.让我再为你展示一下Continue.jsp的全部代码,看过之后,你就会对 JSTL有些了解了。

1: <!-- Continue.jsp -->

2: <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

3: <@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>

4: <c:set var="h" value="localhost"/>

5: <c:set var="l" value="${param.login}"/>

6: <c:set var="p" value="${param.password}"/>

7: <c:set var="d" value="${param.database}"/>

8: <c:set var="t" value="${param.table}"/>

9: <html>

10: <head>

11: <title>Continue</title>

12: </head>

13: <body bgcolor="#ffffff">

14: <sql:setDataSource driver="com.mysql.jdbc.Driver"

url="jdbc:mysql://${l}/${d}?user=${u}&password=${p}"/>

15: <sql:query var="result">

16: SELECT * FROM <c:out value="${t}"/>

17: </sql:query>

18: <c:forEach var="row" items="${result.rowsByIndex}">

19: <c:out value="${row[0]}"/> <br>

20: </c:forEach>

21: </body>

22: </html>

(请注意文本左侧的数字只是为你提供一些标记信息,你不需要将他们输入到你的代码文件中。)

  这就是我们所有的代码了,是不是非常不错?现在我门来解释一下上面这些代码的作用。

  行1 是 HTML 的注释说明。

  行2--3 这些 JSP 标签是为了引用外部的 标签库,更确切的说这里是引用了JSTL库中的 Core 和SQL标签库部分。我们为他们都设置了前缀名称,以便于我们通过这些前缀名称访问被引入的标签库中的功能方法。

  行4---8正如 Hello.jsp 真正运行的样子,他将请求continue.jsp,Continue.jsp获得请求后就需要得到并解析来自Hello.jsp的若干变量,我们使用了这样的方式${param.YOUR_VAR}。在第4行<c:set标签,将变量${h}设置为 "localhost",第五行变量${l}将获取我们在 Hello.jsp中的login文本域中输入的信息,第6,7,8行的变量将分别获得来自Hello.jsp中用户所输入的密码,数据库名称,数据表名称。

  行9--13是一些我经常用来常见HTML网页头的简单的HTML标签,马上,重要的功能马上要到了。

  行14,我们试图用我们先前获得的mysql驱动程序(com.mysql.jdbc.Driver)建立数据库连接,在URL中,我们指明数据库连接所需要的参数,象数据库名称,主机名称,登陆名及登陆密码。依此,我们可以用其它任何的JDBC驱动程序连接其相对的数据库。如果我们需要连接其他的SQL数据库,只需更改这个 URL就够了。

  行15--17 这里我们执行了一个Select 查询,请特别注意第16行,我们使用了另一个JSTL功能函数<c:out 用来输出我们所获取的数据表名称,这里我们同样可以使用其他的SQL命令,比如说 INSERT,DELETE,等等。要执行这些没有返回值的查询请求,你就需要使用<sql:update JSTL功能函数了。他可以直接执行他们就象<SQL:query一样,只是执行它是不需要特别指定结果变量来存储语句执行返回的结果。

  行18--20 既然我们执行了上面的SELECT查询语句,我们就应该把他的返回结果显示出来。<c:forEach 就是JSTL 中一个具有迭代功能的函数,执行它时,我们通过${result.rowsByIndex}将返回的每一个数据行信息返回给变量${row},紧接着在第19行, 我们通过<c:out value="${row[0]}"/>显示返回的每个数据行的第一个数据列中的值。只要你的数据表中包含的字段,你都可以通过改变变量 ${row}中的数字大小来对请求表中的任意一个字段中的值对他们进行访问。

  行21--22是HTML 页脚

  在你亲自创建JSTL应用程序过程中,可能你还没有发现它有多么的强大,但你应该能够意识到JSTL的功能函数的简单和高效性,试想有了JSTL,整合出一个基于SQL的新闻专栏是何等的快速,集成你现有的web站点是何等的容易。

  很好,我们的代码很容易理解的,即使一个非专业程序员的话,打个比方就算是一个设计师也能够读懂它,理解它,还可能进行部分的修改,起码是页面布局上的修改。

  正如我们开始的时候所提到的,为了使我们的JSTL代码正常的运行,我们需要安装Mysql Connector/J 中的JAR 文件,当然还有 JSTL。因为我们使用了Tomcat这个JSp 容器,你需要在Tomcat的文件目录Webapps下创建你自己的文件夹,将你的Hello.jsp 、Continue.jsp文件放在你创建的文件目录中,在你创建的目录中你还要创建一个叫做WEB-INF 的文件夹,将你的配置文件Web.xml放在里面,web.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app />

  接下来我们还需要在WEB-INF下创建一个叫做lib的子目,并将下列文件放进去:

jstl.jar

saxpath.jar

standard.jar

mysql-connector-java-3.0.9-stable-bin.jar (注意,这个名称依据你的Mysql Connector/J版本不同可能会有所变化)

  所有的这些信息您能够在JSTL或Tomcat手册中查阅的到,如果你想理解他们具体是如何运行而又为什么这么运行你就应该研读一下这些手册。不过为了帮助你快速的掌握JSTL的基本操作,相关的知识我已经作了介绍。

  如果你使用的是其他的Jsp 容器,那么就需要你阅读他们相关的手册资料。

  罗罗索索这么多,我还想再说明一点,这篇文章只是对JSTL技术的基本的介绍,并不是完全手册。JSTL中包含有许多功能丰富的函数用法来帮助你以简捷快速的方式完成你的Jsp开发,我建议大家读一些有关JSTL功能以及它如何与JavaBeans协同工作的更详细的文档资料,到最终你可能会发现他就是你期待已久的开发平台。通过阅读本篇文章,你应该已经能够创建一些简单的基于SQL 数据库的前后台应用了。

 

敬请作者关注:学习日记使用方法

非常感谢lian的热心支持,敬请关注学习日记使用方法:

一)、数据结构:http://www.learndiary.com/aboutMe.html

     采用的结构:目标-->评论目标,目标-->日记,日记-->评论日记

二)、使用方法:http://www.learndiary.com/help.html

    1>在"您的目标"链接页面中点击"添加新目标",订立自己想要实现的目标。(强烈建议订立自己的目标前先检索一下,看是否别人已经订了类似的目标,这样你就可以加入这个目标,形成朝这个目标前进的集体效应。)

2>在"所有目标"链接页面中点击"加入",添加别人订立而自己也想要实现的目标。

3>在上述两个页面中都可以对目标进行评论,以目标为中心写日记,对日记进行评论。

4>在"您的目标"链接页面中点击"改变目标状态"下的选择菜单可以对自己的所有目标进行管理。

5>在您发写帖子时请尽量写出你撰写内容所引用的资源,以便大家共享。

比如:您的两个目标可以分别归类到:

目标“学习Hibernate (11篇) ”http://www.learndiary.com/disGoalContentAction.do?goalID=401

像这样:http://www.learndiary.com/disDiaryContentAction.do?goalID=1101

目标:“一起学习Struts(MVC) (19篇)”http://www.learndiary.com/disGoalContentAction.do?goalID=167

像这样:http://www.learndiary.com/disDiaryContentAction.do?goalID=1102

再次感谢lian的热心支持,新版的学习日记会对使用方法作出程序流程上的显而易见的提示。

(转贴)实际项目中的StrutsPlugIn插件扩展 作者: l

作者:冰莲如水

本文讲述Struts应用在实际项目中的插件类开发技术。在我们的learndiaryV1.0项目中已经有了很好的应用。通过对它的讲解,我们可以了解在应用开发中这一技术的实做经验。首先说明Struts插件扩展技术的特点:

Struts框架的一大优势在于它允许开发人员根据实际需要来扩展框架,定制客户化的功能。

Struts1.1框架提供了动态插入和加载组件的功能,这种组件被称为Struts插件。Struts插件实际上就是一个Java类,它在Struts应用启动时Struts框架调用每个插件的init()方法进行初始化,在插件的初始化阶段可以完成一些初始化的操作,如建立数据库连接,和远程系统建立连接,在当前的应用范围内加入插件类自身的实例等。在应用关闭时Struts框架会调用每个插件的 destroy()方法,destroy()方法可以用来完成释放资源的任务,如关闭数据库连接,断开与远程的连接等。任何作为插件的Java类都应该实现org.apache.struts.action.PlugIn接口。PlugIn接口包括两个方法:

       public interface PlugIn {

        /**

        *当struts应用启动时,下面的方法将被调用执行

        */

        public void init(ActionServlet servlet, ApplicationConfig config)

              throws ServletException;

       /**

       *当struts应用关闭时,将调用下面的方法,以释放资源。

       */

        public void destroy();

       } 

相关资源

 

相关评论

标题: 实际项目中的StrutsPlugIn插件扩展  作者: lian  创建时间: 2005-08-30 16:03:36  最近更新: 2005-08-30 16:03:36  编辑  删除 

内容

我们在learndiaryV1.0这个项目中使用了Struts框架的PlugIn插件扩展来实现ServiceFactory类。ServiceFactory为应用中的业务逻辑工厂类,它将提供创建各种业务逻辑类实例的方法,我们是通过对业务逻辑类实例的方法调用最终实现后台的商业逻辑及业务数据的检索和持久化的。关于持久层的存取更新请参阅《Hibernate 存取及批量更新删除》这一章节。ServiceFactory 工厂类实现了 Struts 的 PlugIn 接口并在 Struts 的配置文件struts-config中对其进行了配置描述,使其在Struts系统启动时自动被加载。而在 ServiceFactory 工厂类所覆盖的 PlugIn 的 init() 方法中,此工厂类将其自身加入到应用的 ServletContext 实例当中去。在具体的项目中,因为ServiceFactory 工厂类已经被启动并加载,在加载的过程中init() 方法又将ServiceFactory 工厂类自身的实例加入到ServletContext当中,我们便可以通过servlet.getServletContext().getAttribute(Constants.SERVICE_FACTORY_KEY)这样的方法对此ServiceFactory工厂类进行引用。通常我们也可以在struts-config文件中的ServiceFactory工厂类插件配置项<plug-in>中加入插件类的启动参数<set-property>,在当前的应用中我们没有采用这样的方式。听上去可能会糊里糊途的,我们还是从代码中找到灵感吧! 

相关资源 

标题: 实际项目中的StrutsPlugIn插件扩展  作者: lian  创建时间: 2005-08-30 16:04:34  最近更新: 2005-08-30 16:04:34  编辑  删除 

内容

首先我们构建出你的ServiceFactory类所要去实现的接口类,这有利于实现商业应用的面向接口的编程,这是一种良好的JAVA开发规范。在今后的开发环节当中我们还会遇到类似的开发案例。

  

        package com.learndiary.website.services;

import java.lang.IllegalAccessException;

import java.lang.ClassNotFoundException;

import java.lang.InstantiationException;

/**

 * 业务逻辑工厂的接口

 * 应用程序开发后期将会扩充此工厂接口,

 * 设置各种createService()方法,

 * 返回均为此业务逻辑方法的接口。

 */

public interface IServiceFactory {

public IBusinessService createService() throws ClassNotFoundException,

IllegalAccessException,InstantiationException;

public IUserService createUserService(String serviceName) throws ClassNotFoundException,

IllegalAccessException,InstantiationException;

public IUserService createUserService() throws ClassNotFoundException,

    IllegalAccessException,InstantiationException;

public void destroy();

}

你会发现上面的代码中所有方法返回的实例都定义为业务逻辑接口形式,如IBusinessService createService() 。在各类的IBusinessService接口中我们定义了这一类业务逻辑接口所要实现的方法。例如IUserService接口为我们定义了如下的一些方法。 

相关资源 

标题: 实际项目中的StrutsPlugIn插件扩展  作者: lian  创建时间: 2005-08-30 16:05:43  最近更新: 2005-08-30 16:05:43  编辑  删除 

内容

      public interface IUserService extends IBusinessService{

public User saveUser (User user) throws BusinessException;

public User findUserById(Long id) throws BusinessException;

public User findUserByName(String name) throws BusinessException;

public User findUserByEmail(String email) throws BusinessException;

public User findUserByPassword(String name, String password) throws BusinessException ;

public void saveOrUpdateUser(User user) throws BusinessException;

public List getUsers() throws BusinessException;

public int getAllUserNum() throws BusinessException;

}

此外IServiceFactory接口的定义中还存在着IUserService createUserService()的重载形式IUserService createUserService(String serviceName),这是为了方便大家对于这一应用形式的重构和扩展。

ServiceFactory的具体实现类如下:

  package com.learndiary.website.services;

import javax.servlet.ServletException;

import java.lang.InstantiationException;

import java.lang.IllegalAccessException;

import org.apache.struts.action.ActionServlet;

import org.apache.struts.action.PlugIn;

import org.apache.struts.config.ModuleConfig;

import com.learndiary.website.Constants;

import net.sf.hibernate.*;

import net.sf.hibernate.cfg.Configuration;

/**

 *业务逻辑工厂,ServiceFactory工厂类实现了struts 的PlugIn接口,

 *使其将在系统启动时,自动被加载;在工厂类所覆盖的PlugIn的init()方法中,

 *此工厂类将其自身加入到应用的ServletContext实例当中去。

 */

public class ServiceFactory implements IServiceFactory,PlugIn {

    

//由init()方法中传入ActionServlet实例

private ActionServlet servlet =null;

private String serviceClassname = "com.learndiary.website.services.ORMService";

/*

* 创建业务逻辑实例的模板

*/

public IBusinessService createService() throws ClassNotFoundException,

IllegalAccessException, InstantiationException {

IBusinessService serInstance =

(IBusinessService)Class.forName(serviceClassname).newInstance();

serInstance.setServletContext(servlet.getServletContext());

return serInstance;

}

/*

* 根据给定的服务类名,创建服务类的对象。

* 以接口IBusinessService型式返回。

*/

public IUserService createUserService(String serviceName) throws ClassNotFoundException,

IllegalAccessException, InstantiationException{

IUserService serInstance=

(IUserService)Class.forName(serviceName).newInstance();

serInstance.setServletContext(servlet.getServletContext());

return serInstance;

}

public IUserService createUserService() throws ClassNotFoundException,

    IllegalAccessException,InstantiationException{

IUserService serInstance = new UserService();

serInstance.setServletContext(servlet.getServletContext());

return serInstance;

}

public void destroy() {

}

/*

* 扩展Struts PlugIn接口的 init()方法

* Struts框架会在启动系统时,自动加载扩展了PlugIn接口的组件。

* 并调用此组件中的init()方法,对其进行初始化。

*

*/

public void init(ActionServlet svt, ModuleConfig conf)

throws ServletException {

this.servlet = svt;

/*

* 此处,利用组件初始化时,将本工厂实例保存于当前的ServletContext中。

* 此后,我们便可以在应用当中,调用此工厂实例。即调用ServiceFactory。

*/

servlet.getServletContext().setAttribute(Constants.SERVICE_FACTORY_KEY,this);

}



相关资源 

标题: 实际项目中的StrutsPlugIn插件扩展  作者: lian  创建时间: 2005-08-30 16:07:10  最近更新: 2005-08-30 16:07:10  编辑  删除 

内容

其中的public IBusinessService createService() throws ClassNotFoundException,

IllegalAccessException, InstantiationException {

IBusinessService serInstance =

(IBusinessService)Class.forName(serviceClassname).newInstance();

serInstance.setServletContext(servlet.getServletContext());

return serInstance;

}

为构建业务逻辑实现类的模板。业务逻辑实现类的具体的实例采用IBusinessService serInstance =

(IBusinessService)Class.forName(serviceClassname).newInstance();

的方式构建。关于具体的业务逻辑实现类是怎么样实现业务功能的,将在后续的章节中介绍。

在你的应用中加入了以上ServiceFactory工厂类之后,我们要把它作为Struts应用的插件加入到Struts配置文件当中, Struts框架在启动时将根据插件类相关的配置信息来初始化插件。与插件对应的配置元素为 <plug-in>,在struts-config.xml中对ServiceFactory插件类进行的如下配置:

  

  <plug-in className="com.learndiary.website.services.ServiceFactory">

  </plug-in>

根据Struts 配置文件的DTD 定义,在Struts配置文件中, <plug-in>元素必须位于其他配置元素的后面,此外,如果在配置文件中布署了多个插件, Struts框架将按照它们在配置文件中的先后顺序来依次初始化它们。

合理的使用好Struts的插件类扩展,将使我们的应用更加健壮,功能上具有良好的可扩展性和可移植性。在本文中也许存有疏漏错误之处,请开发员朋友们不吝恩教,吾人当励行而改之!

以上代码均为开源社区learndiary.com 1.0版本下测试通过的实际应用代码,你可以联系作者取得相关原码文件。

联系本文作者:QQ 284508610