﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Prodigy/kf智</title><link>http://www.blogjava.net/xiaozhi19820323/</link><description>我的博客</description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 19:16:10 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 19:16:10 GMT</pubDate><ttl>60</ttl><item><title>现在正在使用3.1的朋友想要升级一下自己的eclipse，然后才能使用汉化包！</title><link>http://www.blogjava.net/xiaozhi19820323/archive/2006/06/29/55671.html</link><dc:creator>xiaozhi</dc:creator><author>xiaozhi</author><pubDate>Thu, 29 Jun 2006 01:10:00 GMT</pubDate><guid>http://www.blogjava.net/xiaozhi19820323/archive/2006/06/29/55671.html</guid><wfw:comment>http://www.blogjava.net/xiaozhi19820323/comments/55671.html</wfw:comment><comments>http://www.blogjava.net/xiaozhi19820323/archive/2006/06/29/55671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaozhi19820323/comments/commentRss/55671.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaozhi19820323/services/trackbacks/55671.html</trackback:ping><description><![CDATA[

现在正在使用3.1的朋友想要升级一下自己的eclipse，然后才能使用汉化包！
如果升级请看！
http://www.eclipse.org/eclipse/platform-releng/updatesfor3.1.1.html

升级以后可以下载汉化包了，汉化包的地址为：
http://www.eclipse.org/org/press-release/20051012nlscb.html
<img src ="http://www.blogjava.net/xiaozhi19820323/aggbug/55671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaozhi19820323/" target="_blank">xiaozhi</a> 2006-06-29 09:10 <a href="http://www.blogjava.net/xiaozhi19820323/archive/2006/06/29/55671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webwork 小智</title><link>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/28/43701.html</link><dc:creator>xiaozhi</dc:creator><author>xiaozhi</author><pubDate>Fri, 28 Apr 2006 01:05:00 GMT</pubDate><guid>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/28/43701.html</guid><wfw:comment>http://www.blogjava.net/xiaozhi19820323/comments/43701.html</wfw:comment><comments>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/28/43701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaozhi19820323/comments/commentRss/43701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaozhi19820323/services/trackbacks/43701.html</trackback:ping><description><![CDATA[Struts和 WebWork2
Struts和Webwork是目前比较流行的MVC实现框架,那么他们之间优略如何呢?我们比较一下:

Action 类
在Struts里面，每一个
Action Class都需要扩展org.apache.struts.action.Action;这个在Java编程中会引来一些问题，就是关于多种继承的问题
Webwork仅仅需要implement com.opensymphony.xwork.Action Interface,您也可以implement其它的interface来实现更多的功能，譬如：validate（验证），localware(国际化)等，当然 webwork2也提供了一个类ActionSupport 集成了以上功能。Developer可以根据需要实现不同的功能。

线程模型
Struts Actions必须是thread－safe方式，它仅仅允许一个实例去处理所有的请求。所以action用到的所有的资源都必须统一同步，这个就引起了线程安全的问题。
Webwork 2 actions每一个请求对应一个action，因此没有线程的安全问题。实际上Servlet 容器对应每一个请求会产生许多Object，这种一个请求产生许多object的例子没有证明对性能产生太多的影响。现在Web容器都是这么处理Servlet的。



Servlet的依赖
Struts处理一个Action时候必须要依赖ServletRequest and ServletResponse。所以这一层摆脱不了Server容器。而serveltRequest可能会被web层的Context使用。
Webwork2 每一个action不依赖任何层和任何容器。他们使用Request和response是通过ActionContext，所以这个对于逻辑层的分离是很重要的。



测试
因为Struts的每一个action都必须用到request和response所以都必须通过web层来进行测试。这就导致了许多测试struts都要通过web容器（尽管现在有许多测试方法cactus mock 等）。
Webwork的action能够通过赋予一定的属性。就可以执行。同时您可以使用一个mock的实例去测试，而不是通过启动web容器来进行测试。



FormBean
Struts 需要一个FormBeans针对每一个Form。而使用DynaBeans实际上没有太大的意义。不能够很好的处理现有的模型。
Webwork 能够动态的收集web的数据然后在赋值给bean。同时它还能够使用FormBean模式。Webwork2还允许现有的ModelDrvien进行导入处理。能够处理它就像处理action自己的属性一样。



前端表达语言
Struts大部分使用的是JSTL EL（JSP2.0）去获得数据的。在Collection上面处理显得很弱。
Webwork前端可以使用JSTL同时也可以使用多种表现形式。譬如：velocity freemaker jspparer xml等等。Webwork2 利用ongl建立一个valuestack来搜集数据



类型的转换
Struts FormBeans把所有的数据都作为string类型。得到一个自己需要的类型然后展示给用户是很困难的。
Webwork2 数据都是转换成Java中的类型。这个根据Form的类型自动转换。然后操作这些bean十分方便。


对Action 执行前和后的处理
Struts处理action的时候是基于class的hierarchies，很难在action处理前和后进行操作。
Webwork2 允许您处理action可以通过interceptor，就是在每一个action处理前或者后进行其它操作。


验证处理
因为struts的FormBean的属性都被认为是string类型。许多类型的验证都要进行类型转换的处理。FormBean对一个验证链的处理显然不行。
而webwork2的验证采用的是interceptor设计模式。它的这种验证方式决定了它十分灵活。而且一个验证可以重复不断的使用仅仅需要一个XML文件的定义。实际上webwork2的验证是采用了xwork的验证框架。


Action的链的控制
Struts里面每一个action对应一个处理，如果一个action转向另外一个action就很困难了。
Webwork使用一个强大的DispatcherChain去处理这个action链。很方便的从一个处理到另外一个处理。
<img src ="http://www.blogjava.net/xiaozhi19820323/aggbug/43701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaozhi19820323/" target="_blank">xiaozhi</a> 2006-04-28 09:05 <a href="http://www.blogjava.net/xiaozhi19820323/archive/2006/04/28/43701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STRUTS+HIBERNATE的分页（用的是STRUTS里的分页）二</title><link>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/17/41435.html</link><dc:creator>xiaozhi</dc:creator><author>xiaozhi</author><pubDate>Mon, 17 Apr 2006 03:22:00 GMT</pubDate><guid>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/17/41435.html</guid><wfw:comment>http://www.blogjava.net/xiaozhi19820323/comments/41435.html</wfw:comment><comments>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/17/41435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaozhi19820323/comments/commentRss/41435.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaozhi19820323/services/trackbacks/41435.html</trackback:ping><description><![CDATA[ShowlistAction 处理请求然后根据 具体进行分页

//Created by MyEclipse Struts
// XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_4.0.1/xslt/JavaClass.xsl

package com.xiaozhi.pagebean;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.xiaozhi.user.User;

/** 
 * MyEclipse Struts
 * Creation date: 04-06-2006
 * 
 * XDoclet definition:
 * @struts.action input="/errors/errors.jsp" validate="true"
 */
public class ShowlistAction extends Action 
{

	public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) 
	{

		User us = new User() ;
		
		List list = us.select_find() ;
			
		request.setAttribute("list",list) ;
		
		String pn = request.getParameter("pn");
		
		if(pn == null)
		{
			pn = "0" ;
		}
		
		int page = Integer.parseInt(pn) ;
		
		System.out.println("#############"+page+"###########") ;
		
		//创建分页实例
		PageBean pb = new PageBean() ;
		
		//设置每页显示的数目
		pb.setEverypage(3) ;
		
		
		
        //先设置最多有多少个数据 根据他得到一共有多少页
		pb.setCountdata(list.size()) ;
		
		//设置当前页面
		pb.setCurrentPage(page) ;
		
		request.setAttribute("pbs",pb) ;
		
		
		
		return mapping.findForward("show");
	}

}

<img src ="http://www.blogjava.net/xiaozhi19820323/aggbug/41435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaozhi19820323/" target="_blank">xiaozhi</a> 2006-04-17 11:22 <a href="http://www.blogjava.net/xiaozhi19820323/archive/2006/04/17/41435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STRUTS+HIBERNATE的分页（用的是STRUTS里的分页）</title><link>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/17/41431.html</link><dc:creator>xiaozhi</dc:creator><author>xiaozhi</author><pubDate>Mon, 17 Apr 2006 03:07:00 GMT</pubDate><guid>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/17/41431.html</guid><wfw:comment>http://www.blogjava.net/xiaozhi19820323/comments/41431.html</wfw:comment><comments>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/17/41431.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaozhi19820323/comments/commentRss/41431.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaozhi19820323/services/trackbacks/41431.html</trackback:ping><description><![CDATA[在struts-config.xml里配置 

<action  input="/errors/errors.jsp" path="/showlist"  type="com.xiaozhi.pagebean.ShowlistAction">
    
    <forward name="show" path="/showlist.jsp"/>
    
</action>

PageBean这个类是进行分页的：
package com.xiaozhi.pagebean;

public class PageBean 
{
	//设置当前页数
	private int currentPage = 0 ;
	
	//一共有多少条数据
	private int  countdata = 0 ;
	
	//1页里应该有多少数据
	
	private int everypage = 0 ;

	public int getCurrentPage() 
	{
		if(countdata <= 0)
		{
			return 0 ;
		}
		
		return this.currentPage;
	}
	
//设置当前页的并进行判断  
	public void setCurrentPage(int currentPage) 
	{
		int countpage = 0 ;
		
		
		
		countpage = this.getCountPage() ;
		
		if(currentPage < 0)
		{
			this.currentPage = 0 ;
			
			
			
			return ;
		}
		else if(currentPage >= countpage)
		{
			this.currentPage = countpage-1 ;
			
			return ;
		}
		
		this.currentPage = currentPage;
	}


	
	
	public int getCountdata() 
	{
		
		
		return countdata;
	}

	public void setCountdata(int countdata)
	{
		
		
		
		this.countdata = countdata;
	}

	public int getEverypage() 
	{
		return everypage;
	}

	public void setEverypage(int everypage) 
	{
		
		
		
		this.everypage = everypage;
	}


	//得到一共有多少页
	public int getCountPage()
	{
		if(countdata%everypage == 0)
		{
			return countdata/everypage ;
		}
		else
		{
			return countdata/everypage+1 ;
		}
	}
	
	//得到起始页的数据(是当前页的开始数据)
	public int getBeginData()
	{
//		System.out.println("*****@@@@"+this.currentPage+"*********") ;
//		
//		System.out.println("*****"+this.currentPage * this.countdata+"*********") ;
		
		return this.currentPage * this.everypage ;
	}
	
	//得到结尾的数据（是当前页的最后的数据）
	public int getEndData()
	{
//		System.out.println("%%%%%%%%%%"+((this.currentPage+1)*this.everypage-1)+"%%%%%%%%%%%%%%") ;
		
		return (this.currentPage+1)*this.everypage-1 ;
	}
	
}
<img src ="http://www.blogjava.net/xiaozhi19820323/aggbug/41431.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaozhi19820323/" target="_blank">xiaozhi</a> 2006-04-17 11:07 <a href="http://www.blogjava.net/xiaozhi19820323/archive/2006/04/17/41431.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascrpit做树型菜单</title><link>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/15/41192.html</link><dc:creator>xiaozhi</dc:creator><author>xiaozhi</author><pubDate>Fri, 14 Apr 2006 19:53:00 GMT</pubDate><guid>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/15/41192.html</guid><wfw:comment>http://www.blogjava.net/xiaozhi19820323/comments/41192.html</wfw:comment><comments>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/15/41192.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaozhi19820323/comments/commentRss/41192.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaozhi19820323/services/trackbacks/41192.html</trackback:ping><description><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<style>
<!--
#foldheader{cursor:hand ; font-weight:bold ;
list-style-image:url(fold.gif)}                 plus最前面的一个图      
#foldinglist{list-style-image:url(list.gif)}    page分块的图
//-->
</style>

<script language="JavaScript1.2">
var head="display:''"
img1=new Image()
img1.src="fold.gif"
img2=new Image()
img2.src="open.gif"
function change()
{
   if(!document.all)
      return
   if (event.srcElement.id=="foldheader")
   {
      var srcIndex = event.srcElement.sourceIndex
	  alert(srcIndex)
      var nested = document.all[srcIndex+1]
		
		alert(nested)

      if (nested.style.display=="none") 
	  {
         nested.style.display=''

		
         event.srcElement.style.listStyleImage="url(open.gif)"
      }
      else
	  {
         nested.style.display="none"
         event.srcElement.style.listStyleImage="url(fold.gif)"
      }
   }
}



document.onclick=change


</script>
<BODY>
<ul>
   <li id="foldheader">News</li>
   <ul id="foldinglist" style="display:none">
      <li><a href="../../../www.cnn.com/index.html">CNN</a></li>
      <li><a href="../../../www.abcnews.com/index.html">ABC News</a></li>
      <li><a href="../../../www.vancouversun.com/index.html">Vancouver Sun</a></li>
   </ul>

   <li id="foldheader">Games</li>
   <ul id="foldinglist" style="display:none">
      <li><a href="../../../www.gamespot.com/index.html">GameSpot</a></li>
      <li><a href="../../../www.happypuppy.com/index.html">Happy Puppy</a></li>
      <li><a href="../../../www.gamecenter.com/index.html">Game Center</a></li>
   </ul>

   <li id="foldheader">Software</li>
   <ul id="foldinglist" style="display:none">
      <li><a href="../../../www.download.com/index.html">outer 1</a></li>
      <li><a href="../../../www.hotfiles.com/index.html">outer 2</a></li>
      <li id="foldheader">Nested</li>
      <ul id="foldinglist" style="display:none">
         <li><a href="../../../www.windows95.com/index.html">nested 1</a></li>
         <li><a href="../../../www.shareware.com/index.html">nested 2</a></li>
      </ul>
      <li><a href="../../../www.windows95.com/index.html">outer 3</a></li>
      <li><a href="../../../www.shareware.com/index.html">outer 4</a></li>
   </ul>
</ul>


例子下载 http://www.blogjava.net/Files/xiaozhi19820323/script做生成树型菜单.rar

</BODY>
</HTML>
<img src ="http://www.blogjava.net/xiaozhi19820323/aggbug/41192.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaozhi19820323/" target="_blank">xiaozhi</a> 2006-04-15 03:53 <a href="http://www.blogjava.net/xiaozhi19820323/archive/2006/04/15/41192.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 如何添加一个符合JSR168规范的portlet</title><link>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/10/40255.html</link><dc:creator>xiaozhi</dc:creator><author>xiaozhi</author><pubDate>Mon, 10 Apr 2006 08:22:00 GMT</pubDate><guid>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/10/40255.html</guid><wfw:comment>http://www.blogjava.net/xiaozhi19820323/comments/40255.html</wfw:comment><comments>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/10/40255.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaozhi19820323/comments/commentRss/40255.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaozhi19820323/services/trackbacks/40255.html</trackback:ping><description><![CDATA[http://treeandleaf.bokee.com/1009643.html

什么是Portlet ?

http://www.matrix.org.cn/resource/article/44/44029_Portlet.html<img src ="http://www.blogjava.net/xiaozhi19820323/aggbug/40255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaozhi19820323/" target="_blank">xiaozhi</a> 2006-04-10 16:22 <a href="http://www.blogjava.net/xiaozhi19820323/archive/2006/04/10/40255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX例子</title><link>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/02/38670.html</link><dc:creator>xiaozhi</dc:creator><author>xiaozhi</author><pubDate>Sat, 01 Apr 2006 16:51:00 GMT</pubDate><guid>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/02/38670.html</guid><wfw:comment>http://www.blogjava.net/xiaozhi19820323/comments/38670.html</wfw:comment><comments>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/02/38670.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaozhi19820323/comments/commentRss/38670.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaozhi19820323/services/trackbacks/38670.html</trackback:ping><description><![CDATA[http://www.blogjava.net/Files/xiaozhi19820323/ajax_hacks_js.zip<img src ="http://www.blogjava.net/xiaozhi19820323/aggbug/38670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaozhi19820323/" target="_blank">xiaozhi</a> 2006-04-02 00:51 <a href="http://www.blogjava.net/xiaozhi19820323/archive/2006/04/02/38670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBOSS配置连接池（以mssql为例）</title><link>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/01/38594.html</link><dc:creator>xiaozhi</dc:creator><author>xiaozhi</author><pubDate>Sat, 01 Apr 2006 03:51:00 GMT</pubDate><guid>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/01/38594.html</guid><wfw:comment>http://www.blogjava.net/xiaozhi19820323/comments/38594.html</wfw:comment><comments>http://www.blogjava.net/xiaozhi19820323/archive/2006/04/01/38594.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaozhi19820323/comments/commentRss/38594.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaozhi19820323/services/trackbacks/38594.html</trackback:ping><description><![CDATA[一、 加入JDBC包
将相应JDBC包放入站点的lib目录下。

二、 部署文件数据源配置文件
在站点的deploy目录下建立mssql-ds.xml。文件内容参考JBOOSEN\docs\examples\jca
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>MSSQLDS</jndi-name>
    <connection-url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=XILUDADB</connection-url>
    <driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
    <user-name>sa</user-name>
    <password></password>
  </local-tx-datasource>

</datasources>
三、 修改相应配置文件
修改站点里的conf目录的standardjaws.xml文件。
将<datasource>修改为<datasource>java:/MSSQLDS</datasource>

修改站点里的conf目录的standardjbosscmp-jdbc.xml文件。
将<datasource>修改为<datasource>java:/MSSQLDS</datasource>

修改站点里的conf目录的login-config.xml文件。
将<module-option name = "managedConnectionFactoryName">修改为<module-option name = "managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=MSSQLDS</module-option>

四、 测试jsp
<%@page contentType="text/html; charset=gb2312"%>
<%@ page import="java.util.*" %> 
<%@ page import="java.sql.*" %> 
<%@ page import="javax.sql.*" %> 
<%@ page import="javax.naming.*" %> 
<%
Context ctx = new InitialContext(); 
DataSource ds = (DataSource)ctx.lookup("java:/MSSQLDS"); 
Connection conn = ds.getConnection(); 
PreparedStatement ps=conn.prepareStatement("select * from xiluda");
ResultSet rs=ps.executeQuery();
while(rs.next())
{
  out.println(rs.getString(1));
}
%> 
<img src ="http://www.blogjava.net/xiaozhi19820323/aggbug/38594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaozhi19820323/" target="_blank">xiaozhi</a> 2006-04-01 11:51 <a href="http://www.blogjava.net/xiaozhi19820323/archive/2006/04/01/38594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Jetspeed2.0中安装JCMS </title><link>http://www.blogjava.net/xiaozhi19820323/archive/2006/03/31/38496.html</link><dc:creator>xiaozhi</dc:creator><author>xiaozhi</author><pubDate>Fri, 31 Mar 2006 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/xiaozhi19820323/archive/2006/03/31/38496.html</guid><wfw:comment>http://www.blogjava.net/xiaozhi19820323/comments/38496.html</wfw:comment><comments>http://www.blogjava.net/xiaozhi19820323/archive/2006/03/31/38496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaozhi19820323/comments/commentRss/38496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaozhi19820323/services/trackbacks/38496.html</trackback:ping><description><![CDATA[前言
JCMS是Jetspeed Content Management System的缩写，目前的版本是基于Jetspeed2.0的α1版本，功能还非常有限。本文介绍了如何在Jetspeed2.0的final release版本下安装和部署JCMS，并将JCMS提供的几个Portlet定制到页面上。
安装和配置Jetspeed2.0和JCMS需要的时间比较长，因为需要从网上找安装程序、下载安装、配置环境，还要懂Maven,不过如果大家有耐心，还是可以成功的，我花了一整天的时间才弄好。
安装JCMS前需要安装jetspeed2.0,请使用官方发布的2.0release版本，不要从jetspeed2.0的最新原码库下载，否则JCMS不能正常部署使用。

安装步骤
先安装JDK  我认为1.42 以上版本就可以了。。。

1） JetSpeed2.0安装程序：
从http://portals.apache.org/jetspeed-2/ 地址下载Jetspeed2.0-derby-install.jar  然后你进DOS 下 找到你放Jetspeed2.0-derby-install.jar 的路径 运行java –jar Jetspeed2.0-derby-install.jar 
例如我把Jetspeed2.0-derby-install.jar 放到了I:\jakarta-tomcat-5.0.28 我在DOS下I:\jakarta-tomcat-5.0.28>java –jar Jetspeed2.0-derby-install.jar
这时候你就可以进行安装了 先一顿下一步 完了出现一个 让你选择的安装路径 你最好是用默认的要不会包错误，至于为啥，我也不知道！
这样就安装好了。。。 这样你就可以启动TOMCAT了（我安装到了C:\Apache Jetspeed 2.0\bin） 。http://localhost:8080/jetspeed
在出现的页面中有一个登录用户和密码的Portlet窗口，输入用户名和口令都是admin,admin,登录成功以后修改密码保存。关掉tomcat开始进行以下步骤。
2） 安装maven:
我使用的maven是maven-1.1-beta-2.exe，下载地址忘记了。建议不要使用maven的最新版本，否则可能有问题，而且与本文的安装方式可能不一致。安装好maven后需要配置环境变量，增加系统环境变量：MAVEN_HOME ，值为你安装Maven的根路径，这个根路径下有bin子目录。系统变量还要修改path,在系统的path环境变量增加%MAVEN_HOME%\bin;
3）下载JCMS源代码
JCMS源代码下载地址是：https://svn.apache.org/repos/asf/incubator/graffito/ ，下载前需要安装Subversion,我使用的是svn-1.2.3-setup.exe（好不容易从网上找到的windows安装版），找到Subversion的bin目录，自己写一个.bat文件或在命令行模式下输入：svn checkout https://svn.apache.org/repos/asf/incubator/graffito/ c:\cmsjetspeed
其中c:\cmsjetspeed 是下载源码的目标地址，大家可以任意指定。
修改C:\cmsjetspeed\trunk\jetspeed2-deploy\src\assembly\graffito.xml（这个文件在JCMS部署后会自动复制到C:\tomcat\webapps\jetspeed\WEB-INF\assembly目录下），找到
JetspeedDS，将JetspeedDS改为JetspeedCMS,因为我要配置JCMS使用Mysql数据库，而不是使用Jetspeed2内嵌的Derby数据库。JetspeedCMS对应到C:\tomcat\webapps\jetspeed\WEB-INF\assembly\boot\datasource.xml里的配置，打开datasource.xml，找到：


java:comp/env/jdbc/jetspeed


复制上段配置，粘贴到下面一行，并做修改，修改后的配置：



java:comp/env/jdbc/mycms


这是JCMS要使用的数据源。

再到C:\tomcat\webapps\jetspeed\WEB-INF打开web.xml文件，在

DB Connection
jdbc/jetspeed
javax.sql.DataSource
Container

下面增加：

DB Connection
jdbc/mycms
javax.sql.DataSource
Container

修改C:\tomcat\conf\context.xml，内容如下：


WEB-INF/web.xml
maxActive="100" maxIdle="30" maxWait="10000"
username="root" password="mysql"
driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost/graffitotest"/>



更改C:\tomcat\conf\tomcat-users.xml，为tomcat用户增加manager角色：
。

4） 在网上找到mysql-connector-java-3.1.12-bin.jar，放到tomcat的common\lib里。
5） 安装Mysql数据库，并更改root的登录口令为mysql,并创建一个graffitotest和j2数据库。
6)配置maven的编译环境：
如果你的机器是windows xp,并且windows xp装在c盘，则进入C:\Documents and Settings，选择你现在使用windows的用户名的这个目录，进入这个目录创建一个build.properties文件，内容如下：
# ---------------------------------------------------------------------------------
# GRAFFITO
# ---------------------------------------------------------------------------------

#Uncomment the following line if you want to run the unit tests
#maven.test.skip=false

# configure TEST DB

org.apache.portals.graffito.test.database.default.name=mysql
org.apache.portals.graffito.test.jetspeed=false
org.apache.portals.graffito.test.database.url = jdbc:mysql://localhost/graffitotest?useServerPrepStmts=false
org.apache.portals.graffito.test.database.driver = com.mysql.jdbc.Driver 
org.apache.portals.graffito.test.database.user = root
org.apache.portals.graffito.test.database.password = mysql
org.apache.portals.graffito.test.jdbc.drivers.path=C:/cmsjetspeed/mysql-connector-java-3.1.12-bin.jar


# configure PRODUCTION DB

org.apache.portals.graffito.production.database.default.name=mysql
org.apache.portals.graffito.production.jetspeed=true
#org.apache.portals.graffito.production.database.url = jdbc:mysql://localhost/j2?useServerPrepStmts=false
org.apache.portals.graffito.production.database.url = jdbc:mysql://localhost/graffitotest?useServerPrepStmts=false
org.apache.portals.graffito.production.database.driver = com.mysql.jdbc.Driver
org.apache.portals.graffito.production.database.user = root
org.apache.portals.graffito.production.database.password = mysql
org.apache.portals.graffito.production.jdbc.drivers.path=C:/cmsjetspeed/mysql-connector-java-3.1.12-bin.jar


#Configue the Graffito Master OJB Store - USED FOR THE UNIT TESTS
org.apache.portals.graffito.database.ojb.platform=MySQL
org.apache.portals.graffito.database.ojb.datasource=java:comp/env/jdbc/mycms



# ---------------------------------------------------------------------------------
# JETSPEED 2
# ---------------------------------------------------------------------------------

org.apache.jetspeed.server.home=C:/tomcat
org.apache.jetspeed.server.shared=${org.apache.jetspeed.server.home}/shared/lib/
org.apache.jetspeed.deploy.war.dir=${org.apache.jetspeed.server.home}/webapps/
org.apache.jetspeed.services.autodeployment.user=tomcat
org.apache.jetspeed.services.autodeployment.password=tomcat
org.apache.jetspeed.catalina.version.major=5.5

#下面这个目录有自己指定路径，指定的目录要求已经存在
org.apache.jetspeed.project.home = c:/cmsjetspeed/myproject
org.apache.jetspeed.portal.home = ${org.apache.jetspeed.project.home}


# configure MySQL TEST DB

#org.apache.jetspeed.test.database.default.name=mysql
#org.apache.jetspeed.test.database.url = jdbc:mysql://localhost/j2test?useServerPrepStmts=false
#org.apache.jetspeed.test.database.driver = com.mysql.jdbc.Driver
#org.apache.jetspeed.test.database.user = root
#org.apache.jetspeed.test.database.password = mysql
#org.apache.jetspeed.test.jdbc.drivers.path= C:/cmsjetspeed/mysql-connector-java-3.1.12-bin.jar
# configure MySQL Production DB


org.apache.jetspeed.production.database.default.name=mysql
org.apache.jetspeed.production.database.url = jdbc:mysql://localhost/j2?useServerPrepStmts=false
org.apache.jetspeed.production.database.driver = com.mysql.jdbc.Driver
org.apache.jetspeed.production.database.user = root
org.apache.jetspeed.production.database.password = mysql
org.apache.jetspeed.production.jdbc.drivers.path= C:/cmsjetspeed/mysql-connector-java-3.1.12-bin.jar

上面的配置也可能不是很科学，不过我这样配置是成功部署了JCMS,注意目录间隔用/而不是\,另外mysql-connector-java-3.1.12-bin.jar的路径指定为你机器上此文件的路径.
下面开始用maven编译：
第一步：
maven allClean allBuild

希望你能看到BUILD SUCCESS的字样，这一步执行成功后接着执行：
maven allDeploy
这一步如果成功的话，JCMS生成的war文件应该已放到了C:\tomcat\webapps\jetspeed\WEB-INF\deploy下面，在启动tomcat后会把deploy目录下的war转移到webapps目录下，启动时注意看一下控制台是否有错误抛出。
如果启动正常，请在地址栏输入:http://localhost:8080/jetspeed,页面应该出现jetspeed的主页而不是空白页或错误信息输出，登录后在页面左侧找到”第二个PSML页面”，点击，在页面右上角找一个笔状的编辑图标，在新出来的页面右上角有一个+号的图标，点击，会出现一个Portlet选择器窗口，有三个是与JCMS相关的，这三个Portlet分别是Graffito Tree,Graffito Document Viewer,Graffito Tree,选择复选框将三个Portlet加入到当前页面中。
关于JCMS的如何应用将另文叙述。

<img src ="http://www.blogjava.net/xiaozhi19820323/aggbug/38496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaozhi19820323/" target="_blank">xiaozhi</a> 2006-03-31 16:20 <a href="http://www.blogjava.net/xiaozhi19820323/archive/2006/03/31/38496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jetspeed项目的介绍</title><link>http://www.blogjava.net/xiaozhi19820323/archive/2006/03/31/38433.html</link><dc:creator>xiaozhi</dc:creator><author>xiaozhi</author><pubDate>Fri, 31 Mar 2006 03:57:00 GMT</pubDate><guid>http://www.blogjava.net/xiaozhi19820323/archive/2006/03/31/38433.html</guid><wfw:comment>http://www.blogjava.net/xiaozhi19820323/comments/38433.html</wfw:comment><comments>http://www.blogjava.net/xiaozhi19820323/archive/2006/03/31/38433.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaozhi19820323/comments/commentRss/38433.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaozhi19820323/services/trackbacks/38433.html</trackback:ping><description><![CDATA[ 1 Jetspeed介绍 Jetspeed是Apache组织开发的一个采用Java和XML的开放源代码的企业信息门户的实现。门户可以让终端用户可以很方便的访问网络资源（应用、数据库等）。用户可以通过Web浏览器、WAP手机、寻呼机以及其它一些智能设备来访问Portal。Jetspeed就像是中心的控制器，可以很方便地以各种形式展示那些来自不同数据源的数据。通过Jetspeed展示的数据形式完全独立于内容的类型。这就意味着Jetspeed可以集成各种各样的数据源，如：XML、RSS、SMTP。然后通过XSL技术将数据组织成Jsp页面或Html页面传给客户端。Jetspeed还支持模板和内容的发布框架，比如：Cocoon, WebMacro 和 Velocity。 2 Jetspeed框架结构和核心技术 Jetspeed采用Turbine做主要的框架支持，Turbine为Jetspeed提供用户认证、页面布局管理和计划服务等。Portlet可以直接使用Turbine服务提供的RunData对象。 Jetspeed向用户展示的页面由Turbine控制产生，它的主要内容部分由一些标准的Portlet构成。 Portlet设计的目标是： ◇ 一个页面上可以提供很多小的WEB应用程序给用户； ◇ 这些WEB应用程序的背景色、标题栏颜色、图标都可以更换； ◇ 可以用缓冲子系统维持跨多个Portlet的应用； ◇ 可以对所有的WEB应用程序进行管理、维护，并提供给用户； ◇ 简单的选择就可以让用户定制页面，这些页面除了一个页面可以显示多个Portlet之外，和Turbine的显示页面很相识； ◇ 由于缓冲子系统的存在，使得系统可以快速运行。这使得即使要和数据库打交道得复杂Portlet也可以快速生成Html页面； ◇ 很容易开发整个系统，开发人员不必知道整个Jetspeed的运行机制。 ◇ Portlet可以通过多种方式形成页面。可以通过JDBC从数据库记录产生页面；可以通过XML?>XSL?>HTML产生页面；可以通过其它途径如CoCoon形成页面； ◇ Portlet允许对它的显示风格进行定制，比如背景色、尺寸等。 ◇ Portlet通过PortletController来管理。这个PortletController是标准接口的实现，开发者可以定制它们； ◇ Portlet交给PortletControl来处理，PortletControl给Portlet加上显示风格后返回Portlet的内容； ◇ Jetspeed内通过XML标记文件分类管理Portlet； ◇ Portlet接受一个PortletConfig参数，这个参数中包括Url地址和一些参数的哈希表； ◇ 大多数简单的Portlet可以通过继承AbstractPortlet来实现。 3 Jetspeed的安装与配置 Jetspeed实际上是一个采用了Portlet技术的WEB应用程序，我们可以象部署普通WEB应用程序一样来部署Jetspeed。安装配置步骤： a．下载并安装Tomcat； b．下载Jetspeed war包，并拷贝到Tomcat的webapp目录； c．启动Tomcat，在浏览器中输入http://localhost:8080/jetspeed/； d．以上已经可以正确运行Jetspeed。进入Jetspeed系统可以使用Login: turbine Password: turbine；Login: admin Password: jetspeed。要注册新的用户必须安装邮件服务器James，邮件服务器设置在/webapps/jetspeed/WEB-INF/conf/TurbineResources.properties中修改。 e．数据库配置 Turbine目前可以通过JDBC连接以下数据库： ? Hypersonic SQL ? MySQL ? Postgres ? DB2 ? Oracle ? Sybase ? SQL Server 数据库的配置信息在 /webapp/WEB-INF/conf./Torque.properties文件中修改。具体配置的例子如下： ======MySQL:数据库配置如下====== ? torque.database.default.adapter=mysql ? torque.dsfactory.default.connection.driver = org.gjt.mm.mysql.Driver ? torque.dsfactory.default.connection.url = jdbc:mysql://localhost:3306/jetspeed ? torque.dsfactory.default.connection.user = root ? torque.dsfactory.default.connection.password = ======Oracle:数据库配置如下====== ? torque.database.default.adapter=oracle ? torque.dsfactory.default.connection.driver = oracle.jdbc.driver.OracleDriver ? torque.dsfactory.default.connection.url = jdbc:oracle:thin:@:1521: ? torque.dsfactory.default.connection.user = ? torque.dsfactory.default.connection.password = 4 Jetspeed的主要组成部分 4.1 注册机制 Jetspeed的注册登记部分存储了Jetspeed引擎中大多数的动态配置信息，其中包括所有可提供的Portlet的登记信息、布局信息登记、用户自定义信息等。 Jetspeed的注册机制采用可插入的Turbine服务体系。因此可以根据自己的需要采用不同的实现。现有两个已提供的默认实现：基于XML文件的实现；基于OJB 的SQL数据库的实现。 4.2 安全机制 Jetspeed安全服务基于以下一些组件接口：PortalAuthentication，PortalAccessController，UserManagement，RoleManagement，GroupManagement，PermissionManagement，CredentialsManagement。这些组件接口都是可插入的。Jetspeed提供了这些接口的一个或多个默认实现，大多数这些实现都是基于数据库的安全机制。安全服务和Portal Server中的一些标准的基础安全对象接口一起工作。这些安全对象包括：JetspeedUser、Role、Group、Permission。 4.3 内容整合能够支持内容整合是Portal和普通WEB网站、普通WEB应用之间相比最大的优势。Jetspeed中的内容整合是通过OCS（Open Content Syndication）来支持的。Jetspeed同样也支持RSS（Rich Site Summary）。 OCS和RSS都是基于XML的应用程序，用来支持页面的部分共享、频道列表、公共标题栏等实现。 4.4 WAP Jetspeed支持WAP（Wireless Application Protocol）。这项技术使得用户可以通过移动终端来访问Portal页面，可以进行多应用程序的简单集成和页面组织。Portlet可以将页面的形式以WML来表示。Jetspeed目前支持WML 1.1和1.2标准。 4.5 个性化定制支持个性化定制是Portal的另一大优点。Jetspeed可以让用户很容易的进行个性化定制。用户可以很方便创建页面，为每一个页面选择具体的Portlet内容、页面布局、显示风格。用户个性化必须在系统权限允许的范围内进行。 4.6 缓冲机制为了让Jetspeed更好的支持远程内容的显示和内容的发布，必须采用缓冲机制。 4.7 PSML PSML（Portal Structure Markup Language）使得在Jetspeed内允许内容组织和提取。PSML由两部分有关联的标记部分组成。 registry markup：描述Jetspeed引擎内可提供的资源； site markup：描述在用户的页面中显示了哪些Portlet，是怎么组织的，需要那些显示属性。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=640920

<img src ="http://www.blogjava.net/xiaozhi19820323/aggbug/38433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaozhi19820323/" target="_blank">xiaozhi</a> 2006-03-31 11:57 <a href="http://www.blogjava.net/xiaozhi19820323/archive/2006/03/31/38433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>