<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>菜鸟吴</title>
    <description>人生的最大遗憾莫过于错误地坚持了不该坚持的,
轻易地放弃了不该放弃的</description>
    <link>http://shiningwu.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>strtus2.0实现文件下载</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/199655" style="color:red;">http://shiningwu.javaeye.com/blog/199655</a>&nbsp;
          发表时间: 2008年06月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          文件下载需要注意的是中文文件名的问题<br />jsp页面<br /><pre name="code" class="java">
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" import="java.net.*"
	pageEncoding="UTF-8"%>
&lt;%@taglib prefix="s" uri="/struts-tags"%>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
	&lt;head>
		&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		&lt;title>简单的文件下载&lt;/title>
	&lt;/head>
	&lt;body>
		&lt;!-- 为了完成文件上传，设置该表单的enctype属性为multipart/form-data。 -->
		&lt;s:form action="download.action" method="post"
			enctype="multipart/form-data" theme="simple">
			&lt;ul>
				&lt;li>
					&lt;s:url id="url" action="download">
						&lt;s:param name="inputPath">/upload/&lt;%=URLEncoder.encode("新建文本文档.txt","utf-8")%>
						&lt;/s:param>
						&lt;s:param name="filename">&lt;%=URLEncoder.encode("新建文本文档.txt","utf-8")%>
						&lt;/s:param>
					&lt;/s:url>
					&lt;s:a href="%{url}">下载jpg&lt;/s:a>
					&lt;br>
					&lt;s:url id="url" action="download">
						&lt;s:param name="inputPath">/upload/a.doc
						&lt;/s:param>
						&lt;s:param name="filename">a.doc
						&lt;/s:param>
					&lt;/s:url>
					&lt;s:a href="%{url}">下载doc&lt;/s:a>
					&lt;br>
					&lt;s:url id="url" action="download">
						&lt;s:param name="inputPath">/upload/c.wma
						&lt;/s:param>
						&lt;s:param name="filename">c.wma
						&lt;/s:param>
					&lt;/s:url>
					&lt;s:a href="%{url}">下载wma&lt;/s:a>
				&lt;/li>
			&lt;/ul>
		&lt;/s:form>
	&lt;/body>
&lt;/html>
</pre><br />action<br /><pre name="code" class="java">
package org.login.actions;

import java.io.InputStream;
import java.net.URLDecoder;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class DownLoadAction extends ActionSupport {
	private String inputPath;

	private String filename;

	public String getInputPath() {
		return inputPath;
	}

	public void setInputPath(String inputPath) {
		this.inputPath = inputPath;
	}

	public String getFilename() {
		return filename;
	}

	public void setFilename(String filename) {
		this.filename = filename;
	}

	public InputStream getInputStream() throws Exception {
		//服务器上的文件 如/upload/a.txt
		inputPath=URLDecoder.decode(inputPath,"UTF-8");
		InputStream input=ServletActionContext.getServletContext().getResourceAsStream(
				inputPath);
		return input;
		//不在服务器上的文件 如F://a.txt
		//return new java.io.FileInputStream(inputPath);
	}

	public String download() throws Exception {
		//不进行动态设置下载文件名称及路径
		//inputPath = "/image/close_w.gif";// 要下载的文件名称
		//filename = "a.jpg"; // 保存文件时的名称
		return SUCCESS;
	}
}
</pre><br />struts.xml<br /><pre name="code" class="java">
&lt;action name="download" class="DownloadAction"
			method="download">
			&lt;result name="success" type="stream">
				&lt;param name="contentType">application/octet-stream;charset=ISO8859-1&lt;/param>
				&lt;param name="inputName">inputStream&lt;/param>
				&lt;param name="bufferSize">4096&lt;/param>
				&lt;param name="contentDisposition">
					attachment;filename="${filename}"
				&lt;/param>
			&lt;/result>
		&lt;/action>
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/199655#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 03 Jun 2008 11:14:46 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/199655</link>
        <guid>http://shiningwu.javaeye.com/blog/199655</guid>
      </item>
      <item>
        <title>struts2.0实现文件上传</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/199653" style="color:red;">http://shiningwu.javaeye.com/blog/199653</a>&nbsp;
          发表时间: 2008年06月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          将下面两个jar文件加入lib<br />commons-fileupload.jar<br />commons-io.jar<br />jsp页面<br /><pre name="code" class="java">
&lt;%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>
&lt;%@taglib prefix="s" uri="/struts-tags"%>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
&lt;head>
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
&lt;title>简单的文件上传&lt;/title>
&lt;/head>
&lt;body>
&lt;!-- 为了完成文件上传，设置该表单的enctype属性为multipart/form-data。 -->
&lt;s:form action="upload.action" method="post" enctype="multipart/form-data" theme="simple">
&lt;s:fielderror>&lt;/s:fielderror>
   选择文件：&lt;s:file name ="upload"/> &lt;br>
   选择文件：&lt;s:file name ="upload"/> &lt;br>
   选择文件：&lt;s:file name ="upload"/> &lt;br>
 &lt;s:submit /> 
&lt;/s:form>
&lt;/body>
&lt;/html>
</pre><br />action<br /><pre name="code" class="java">
action
package org.login.actions;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.apache.struts2.ServletActionContext;
import org.login.page.DateFormatUtil;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
	// 封装单个上传文件域的属性
	// private File upload;
	// 封装单个上传文件类型的属性
	// private String uploadContentType;
	// 封装单个上传文件名的属性
	// private String uploadFileName;

	//封装多个上传文件域的属性
	private List&lt;File> upload = new ArrayList&lt;File>();
	// 封装多个上传文件类型的属性
	private List&lt;String> uploadContentType = new ArrayList&lt;String>();
	// 封装多个上传文件名的属性
	private List&lt;String> uploadFileName = new ArrayList&lt;String>();
	
	//动态设置上传文件保存地址
	private String savePath;
	
	public String getSavePath() {
		return ServletActionContext.getRequest().getRealPath(savePath);
	}

	public void setSavePath(String savePath) {
		this.savePath = savePath;
	}

	/*
	 * // 上传单个文件对应文件内容的setter和getter方法
	 *  public void setUpload(File upload) {
	 *    this.upload = upload;
	 *  }
	 * public File getUpload() { 
	 *    return (this.upload); 
	 * } 
	 * 
	 * //上传单个文件的文件类型的setter和getter方法 
	 * public void setUploadContentType(String	uploadContentType) { 
	 *   this.uploadContentType = uploadContentType;
	 *  }
	 * public String getUploadContentType() {
	 *  return (this.uploadContentType);
	 * } 
	 * 
	 * // 上传单个文件的文件名的setter和getter方法 
	 * public void setUploadFileName(String uploadFileName) { 
	 *  this.uploadFileName = uploadFileName; 
	 * }
	 * public String getUploadFileName() {
	 *  return (this.uploadFileName);
	 *   }
	 */

	//上传多个文件对应文件内容的setter和getter方法
	public List&lt;File> getUpload() {
		return upload;
	}
	public void setUpload(List&lt;File> upload) {
		this.upload = upload;
	}
	
	//  上传多个文件的文件类型setter和getter方法 
	public List&lt;String> getUploadContentType() {
		return uploadContentType;
	}
	public void setUploadContentType(List&lt;String> uploadContentType) {
		this.uploadContentType = uploadContentType;
	}

	// 上传多个文件的文件名的setter和getter方法 
	public List&lt;String> getUploadFileName() {
		return uploadFileName;
	}
	public void setUploadFileName(List&lt;String> uploadFileName) {
		this.uploadFileName = uploadFileName;
	}

	public String upload() {
		//上传多个文件
		List&lt;File> files = getUpload();
		// String ext ="";
		FileOutputStream fos = null;
		FileInputStream fis = null;
		byte[] buffer = new byte[1024];
		int len = 0;
		Random rd = new Random();
		for (int i = 0; i &lt; files.size(); i++) {
			try {
				//以服务器的文件保存地址和当前时间组合文件名建立上传文件输出流
				// ext =uploadFileName.get(i).substring(uploadFileName.get(i).lastIndexOf('.'));
				 /* fos = new FileOutputStream(getSavePath()+ File.separator+
				 * DateFormatUtil.getCurrentCustomFormatDateTime(DateFormatUtil.DATE_TIME_FORMAT_14) +
				 * String.valueOf(rd.nextInt(1000))+ext);
				 */
				fos = new FileOutputStream(getSavePath() + File.separator
						+ uploadFileName.get(i));
				// 以上传文件建立一个文件上传流
				fis = new FileInputStream(files.get(i));
				// 将上传文件的内容写入服务器
				len = 0;
				while ((len = fis.read(buffer)) > 0) {
					fos.write(buffer, 0, len);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		/*上传单个文件
		 * try { 
		 * // 以服务器的文件保存地址和原文件名建立上传文件输出流 
		 * FileOutputStream fos = new FileOutputStream(ServletActionContext .getRequest().getRealPath("") +
		 * File.separator + "upload" + File.separator + getUploadFileName());
		 * // 以上传文件建立一个文件上传流 
		 * FileInputStream fis = new FileInputStream(getUpload());
		 * // 将上传文件的内容写入服务器 
		 * byte[] buffer = new byte[1024];
		 * int len = 0;
		 * while ((len = fis.read(buffer)) > 0) {
		 * fos.write(buffer, 0, len); 
		 * } 
		 * } catch (Exception e) { 
		 * }
		 */
		return SUCCESS;
	}
}
</pre><br />struts.xml<br /><pre name="code" class="java">
&lt;action name="upload" class="UploadAction" method="upload">
			&lt;!-- 配置fileUpload的拦截器 -->
			&lt;interceptor-ref name="fileUpload">
				&lt;!-- 配置允许上传的文件类型 -->
				&lt;param name="allowedTypes">
					image/bmp,image/png,image/gif,image/jpeg,image/jpg,application/msword,text/plain
				&lt;/param>
				&lt;!-- 配置允许上传的文件大小 -->
				&lt;param name="maximumSize">2000000000&lt;/param>
			&lt;/interceptor-ref>
			&lt;interceptor-ref name="defaultStack" />
			&lt;!-- 动态设置Action的属性值 -->
			&lt;param name="savePath">/upload&lt;/param>
			&lt;result>/upload_succ.jsp&lt;/result>
			&lt;result name="input">/upload.jsp&lt;/result>
		&lt;/action>
</pre><br /><br />上传成功页面<br /><pre name="code" class="java">
&lt;%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
&lt;%@taglib prefix="s" uri="/struts-tags"%>
&lt;html>
    &lt;head>
        &lt;title>上传成功&lt;/title>
    &lt;/head>
    &lt;body>
        上传成功!&lt;br>
  &lt;!-- 输出上传的表单里的文件标题属性 -->
  文件标题:&lt;s:property value=" + title"/>&lt;br>
  &lt;!-- 根据上传文件的文件名，在页面上显示上传的图片 -->
  文件为：&lt;s:property value="uploadFileName"/>&lt;br>
    &lt;/body>
&lt;/html>
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/199653#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 03 Jun 2008 11:09:25 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/199653</link>
        <guid>http://shiningwu.javaeye.com/blog/199653</guid>
      </item>
      <item>
        <title>有关桃桃</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/190260" style="color:red;">http://shiningwu.javaeye.com/blog/190260</a>&nbsp;
          发表时间: 2008年05月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          隔三差五的在工作时间骚扰桃桃已成为了习惯，虽然大部分的情况下（4/5的比例）被忽视，我仍然乐此不疲。不能怪我，要怪只能怪她从不隐身。5.1前桃桃提及要去普陀山，我还很白痴的问了句：是四川的吧？被嘲笑“土鳖”...5.4上班后，迫不及待的想要PP看，无奈仍碰到那4/5的比例。今日下午突然发现那女人在听歌，凭以往的经验，有戏...<br /><br />吴小猪 14:24:25<br />去普陀山了没啊 <br /> <br />～桃啊桃～ 14:24:39<br />去了啊<br />吴小猪 14:24:48<br />爽不？ <br /> <br />吴小猪 14:25:14<br />好玩不？ <br /> <br />～桃啊桃～ 14:25:25<br />自己看<br />吴小猪 14:25:42<br />哦 我给你发到mop上  <br /> <br />～桃啊桃～ 14:25:48<br />........................<br />～桃啊桃～ 14:25:53<br />咋镇J了<br />吴小猪 14:26:36<br />那发到大旗上 <br /> <br />～桃啊桃～ 14:27:15<br />P<br /><br />吴小猪 14:28:07<br />你又一次把你的隐私暴露给我鸟~ <br /><br />从初中毕业分开，每次桃桃有什么动向让我知道，我总会在第一时间告诉老妈，由此得了个八卦的名号。三年后很不幸的又和桃桃考到了同一所大学，大二才搬她们的校区，第一次见面就忍着被蚊子咬的满身包包，看着她哭了2个小时（貌似），小姑娘失恋了...貌似那是唯一一次见到那个BH的女人哭（当时没相机留个纪念是巨大的遗憾）。当晚回去，没忍住还是给老妈打了电话，兴奋之情溢于言表。<br />几年大学没什么联系，各自有各自的生活，毕业后桃桃去了南京，接着为了爱情奔向上海，联系也仅限于固定的几个假期，其中N次是去帮她重装系统...偶尔QQ上瞎扯，大多也以我呗嘲笑“土鳖”而结束。<br />看了她的blog才发现，现在的桃桃早已经不是那个我记忆里每天下课后去吃品品味、和同学打闹把人家门牙神经磕断、骑着自行车隔着马路大声叫我、整天没心没肺的桃桃了。<br />不管怎样，希望她能快乐、幸福的生活。
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/190260#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 06 May 2008 15:44:50 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/190260</link>
        <guid>http://shiningwu.javaeye.com/blog/190260</guid>
      </item>
      <item>
        <title>myeclipse6.0下struts2.0+spring2.0+ibatis整合示例</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/184117" style="color:red;">http://shiningwu.javaeye.com/blog/184117</a>&nbsp;
          发表时间: 2008年04月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          参考网上的例子，自己做了个简单的struts2.0+ibatis+spring2.0登陆的例子。<br />链接：http://blog.csdn.net/jinlong0/archive/2008/01/11/2034732.aspx<br />1. 新建web工程<br /><img src=" http://shiningwu.javaeye.com/upload/picture/pic/12457/86475e67-51e5-3fba-998c-4e1178dfd578.bmp " /> <br />点击“finish”。<br />2. 加入jar包<br />将下面的jar包加入WEB-INF/lib下<br />antlr-2.7.2.jar<br />aopalliance.jar<br />cglib-2.1.3.jar<br />commons-collections.jar<br />commons-dbcp.jar<br />commons-logging-1.0.4.jar<br />commons-pool.jar<br />freemarker-2.3.8.jar<br />ibatis-2.3.1.710.jar<br />mysql-connector-java-5.0.4-bin.jar<br />ognl-2.6.11.jar<br />oro-2.0.8.jar<br />spring.jar<br />struts2-core-2.0.11.1.jar<br />struts2-spring-plugin-2.0.11.1.jar<br />xwork-2.0.4.jar<br />3. 配置web.xml文件<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  &lt;welcome-file-list>
    &lt;welcome-file>login.jsp&lt;/welcome-file>
  &lt;/welcome-file-list>
  &lt;context-param>  
		&lt;param-name>contextConfigLocation&lt;/param-name>
		&lt;param-value>/WEB-INF/classes/applicationContext.xml&lt;/param-value> 
	&lt;/context-param> 
  &lt;listener>
      &lt;listener-class>org.springframework.web.context.ContextLoaderListener&lt;/listener-class>
  &lt;/listener>
  &lt;filter>
      &lt;filter-name>struts2&lt;/filter-name>
      &lt;filter-class>org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class>
  &lt;/filter>
  &lt;filter-mapping>
      &lt;filter-name>struts2&lt;/filter-name>
      &lt;url-pattern>/*&lt;/url-pattern>
  &lt;/filter-mapping>
&lt;/web-app>
</pre><br />4. 创建类与类包<br />结构如下图<br /><img src="http://shiningwu.javaeye.com/upload/picture/pic/12455/3668ca76-3bd8-3253-aec6-5d69df169dc8.bmp " /> <br />5. 映射数据库表Users.java<br /><pre name="code" class="java">
package org.login.vo;

public class Users {
	private Integer id;
    private String userName;
    private String password;
        
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Users() {
        
    }

    public Users(Integer id, String userName, String password) {
        super();
        this.id = id;
        this.userName = userName;
        this.password = password;
    }

}
</pre><br />6. 映射xml（users.xml）<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>

&lt;!DOCTYPE sqlMap      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">
&lt;sqlMap namespace="User">
    &lt;typeAlias alias="user" type="org.login.vo.Users"/>
    
    &lt;select id="recordCount" resultClass="int">
		select count(*) as count from users
	&lt;/select>
	&lt;select id="firstPage" resultClass="user" parameterClass="user">
		select top $pagesize$ * from users order by id desc
	&lt;/select>

	&lt;!--分页排序-->
	&lt;sql id="paginationStart">
		&lt;![CDATA[
		   select * from (select row_.*, rownum rownum_ from (
		  ]]&gt;
	&lt;/sql>
	&lt;sql id="paginationEnd">
		&lt;![CDATA[
		   )row_ where rownum&lt;=#end# ) where rownum_>=#start#
		  ]]&gt;
	&lt;/sql>

	&lt;select id="otherPage" resultClass="user" parameterClass="map">
        &lt;include refid="paginationStart"/>
        &lt;![CDATA[
            SELECT 
             * 
            FROM 
             users
        ]]&gt;
        &lt;include refid="paginationEnd"/> 
	&lt;/select>
	
    &lt;select id="checkUser" parameterClass="user" resultClass="user">
        &lt;![CDATA[
            SELECT id, username, password FROM users WHERE username = #userName# and password = #password#
        ]]&gt;
    &lt;/select>
    
    &lt;select id="getUserById" parameterClass="java.lang.Integer" resultClass="user">
        &lt;![CDATA[
            SELECT id, username, password FROM users WHERE id = #id#
        ]]&gt;
    &lt;/select>
    
    &lt;select id="getAllUser" resultClass="user" parameterClass="map">
        &lt;![CDATA[
            SELECT id, username, password FROM users limit #start# ,#end#
        ]]&gt;
    &lt;/select>
    
    &lt;insert id="insertUser" parameterClass="user">
        &lt;![CDATA[
            INSERT INTO users (username, password) VALUES (#userName#, #password#)
        ]]&gt;
    &lt;/insert>
    
    &lt;update id="updateUser" parameterClass="user">
        &lt;![CDATA[
            UPDATE users SET username=#userName#, password=#password# WHERE id=#id#
        ]]&gt;
    &lt;/update>
    
    &lt;delete id="deleteUser" parameterClass="java.lang.Integer">
        &lt;![CDATA[
            DELETE FROM users WHERE id = #id#
        ]]&gt;
    &lt;/delete>
&lt;/sqlMap></pre><br />7. 接口及实现<br />接口IUserDAO.java<br /><pre name="code" class="java">
package org.login.dao;

import java.util.List;
import org.login.vo.Users;

public interface IUserDAO {
    List&lt;Users> getAllUser();   
    Users getUserById(Integer id);   
    boolean isLogin(Users user);
    boolean insertUser(Users user);
    boolean updateUser(Users user);  
    boolean deleteUser(Integer id);
}
</pre><br />实现UserDAO<br /><pre name="code" class="java">
package org.login.dao.Impl;

import java.sql.SQLException;
import java.util.List;

import org.login.dao.IUserDAO;
import org.login.vo.Users;
import com.ibatis.sqlmap.client.SqlMapClient;


public class UserDAO implements IUserDAO {

    private SqlMapClient client = null;

    public SqlMapClient getClient() {
        return client;
    }

    public void setClient(SqlMapClient client) {
        this.client = client;
    }

    
    public boolean deleteUser(Integer id) {
        try {
            client.delete("deleteUser", id);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

  
    public List&lt;Users> getAllUser() {
        List&lt;Users> list = null;
        try {
            list =  client.queryForList("getAllUser");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

   
    public boolean insertUser(Users user) {
        try {
            client.insert("insertUser", user);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

  
    public boolean updateUser(Users user) {
        try {
            client.update("updateUser", user);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

  
    public boolean isLogin(Users user) {
        try {
            Users u = (Users) client.queryForObject("checkUser", user);
            if (u != null) {
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

  
    public Users getUserById(Integer id) {
        Users u = null;
        try {
            u = (Users) client.queryForObject("getUserById", id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return u;
    }

}
</pre><br />服务层接口IUserService.java<br /><pre name="code" class="java">
package org.login.service;

import java.util.List;

import org.login.vo.Users;

public interface IUserService {
    
    List&lt;Users> getAllUser();
    
    Users getUserById(Integer id);
    
    boolean isLogin(Users user);
    
    boolean insertUser(Users user);
    
    boolean updateUser(Users user);
    
    boolean deleteUser(Integer id);
}
</pre><br />服务层实现UserService.java<br /><pre name="code" class="java">
package org.login.service.Impl;

import java.util.List;

import org.login.dao.IUserDAO;
import org.login.service.IUserService;
import org.login.vo.Users;



public class UserService implements IUserService {

    private IUserDAO userDAO = null;
    
    public IUserDAO getUserDAO() {
        return userDAO;
    }

    public void setUserDAO(IUserDAO userDAO) {
        this.userDAO = userDAO;
    }

    
    public boolean deleteUser(Integer id) {
        
        return userDAO.deleteUser(id);
    }

  
    public List&lt;Users> getAllUser() {
        
        return userDAO.getAllUser();
    }

  
    public boolean insertUser(Users user) {
        
        return userDAO.insertUser(user);
    }

   
    public boolean isLogin(Users user) {
        
        return userDAO.isLogin(user);
    }

  
    public boolean updateUser(Users user) {
        
        return userDAO.updateUser(user);
    }

   
    public Users getUserById(Integer id) {
        
        return userDAO.getUserById(id);
    }

}
</pre><br />Struts中Action实现Login.java<br /><pre name="code" class="java">
package org.login.actions;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.xml.registry.infomodel.User;

import org.login.page.PageUtil;
import org.login.service.IUserService;
import org.login.vo.Users;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;

public class Login extends ActionSupport implements ModelDriven&lt;Users>, Preparable {
    private IUserService userService ; 
    private String id ;
    private int pageIndex=1 ;
	private String pageBar ;
	private List&lt;Users> list;
	private Users user;
    
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
    
    public IUserService getUserService() {
        return userService;
    }

    public void setUserService(IUserService userService) {
        this.userService = userService;
    }

	public int getPageIndex() {
		return pageIndex;
	}

	public void setPageIndex(int pageIndex) {
		this.pageIndex = pageIndex;
	}
	

	public String getPageBar() {
		return pageBar;
	}

	public void setPageBar(String pageBar) {
		this.pageBar = pageBar;
	}
	

	public List&lt;Users> getList() {
		return list;
	}

	public void setList(List&lt;Users> list) {
		this.list = list;
	}
	
	public Users getUser() {
		return user;
	}

	public void setUser(Users user) {
		this.user = user;
	}
    
	public void prepare() throws Exception {
		if (id == null || id.length() == 0)
			user = new Users();
		else
			user = getUserService().getUserById(Integer.parseInt(id));
	}
	
    public String execute() throws Exception {
        if (getUserService().isLogin(user)) {
            return SUCCESS;
        }
        return INPUT;
    }
    
    public String save() throws Exception {
        if (getUserService().insertUser(user)) {
            return SUCCESS;
        }
        return ERROR;
    }

    public String edit() {
		return SUCCESS;
	}
    
    public String update() throws Exception {    
        if (getUserService().updateUser(user)) {
                return SUCCESS;
        }    
        return ERROR;
    }
    
    public String delete() throws Exception {
        if (getUserService().deleteUser(Integer.valueOf(id))) {
            return SUCCESS;
        }
        return ERROR;
    }
    
    
    public String findAllUsers() throws Exception {
    	PageUtil page = new PageUtil();	
		int count = getUserService().getCount();
		page.setCurPage(pageIndex);
		page.setTotalRow(count);
		pageBar = page.getToolsMenu();
		Map&lt;String,Integer> pageMap = new HashMap&lt;String,Integer>();
		pageMap.put("start", page.getStart());
		pageMap.put("end", page.getPageSize());
        list = getUserService().getAllUser(pageMap); 
        return SUCCESS;
    }
    
    public Users getModel() {
		return user;
	}



}</pre><br />8. 配置文件<br />struts.xml<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
&lt;struts>
    &lt;constant name="struts.objectFactory.spring.autoWire" value="type" />
	&lt;constant name="struts.objectFactory" value="spring" />
    &lt;include file="struts-default.xml"/>
    &lt;package name="struts2" extends="struts-default">
    &lt;default-interceptor-ref name="paramsPrepareParamsStack" />
        &lt;!-- aciton的class为applicationContext.xml中的注册名 -->
        &lt;action name="login" class="LoginAction">
            &lt;result name="success">/success.jsp&lt;/result>
            &lt;result name="input">/login.jsp&lt;/result>
        &lt;/action>
        &lt;action name="save" class="LoginAction" method="save">
            &lt;result name="success" type="redirect-action">show.action&lt;/result>
            &lt;result name="error">/error.jsp&lt;/result>
        &lt;/action>
        &lt;action name="edit" class="LoginAction" method="edit">
			&lt;result name="success">update.jsp&lt;/result>
		&lt;/action>
        &lt;action name="update" class="LoginAction" method="update">
            &lt;result name="success" type="redirect-action">show.action&lt;/result>
            &lt;result name="error">/error.jsp&lt;/result>
        &lt;/action>
        &lt;action name="delete" class="LoginAction" method="delete">
            &lt;result name="success" type="redirect-action">show.action&lt;/result>
            &lt;result name="error">/error.jsp&lt;/result>
        &lt;/action>
        &lt;action name="show" class="LoginAction" method="findAllUsers">
            &lt;result name="success">/list.jsp&lt;/result>
            &lt;result name="error">/error.jsp&lt;/result>
        &lt;/action>
    &lt;/package>
&lt;/struts></pre><br />struts.properties文件<br /><pre name="code" class="java">
struts.locale=zh_CN
struts.i18n.encoding=UTF-8  
struts.objectFactory=spring  
</pre><br />ibatis的配置文件config.xml<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;!DOCTYPE sqlMapConfig      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
    
&lt;sqlMapConfig>
    &lt;sqlMap resource="org/login/vo/users.xml"/>
&lt;/sqlMapConfig>
</pre><br />Spring配置文件applicationContext.xml<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;beans default-autowire="byType"
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        &lt;property name="driverClassName" value="com.mysql.jdbc.Driver" />
        &lt;property name="url" value="jdbc:mysql://192.168.151.238:3306/chgl" />
        &lt;property name="username" value="vcom" />
        &lt;property name="password" value="vcom_8968888" />
    &lt;/bean>
    
    &lt;bean id="client" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        &lt;property name="dataSource">
            &lt;ref local="dataSource"/>
        &lt;/property>
        &lt;property name="configLocation">
            &lt;value>classpath:config.xml&lt;/value>
        &lt;/property>
    &lt;/bean>
    
    &lt;!-- bean中的class为实现接口的类；property的name为类中引用的属性名称；ref为spring注册的名称，如上面的client-->
    &lt;bean id="userDao"
		class="org.login.dao.Impl.UserDAO">
		&lt;property name="client" ref="client" />
	&lt;/bean>

	&lt;bean id="userService"
		class="org.login.service.Impl.UserService">
		&lt;property name="userDAO" ref="userDao">&lt;/property>
	&lt;/bean>

	&lt;bean id="LoginAction" class="org.login.actions.Login">
		&lt;property name="userService" ref="userService">&lt;/property>
	&lt;/bean>
&lt;/beans>
</pre><br />9. UI层<br />登陆页面login.jsp<br /><pre name="code" class="java">
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
&lt;%@ taglib uri="/struts-tags" prefix="s" %>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
  &lt;head>
    &lt;title>login.jsp&lt;/title>
  &lt;/head>
  
  &lt;body>
    &lt;s:form action="login" method="post">
    &lt;s:textfield name="userName" label="User Name" />
    &lt;s:password name="password" label="Password" />
    &lt;s:submit value="Submit" />
    &lt;/s:form>
  &lt;/body>
&lt;/html></pre><br />添加用户页面adduser.jsp<br /><pre name="code" class="java">
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
&lt;%@ taglib uri="/struts-tags" prefix="s" %>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
  &lt;head>
    &lt;title>addUser.jsp&lt;/title>
  &lt;/head>
  
  &lt;body>
    &lt;s:form action="save">
    &lt;s:textfield name="userName" label="User Name" />
    &lt;s:password name="password" label="Password" />
    &lt;s:submit value="Save" />
    &lt;/s:form>
  &lt;/body>
&lt;/html></pre><br />用户列表页面list.jsp<br /><pre name="code" class="java">
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
&lt;%@ taglib uri="/struts-tags" prefix="s" %>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
  &lt;head>
    &lt;title>Users list&lt;/title>
    &lt;style type="text/css">
        table {
            border-collapse: collapse;
        }
    &lt;/style>
  &lt;/head>
  
  &lt;body>
      &lt;br />&lt;br />&lt;br />&lt;br />
    &lt;s:form action="show">
    &lt;table border="1" width="50%" align="center">
        &lt;tr bgcolor="#cccc00">
            &lt;td align="center">UserID&lt;/td>
            &lt;td align="center">UserName&lt;/td>
            &lt;td align="center">Password&lt;/td>
            &lt;td colspan="2" align="center">Options&lt;/td>
        &lt;/tr>
        &lt;s:iterator value="list" id="user" status="st">
        &lt;tr &lt;s:if test="#st.odd">style="background-color:#dddddd"&lt;/s:if>
			&lt;s:else>style="background-color:#eeeeee"&lt;/s:else>>
            &lt;td align="center">&lt;s:property value="id" />&lt;/td>
            &lt;td align="center">&nbsp;&lt;s:property value="userName" />&lt;/td>
            &lt;td align="center">&nbsp;&lt;s:property value="password" />&lt;/td>
            &lt;td align="center">
            &lt;s:url id="update" action="edit">
			   &lt;s:param name="id">
			   &lt;s:property value="id" /> 
			   &lt;/s:param>
			&lt;/s:url> 
			&lt;s:a href="%{update}">update&lt;/s:a>
			&lt;/td>
			
            &lt;td align="center">
            &lt;s:url id="delete" action="delete">
			   &lt;s:param name="id">
			   &lt;s:property value="id" />
			   &lt;/s:param>
			&lt;/s:url> 
			&lt;s:a href="%{delete}">delete&lt;/s:a>
			&lt;/td>
        &lt;/tr>
        &lt;/s:iterator>
        &lt;tr>
				&lt;td colspan="4"> 
					&lt;s:property value="#request.pageBar" escape="false"/>
				&lt;/td>
		&lt;/tr>
    &lt;/table>
    &lt;/s:form>
  &lt;/body>
&lt;/html></pre><br />用户更新页面update.jsp<br /><pre name="code" class="java">
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
&lt;%@ taglib uri="/struts-tags" prefix="s" %>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
  &lt;head>
    &lt;title>update.jsp&lt;/title>
  &lt;/head>
  
  &lt;body>
    &lt;s:form action="update" method="post">
        &lt;s:textfield name="id" label="ID" value="%{id}"  readonly="true"/>
        &lt;s:textfield name="userName" label="User Name" value="%{userName}"  required="true"/>
        &lt;s:textfield name="password" label="Password" value="%{password}"  required="true"/>
        &lt;s:submit value="Update" />
    &lt;/s:form>
  &lt;/body>
&lt;/html></pre><br />成功页面success.jsp<br /><pre name="code" class="java">
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
&lt;%@ taglib uri="/struts-tags" prefix="s" %>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
  &lt;head>
    &lt;title>success&lt;/title>
  &lt;/head>
  
  &lt;body>
    This is Success page. &lt;br>
    &lt;br />&lt;br />
    &lt;a href="show.action">显示用户列表&lt;/a>  &lt;a href="adduser.jsp">添加用户&lt;/a>
  &lt;/body>
&lt;/html>
</pre><br />失败页面error.jsp<br /><pre name="code" class="java">
&lt;%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
&lt;%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
  &lt;head>
    &lt;base href="&lt;%=basePath%>">
    
    &lt;title>My JSP 'error.jsp' starting page&lt;/title>
    
	&lt;meta http-equiv="pragma" content="no-cache">
	&lt;meta http-equiv="cache-control" content="no-cache">
	&lt;meta http-equiv="expires" content="0">    
	&lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	&lt;meta http-equiv="description" content="This is my page">
	&lt;!--
	&lt;link rel="stylesheet" type="text/css" href="styles.css">
	-->

  &lt;/head>
  
  &lt;body>
    This is my JSP page. &lt;br>
  &lt;/body>
&lt;/html>
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/184117#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 18 Apr 2008 15:12:19 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/184117</link>
        <guid>http://shiningwu.javaeye.com/blog/184117</guid>
      </item>
      <item>
        <title>myeclipse6.0下struts2.0+spring2.0+hibernate3.2的整合示例</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/184111" style="color:red;">http://shiningwu.javaeye.com/blog/184111</a>&nbsp;
          发表时间: 2008年04月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          趁着测试空闲，学习struts2.0+spring2.0+hibernate3.2的整合，对这3种技术都只有最基本的了解，网上查了N多资料，找到一篇介绍整合的文章，不过用的是hibernate3.1。<br />资料链接如下：hibernate3.1http://blog.sina.com.cn/s/blog_4c5ce20701000b7m.html<br />1. 新建web工程：<br /><img src="http://shiningwu.javaeye.com/upload/picture/pic/12421/2c42b467-8f44-3220-aed1-6b642db43162.bmp " /><br />点击“finish”。<br />2. 加入spring2组件<br /><img src="http://shiningwu.javaeye.com/upload/picture/pic/12437/7123801b-f9f2-3249-a9e9-ce09ee652037.bmp " /><br />选择Spring 2.0 Core Lobraries、Spring 2.0 Testing Support Libraries、Spring 2.0 Web Libraries、Hibernate 3.2 Core Libraries、Hibernate 3.2 Annotations & Entity Manager、Hibernate 3.2 Advanced Support Libraries包 。<br />选择Copy checked Library contents to project folder(TLDs always copied)，点击“next”；<img src="http://shiningwu.javaeye.com/upload/picture/pic/12435/43107a35-b0e5-31d1-8134-bd4e9674bc32.bmp " /> <br />点击“finish”。<br />3. 手工加入需要的jar文件。<br />需要手工添加一些jar文件到WEB-INF/lib里面，不加这些文件，加入hibernate组件后会报错。<br />commons-dbcp.jar<br />spring-hibernate.jar<br />spring-dao.jar<br />spring-jdbc.jar<br />commons-pool.jar<br />commons-collections.jar<br />struts2-spring-plugin-2.0.11.1.jar<br />spring-orm.jar<br />同时删除commons-collections2.11.jar<br />4. 加入hibernate组件。<br /><img src="http://shiningwu.javaeye.com/upload/picture/pic/12433/d8e96d08-07d5-3f18-b0cd-14dbe2fcac2b.bmp " /> <br />由于eclipse6.0不支持hibernate3.2，刚刚在添加spring2.0组件时已加入hibernate3.2的jar文件，在这里就不添加hibernate3.1的jar文件。选择Copy checked Library contents to project folder(TLDs always copied)，点击“next”；<br /><img src="http://shiningwu.javaeye.com/upload/picture/pic/12431/55d58d8f-bde5-354e-99e3-f10711230e5e.bmp " /><br /><br />选择Srping configuration file(applicationContext.xml)，使用spring管理hibernate，点击“next”；<br /> <img src="http://shiningwu.javaeye.com/upload/picture/pic/12429/1083558e-001e-3076-aede-f29f5103500c.bmp " /><br /><br />选择Existing Spring configuration file，填写SessionFactory ID，点击“next”；<br /><img src="http://shiningwu.javaeye.com/upload/picture/pic/12447/f1bd99c7-6f3b-33e0-97b0-6d11972381ae.bmp " /> <br />填写DataSource名称，选择DB Driver，点击“next”；<br /><img src="http://shiningwu.javaeye.com/upload/picture/pic/12445/b343f79f-078d-3afc-a8e0-31e4ff07a40a.bmp " /><br />取消Create SessionFactory class选项，点击“finish”；<br />applicationContext.xml生成如下代码：<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">


	&lt;bean id="DataSource"
		class="org.apache.commons.dbcp.BasicDataSource">
		&lt;property name="driverClassName"
			value="com.mysql.jdbc.Driver">
		&lt;/property>
		&lt;property name="url"
			value="jdbc:mysql://192.168.151.238:3306/chgl">
		&lt;/property>
		&lt;property name="username" value="vcom">&lt;/property>
		&lt;property name="password" value="vcom_8968888">&lt;/property>
	&lt;/bean>
	&lt;bean id="SessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		&lt;property name="dataSource">
			&lt;ref bean="DataSource" />
		&lt;/property>
		&lt;property name="hibernateProperties">
			&lt;props>
				&lt;prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				&lt;/prop>
			&lt;/props>
		&lt;/property>
	&lt;/bean>
	&lt;/beans>
</pre><br />5. 加入struts2.0组件<br />加入struts2.0的jar文件<br />commons-logging-1.0.4.jar<br />freemarker-2.3.8.jar<br />ognl-2.6.11.jar<br />struts2-core-2.0.8.jar<br />xwork-2.0.3.jar<br />6. 修改web.xml文件<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
&lt;display-name>test&lt;/display-name>
  &lt;context-param>
        &lt;param-name>contextConfigLocation&lt;/param-name>
        &lt;param-value>/WEB-INF/classes/applicationContext.xml&lt;/param-value>
 &lt;/context-param>
 &lt;filter>
 &lt;filter-name>encodingFilter&lt;/filter-name>
&lt;filter-class>org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class>
 &lt;init-param>
 &lt;param-name>encoding&lt;/param-name>
 &lt;param-value>UTF-8&lt;/param-value>
 &lt;/init-param>
 &lt;/filter>
 &lt;filter>
 &lt;filter-name>struts2&lt;/filter-name>
&lt;filter-class>org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class>
 &lt;/filter>
 &lt;filter-mapping>
 &lt;filter-name>struts2&lt;/filter-name>
 &lt;url-pattern>/*&lt;/url-pattern>
 &lt;/filter-mapping>
    &lt;welcome-file-list>
       &lt;welcome-file>index.jsp&lt;/welcome-file>
    &lt;/welcome-file-list>
     &lt;listener>
  &lt;listener-class>
   org.springframework.web.context.ContextLoaderListener
  &lt;/listener-class>
 &lt;/listener>
&lt;/web-app>
</pre><br />7. 建立映射<br />选择Window-Open perspective-MyEclipse Hibernate,选择使用的DB Driver，右键点击，选择“open connection…”<br /> <img src="http://shiningwu.javaeye.com/upload/picture/pic/12443/06f3b3b8-617a-37f0-bc79-b1dc67da2e22.bmp " /><br />选择要使用的表，右键点击，选择“Hibernate Reverse Engineering”；<br /> <img src="http://shiningwu.javaeye.com/upload/picture/pic/12441/be787f3e-3a4e-36e8-977f-e6b40da97d04.bmp " /><br />点击“next“<br /><img src="http://shiningwu.javaeye.com/upload/picture/pic/12439/9f34bedb-db53-3b49-95fc-971260a81ac4.bmp " /> <br />也可填写“sequence “ or ”assigned“，点击“next“<br /><img src="http://shiningwu.javaeye.com/upload/picture/pic/12453/97b3852c-a42d-34fc-9277-11e912cf96a2.bmp " /><br /> 点击“finish“。<br />到这里，完成了struts2.0+spring2.0+hibernate3.2的基本配置。<br />8. 编写action及struts.xml<br /><pre name="code" class="java">
package com.vcom.login;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.opensymphony.xwork2.ActionSupport;
import com.vcom.hibernate.XtYhxx;
import com.vcom.hibernate.XtYhxxDAO;

public class Login extends ActionSupport{
	    private XtYhxxDAO xtyhxxDAO;
	    private String username;
	    private int rowid;
	    private String password;
	    private String message;
	    private ApplicationContext context;
	    public String getMessage() {
			return message;
		}
		public void setMessage(String message) {
			this.message = message;
		}
		public String getUsername() {
	       return username;
	    }
	    public void setUsername(String username) {
	       this.username = username;
	    }
	    public String getPassword() {
	       return password;
	    }
	    public void setPassword(String password) {
	       this.password = password;
	    }
	    
		public XtYhxxDAO getXtyhxxDAO() {
			return xtyhxxDAO;
		}
		public void setXtyhxxDAO(XtYhxxDAO xtyhxxDAO) {
			this.xtyhxxDAO = xtyhxxDAO;
		}

		public int getRowid() {
			return rowid;
		}
		public void setRowid(int rowid) {
			this.rowid = rowid;
		}
		public ApplicationContext getContext() {
			return context;
		}
		public void setContext(ApplicationContext context) {
			this.context = context;
		}
		
	    public String execute() {
	    	XtYhxx  xtyhxx = new XtYhxx();
	    	//XtYhxxDAO xtyxxdao=new XtYhxxDAO();
	    	//context=new ClassPathXmlApplicationContext("applicationContext.xml");
	    	//XtYhxxDAO xtyxxdao=(XtYhxxDAO)context.getBean("XtYhxxDAO");
	    	xtyhxx.setYhdm(username);
	    	//xtyhxx.setYhmm(password);
	    	xtyhxx.setRowid(rowid);
	    	message ="Welcome, "+ xtyhxx.getRowid()+","+xtyhxx.getYhdm();
	    	Session session=xtyhxxDAO.getHibernateTemplate().getSessionFactory().openSession(); 
	        try{
	        	//xtyhxxDAO.save(xtyhxx);
	        	//xtyhxxDAO.delete(xtyhxx);
	        	//XtYhxx aa=xtyhxxDAO.findById(rowid);
	        	//System.out.println("------"+aa.getYhdm());
	        	//Example example = Example.create(xtyhxx);
	        	//List list=xtyxxdao.findByExample(xtyhxx);     	
	        	//Criteria criteria = session.createCriteria(XtYhxx.class).add(example);
	        	//List list = criteria.list();  
	        	Map map = new HashMap();
				map.put("yhdm", username);
				map.put("yhmm", password);
				map.put("rowid", rowid);
	        	List list=session.createCriteria(XtYhxx.class).add(Restrictions.allEq(map)).list();
	        	//System.out.println("------"+list.size());
	        	if(list.size()==0)  message ="Invalid user or password";
	        }catch (Exception ex){
	            ex.printStackTrace();
	            return ActionSupport.INPUT;
	        }finally {
	            if (session.isOpen()) {
	            	session.close();
                 }
	        }
	       return SUCCESS;
	    }

	} 
struts.xml
&lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
&lt;struts>
    &lt;!-- &lt;constant name="struts.objectFactory" value="spring" /> 是在后面的spring2配置中用到意思是把控制交给spring2  -->
    &lt;constant name="struts.objectFactory" value="spring" />
    &lt;include file="struts-default.xml">&lt;/include>
    &lt;package name="com.vcom.login" extends="struts-default">
    &lt;!-- &lt;action name="Login" class="Login"> 这里用class来关联spring2配置文件中的配置关联  -->
        &lt;action name="Login" class="LoginAction">
            &lt;result>/login/login.jsp&lt;/result>
            &lt;result name="INPUT">/login/login.jsp&lt;/result>
        &lt;/action>
     &lt;/package>
&lt;/struts>
</pre><br />9. 修改applicationContext.xml<br />加入<br /><pre name="code" class="java">
&lt;bean id="LoginAction" class="com.vcom.login.Login" >
       &lt;property name="xtyhxxDAO">
           &lt;ref bean="XtYhxxDAO" />
       &lt;/property>  
&lt;/bean>
</pre><br />10. 编写login.jsp<br /><pre name="code" class="java">
&lt;%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
&lt;%@ taglib prefix="s" uri="/struts-tags" %>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
  &lt;head>   
    &lt;title>My JSP 'index.jsp' starting page&lt;/title>
	&lt;meta http-equiv="pragma" content="no-cache">
	&lt;meta http-equiv="cache-control" content="no-cache">
	&lt;meta http-equiv="expires" content="0">    
	&lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	&lt;meta http-equiv="description" content="This is my page">
	&lt;!--
	&lt;link rel="stylesheet" type="text/css" href="styles.css">
	-->

  &lt;/head>
  
  &lt;body>
    &lt;table width="300" border="0">
        &lt;s:form action="Login" theme="simple">
        &lt;tr>
        &lt;td width=50%>用户名:&lt;/td>
        &lt;td width=50%>&lt;s:textfield name="username" />&lt;/td>
        &lt;/tr>
       &lt;tr>
        &lt;td width=50%>密码:&lt;/td>
        &lt;td width=50%>&lt;s:textfield name="password" />&lt;/td>
        &lt;/tr>
        &lt;tr>&lt;td colspan=2 align=center width=100%>&lt;s:submit />&lt;/td>&lt;/tr>
        &lt;tr>
        &lt;td colspan=2 align=center width=100%>&lt;s:property value ="message"/>&lt;/td>
        &lt;/tr>
        &lt;/s:form>
        &lt;/table>
  &lt;/body>
&lt;/html>
</pre><br />11. 新建DB Driver<br />选择Window-Open perspective-MyEclipse Hibernate,在左边DB Browser中点击右键-new<br /> <img src="http://shiningwu.javaeye.com/upload/picture/pic/12451/64572ad8-e483-3ab0-86be-8d8f31a21dc0.bmp " /><br />点击“next“；<br /><img src="http://shiningwu.javaeye.com/upload/picture/pic/12449/4cd6e96d-7960-322e-a7a0-edee730ab986.bmp " /> <br />点击“finish“。<br /><br />12. 需要注意的事项<br />1.	WEB-INF中<br /><pre name="code" class="java">
 &lt;context-param>
        &lt;param-name>contextConfigLocation&lt;/param-name>        &lt;param-value>/WEB-INF/classes/applicationContext.xml&lt;/param-value>
 &lt;/context-param>
</pre><br />applicationContext.xml的路径必须和实际一致，applicationContext.xml建议放在classes下，这样在实际引用时不用写绝对路径。<br />2.	struts.xml中<br /><pre name="code" class="java">
&lt;action name="Login" class="LoginAction">
            &lt;result>/login/login.jsp&lt;/result>
            &lt;result name="INPUT">/login/login.jsp&lt;/result>
        &lt;/action>
</pre><br />Action中成功返回success，在struts.xml中不能写成&lt;result name=”success”>/login/login.jsp&lt;/result>，会报找不到result success的异常。
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/184111#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 18 Apr 2008 14:59:53 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/184111</link>
        <guid>http://shiningwu.javaeye.com/blog/184111</guid>
      </item>
      <item>
        <title>用xfire的Eclipse Plugin生成web服务的客户端 </title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/158084" style="color:red;">http://shiningwu.javaeye.com/blog/158084</a>&nbsp;
          发表时间: 2008年01月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          第一步，安装插件。<br />  打开MyEclipse的Help菜单，选择”Software Updates”，然后再选择”Find and Install.”<br />  选择"Search for new features to install"，然后点击Next<br />  选择"Create New Remote Site"， 在name中输入"XFire"，在eclipse update site中输入http://dist.codehaus.org/xfire/update/<br />  选择OK<br />  选择Finish。<br />  注意完成上述操作后，eclipse要下载和安装插件，时间长短要视网速而定，请耐心等待，安装完成时还要重启eclipse。<br /><br />第二步，使用插件。<br />    首先新建一个项目client_auto，然后依次选择菜单File->New->Other ，选择XFire文件夹下的Code generation from WSDL document，打开代码生成向导。<br />WSDL的地址栏填入http://localhost:8080/server/services/Test?wsdl，Output directory栏中点浏览按钮，选择刚才新建的项目client_auto，这两项是必填的。可选项中，package一栏可以选已经存在的包名，如果不填这一项，代码生成器会在wsdl目标命名空间的基础上创建一个。<br />    完成后，可以看到项目中多了XFire类库，还有package下面的生成的一些类。此时要保证IDE的Tomcat服务器是打开的。<br />    此时，在调用服务之前，还有一个重要的步骤，从XFireProject项目的右键菜单里调出Properties配置窗口，选中左面一栏中的XFire项，右面会列出所有与XFire运行有关的类库，选中一些类库，这些类库在调用本服务时是必须的。在原有的基础上加入Commons Codec(commons-codec-1.3.jar),Commons HttpClient(commons-httpclient-3.0.jar)。<br /><br />注意：用插件自动生成的类默认存放在工程根目录下，需要手工放入src目录，此问题有待解决。<br /><br /><br />客户端调用代码：<br /><pre name="code" class="java">
package test;

import java.util.List;

import mytest.TestClient;
import mytest.TestPortType;
import test.Test;
import form.ArrayOfUser;
import form.User;

public class Test {
	public static ArrayOfUser invokeServiceNow()
	   {
	        TestClient service=new TestClient();
	       TestPortType port=service.getTestHttpPort();
	       return port.getDx();
	    }

	    public static void main(String args[]) {
	    	ArrayOfUser u=Test.invokeServiceNow();
	    	List&lt;User> list=u.getUser();
	    	User user=null;
	    	for(int i=0;i&lt;list.size();i++){
	    		user=list.get(i);
	    		System.out.println("----"+user.getId().getValue());
	    		System.out.println("----"+user.getName().getValue());
	    	}
	    }
}

</pre><br /><br />加入安全认证的客户端：<br /><pre name="code" class="java">
package test;

import java.lang.reflect.Proxy;
import java.util.List;
import java.util.Properties;

import org.apache.ws.security.handler.WSHandlerConstants;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxy;
import org.codehaus.xfire.security.wss4j.WSS4JOutHandler;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.util.dom.DOMOutHandler;

import servertest.TestClient;
import servertest.TestPortType;
import form.ArrayOfUser;
import form.User;

public class Test {
	static private WSS4JOutHandler wsOut;
	static private Client client;
	public static ArrayOfUser invokeServiceNow()
	   {
	        TestClient service=new TestClient();
	       TestPortType port=service.getTestHttpPort();
	       client = ((XFireProxy) Proxy.getInvocationHandler(port)).getClient();
			
	        client.addOutHandler(new DOMOutHandler());
	        
			Properties properties = new Properties();	
	        String actions =WSHandlerConstants.SIGNATURE;  
	        properties.setProperty(WSHandlerConstants.ACTION,actions);
			properties.setProperty(WSHandlerConstants.USER,"ws_security");
			properties.setProperty(WSHandlerConstants.SIG_PROP_FILE,"outsecurity.properties");
			//properties.setProperty(WSHandlerConstants.ENC_PROP_FILE,"/outsecurity.properties");
			//properties.setProperty(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PASSWORD_TEXT);
			properties.setProperty(WSHandlerConstants.PW_CALLBACK_CLASS, PasswordHandler.class.getName());
			properties.setProperty(WSHandlerConstants.SIG_KEY_ID,"IssuerSerial");    
	        //wsOut.setProperty(WSHandlerConstants.TTL_TIMESTAMP,"30");

			wsOut = new WSS4JOutHandler(properties);   
	        client.addOutHandler(wsOut);
	       return port.getDx();
	    }

	    public static void main(String args[]) {
	    	ArrayOfUser u=Test.invokeServiceNow();
	    	List&lt;User> list=u.getUser();
	    	User user=null;
	    	for(int i=0;i&lt;list.size();i++){
	    		user=list.get(i);
	    		System.out.println("11111----"+user.getId().getValue());
	    		System.out.println("2222222----"+user.getName().getValue());
	    	}
	    }
}
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/158084#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jan 2008 16:41:31 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/158084</link>
        <guid>http://shiningwu.javaeye.com/blog/158084</guid>
      </item>
      <item>
        <title>xfire+wss4j实现WS-Security (三) </title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/158031" style="color:red;">http://shiningwu.javaeye.com/blog/158031</a>&nbsp;
          发表时间: 2008年01月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          客户端代码：<br /><pre name="code" class="java">
package clienttest;

import java.util.ArrayList;

import form.User;

public interface DxTest1 {
   public ArrayList&lt;User> getDx();
   //public String getD(String a);
}


package clienttest;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Proxy;
import java.util.List;
import java.util.Properties;

import org.apache.ws.security.handler.WSHandlerConstants;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxy;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.security.wss4j.WSS4JOutHandler;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.codehaus.xfire.util.dom.DOMOutHandler;

import form.User;

public class ClientTest {	
	 private WSS4JOutHandler wsOut;
	 private Service srvcModel;
	 private Client client;
	public void testClient() throws Exception {	
		
//		第三种方式，也是常用的一种方式,直接根据WEBSERVICE地址来进行调用
		srvcModel = new ObjectServiceFactory().create(DxTest1.class);
		XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
		String URL = "http://localhost:8080/server_sec/services/Test";
		try {
			DxTest1 srvc = (DxTest1) factory.create(srvcModel,URL);
			client = ((XFireProxy) Proxy.getInvocationHandler(srvc)).getClient();
			
	        client.addOutHandler(new DOMOutHandler());
	        
			Properties properties = new Properties();	
	        String actions =WSHandlerConstants.SIGNATURE;  
	        properties.setProperty(WSHandlerConstants.ACTION,actions);
			properties.setProperty(WSHandlerConstants.USER,"ws_security");
			properties.setProperty(WSHandlerConstants.SIG_PROP_FILE,"outsecurity.properties");
			//properties.setProperty(WSHandlerConstants.ENC_PROP_FILE,"/outsecurity.properties");
			//properties.setProperty(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PASSWORD_TEXT);
			properties.setProperty(WSHandlerConstants.PW_CALLBACK_CLASS, PasswordHandler.class.getName());
			properties.setProperty(WSHandlerConstants.SIG_KEY_ID,"IssuerSerial");    
	        //wsOut.setProperty(WSHandlerConstants.TTL_TIMESTAMP,"30");

			wsOut = new WSS4JOutHandler(properties);   
	        client.addOutHandler(wsOut);
	        
	        List&lt;User> list = srvc.getDx();
			for(int i=0;i&lt;list.size();i++){
				User dto =(User)list.get(i);
				System.out.println("-----"+dto.getId());
				System.out.println("-----"+dto.getName());
			}		
			
	        client.close();
		 }catch (Exception e){
		    e.printStackTrace();
		 }
	}
	
	public static void main(String args[]){
		try{
		 ClientTest t=new ClientTest();
		 t.testClient();
		 //t.getPro();
		}catch(Exception e){e.printStackTrace();}
	}
}

package clienttest;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.apache.ws.security.WSPasswordCallback;

public class PasswordHandler implements CallbackHandler {
	private Map passwords = new HashMap();

    public PasswordHandler() {
        passwords.put("ws_security","keypassword");
    }

    public void handle(Callback[] callbacks) throws IOException,
            UnsupportedCallbackException {
        System.out.println("---------Handling Password!------------");
        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
        String id = pc.getIdentifer();
        System.out.println("--------id:"+id+"--------password:"+(String) passwords.get(id));
        pc.setPassword((String)passwords.get(id));
    }

}

package form;

public class User {
String id="";
String name="";
public String getId() {
	return id;
}
public void setId(String id) {
	this.id = id;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
}
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/158031#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jan 2008 14:47:26 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/158031</link>
        <guid>http://shiningwu.javaeye.com/blog/158031</guid>
      </item>
      <item>
        <title>xfire+wss4j实现WS-Security (二) </title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/158030" style="color:red;">http://shiningwu.javaeye.com/blog/158030</a>&nbsp;
          发表时间: 2008年01月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          服务端webservice.xml<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;beans xmlns="http://xfire.codehaus.org/config/1.0">
 &lt;service>  
    &lt;name>Test&lt;/name>  
    &lt;serviceClass>servertest.DxTest&lt;/serviceClass>  
    &lt;implementationClass>servertest.DxTe&lt;/implementationClass>  
        &lt;inHandlers>
            &lt;handler
                handlerClass="org.codehaus.xfire.util.dom.DOMInHandler" />
            &lt;bean
                class="org.codehaus.xfire.security.wss4j.WSS4JInHandler" xmlns="">
                &lt;property name="properties">
                    &lt;props>
                        &lt;prop key="action">Signature&lt;/prop>
                        &lt;prop key="signaturePropFile">insecurity.properties&lt;/prop>
                        &lt;prop key="passwordCallbackClass">server.servertest.PasswordHandler&lt;/prop>                        
                    &lt;/props>
                &lt;/property>
            &lt;/bean>
        &lt;/inHandlers>
     &lt;/service> 
&lt;/beans>
</pre><br /><br />服务端代码：<br /><pre name="code" class="java">
package servertest;

import java.util.ArrayList;

import form.User;

public interface DxTest {
   public ArrayList&lt;User> getDx();
   //public String getD(String a);
}

package servertest;

import java.util.ArrayList;

import form.User;

public class DxTe implements DxTest{
	public ArrayList&lt;User> getDx(){
		ArrayList&lt;User> list =new ArrayList&lt;User>();
		User u1=new User();
		u1.setId("11");
		u1.setName("aa");
		User u2=new User();
		u2.setId("12");
		u2.setName("bb");
		User u3=new User();
		u3.setId("13");
		u3.setName("cc");
		
		list.add(u1);
		list.add(u2);
		list.add(u3);
		return list;
	}
	
	/*public String getD(String a){
		return a+"----";
	}*/
}


package servertest;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.apache.ws.security.WSPasswordCallback;

public class PasswordHandler implements CallbackHandler {
	private Map passwords = new HashMap();

    public PasswordHandler() {
        passwords.put("ws_security","keypassword");
    }

    public void handle(Callback[] callbacks) throws IOException,
            UnsupportedCallbackException {
        System.out.println("Handling Password!");
        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
        String id = pc.getIdentifer();
        System.out.println("id:"+id+" ,password:"+(String) passwords.get(id));
        pc.setPassword((String) passwords.get(id));
    }

}


package form;

public class User {
String id="";
String name="";
public String getId() {
	return id;
}
public void setId(String id) {
	this.id = id;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}

}
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/158030#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jan 2008 14:46:38 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/158030</link>
        <guid>http://shiningwu.javaeye.com/blog/158030</guid>
      </item>
      <item>
        <title>xfire+wss4j实现WS-Security (一)</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/158029" style="color:red;">http://shiningwu.javaeye.com/blog/158029</a>&nbsp;
          发表时间: 2008年01月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近一直在研究web service，搞完了服务端返回对象，接着搞了WS-Security <br />走了许多弯路，最后才发现其实可以很容易的。<br />在MyEclipse里面新建web service项目，加包的时候一定要把Security加进去啊，我就是因为刚开始没加入这个，缺了好多包，自己又到处去down，最后版本还不对，总是少这个少那个，绕了一圈突然发现要的东西原来已经在眼前了。<br />还要注意的是，网上有资料说要引入Xalan 2.7.0，但是加入这个包后总是提示少FuncLoader.class，又去down了一个xalan-j_2_4_0-bin.zip，才找到这个类。<br />下面开始配置了...<br /><br />一、前提条件：<br />前提条件要安装Unlimited Strength Jurisdiction Policy<br />（可以在http://java.sun.com/j2se/1.5.0/download.jsp或http://java.sun.com/j2se/1.4.2/download.html下载）<br />和Bouncy Castle（来自http://BouncyCastle.org）。否则会出现无效算法(algorithm)或Key大小(Key Size)<br /><br />二、安装Unlimited Strength Jurisdiction Policy和Bouncy Castle<br />1、安装Unlimited Strength Jurisdiction Policy：把local_policy.jar和US_export_policy.jar两个文件拷贝到：<br />C:\j2re1.4.2\lib\security\下；（如果JRE安装在C:\j2re1.4.2）。<br />2、安装Bouncy Castle：<br />（1）、把下载的bcprov-jdk14-119.jar文件拷贝到两个地方<br />一个在安装的JDK目录中 C:\Program Files\Java\jdk1.5.0_06\jre\lib\ext<br />另一个在JDK运行环境中 C:\Program Files\Java\jre1.5.0_06\lib\ext<br />（2）、还要在对两个java.security进行修改：<br />C:\Program Files\Java\jdk1.5.0_06\jre\lib\security\java.security<br />C:\Program Files\Java\jre1.5.0_06\lib\security\java.security<br />在java.security中加入 security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider<br /><br />三、创建密钥：<br />1、通过别名和密码创建私密钥到keystore：<br />keytool -genkey -alias ws_security -keypass keypassword -keystore privatestore.jks -storepass keyStorePassword -dname "cn=ws_security" -keyalg RSA 采用RSA算法进行处理。<br />2、证书：<br />keytool -selfcert -alias ws_security -keystore privatestore.jks -storepass keyStorePassword -keypass keypassword<br />3、导出公钥到key.rsa：<br />keytool -export -alias ws_security -file key.rsa -keystore privatestore.jks -storepass keyStorePassword<br />4、导入公钥到新的keystore中：<br />keytool -import -alias ws_security  -file key.rsa -keystore publicstore.jks -storepass keyStorePassword<br />5、创建insecurity.properties:<br />org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin<br />org.apache.ws.security.crypto.merlin.keystore.type=jks<br />org.apache.ws.security.crypto.merlin.keystore.password=keyStorePassword<br />org.apache.ws.security.crypto.merlin.keystore.alias=ws_security<br />org.apache.ws.security.crypto.merlin.file=publicstore.jks<br />6、    创建outsecurity.properties：<br />org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin<br />org.apache.ws.security.crypto.merlin.keystore.type=jks<br />org.apache.ws.security.crypto.merlin.keystore.password=keyStorePassword<br />org.apache.ws.security.crypto.merlin.alias.password=keypassword<br />org.apache.ws.security.crypto.merlin.keystore.alias=ws_security<br />org.apache.ws.security.crypto.merlin.file=privatestore.jks<br />7、  把文件insecurity.properties、publicstore.jks放在服务端的src目录下，outsecurity.properties，privatestore.jks放在客户端的src目录下。
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/158029#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jan 2008 14:41:28 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/158029</link>
        <guid>http://shiningwu.javaeye.com/blog/158029</guid>
      </item>
      <item>
        <title>跨浏览器的xslt分页(二)</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/154361" style="color:red;">http://shiningwu.javaeye.com/blog/154361</a>&nbsp;
          发表时间: 2008年01月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          搞了一个星期，xslt分页终于在IE和opera上跑起来了，这周放到嵌入式设备上，玩完...<br />用的是嵌入式最高级的浏览器，也才相当于opera7的水平，根本不支持xmlDocument,郁闷至极。接着搞了两天也没弄好。早上转换了思路，重新baidu了一下，居然找到解决方法，调试一上午，终于搞定。xslt真是麻烦啊...<br />xsl文件：<br /><pre name="code" class="xslt">
&lt;?xml version="1.0" encoding="GB2312"?>
&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

&lt;xsl:param name="size" select="2"/>

 &lt;xsl:template match="rss/channel">
  &lt;html>
  &lt;HEAD>
  &lt;meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
  &lt;title>&lt;xsl:value-of select="/rss/channel/title"/>&lt;/title>
  &lt;script>
  &lt;![CDATA[
   function nextPage(num){
    document.getElementById("content"+num).style.display="";
    num--;
    document.getElementById("content"+num).style.display="none";
   }
   function prevPage(num){
    document.getElementById("content"+num).style.display="";
    num++;
    document.getElementById("content"+num).style.display="none";
   }
   function onInitialize(){
    var i = 1;
    document.getElementById("content"+i).style.display = "";
   }

   function jumpPage(page,pages){
     var num=document.getElementById("jump"+page).value;
     if(num==""){alert("please enter page!!");return false;}
     for(i=1;i&lt;=pages;i++){
       document.getElementById("content"+i).style.display="none";
       if(i==page){
        document.getElementById("jump"+i).value="";
       }
       if(i==num){
        document.getElementById("content"+i).style.display="";
       }
     }
   }

   function showPage(page,pages){
     var num=page;
     for(i=1;i&lt;=pages;i++){
       document.getElementById("content"+i).style.display="none";
       if(i==page){
        document.getElementById("jump"+i).value="";
       }
       if(i==num){
        document.getElementById("content"+i).style.display="";
       }
     }
   }
  ]]&gt;
  &lt;/script>
  &lt;/HEAD>


   &lt;body  topmargin="0" leftmargin="0" bgcolor="#47A3AC" onload="onInitialize()">
    &lt;xsl:apply-templates select="item[position() mod $size = 1]">
     &lt;xsl:with-param name="pages" select="ceiling(count(item) div $size)"/>
    &lt;/xsl:apply-templates>
   &lt;/body>
  &lt;/html>
 &lt;/xsl:template>



 &lt;xsl:template match="item">
 &lt;xsl:param name="pages"/>
 &lt;xsl:variable name="page" select="position()"/>
 &lt;div name="content" id='content{$page}' style="display:none" title="content{$page}">
 &lt;table  border="0" cellspacing="0" cellpadding="0" style="position: absolute; width: 204px; height: 33px; left: 72px; top:13px">
        &lt;tr>
		&lt;td align="left" colspan="2">
			&lt;font color="#FAFAFA">&lt;span style="text-decoration: none">&lt;strong>当前栏目：
			&lt;xsl:value-of select="/rss/channel/title"/>&lt;/strong>&lt;/span>&lt;/font>
		&lt;/td>
        &lt;/tr>
&lt;/table>
&lt;table  border="0" cellspacing="0" cellpadding="0" style="position: absolute; width: 600px; height: 313px; left: 25px; top:55px">
	&lt;tr>
		&lt;td align="left" colspan="2"> 			
			&lt;font color="#FAFAFA">&lt;span style="text-decoration: none">&lt;strong>
			Feed地址:&lt;xsl:value-of select="/rss/channel/link"/>
			&lt;/strong>&lt;/span>&lt;/font>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>
			&lt;font color="#FAFAFA">&lt;span style="text-decoration: none">&lt;strong>当前Feed内容: &lt;/strong>&lt;/span>&lt;/font>
		&lt;/td>
	&lt;/tr>
   &lt;xsl:for-each select="self::item | following-sibling::item[position() &lt; $size]">
	&lt;tr>
			&lt;td>
				&lt;table width="300"  height="30" border="0"  cellspacing="1" cellpadding="0">
					&lt;tr>
						&lt;td align="left" valign="middle"  height="29">
							&lt;a>   
							    &lt;xsl:attribute name="href">
							    &lt;xsl:value-of  select="link"/>
							    &lt;/xsl:attribute> 
							    &lt;font color="blue">&lt;span style="text-decoration: none">&lt;strong>
							    &lt;xsl:value-of select="title"/>   
							    &lt;/strong>&lt;/span>&lt;/font>
							&lt;/a>
						&lt;/td>
					&lt;/tr>
					&lt;tr>
						&lt;td align="left" valign="middle"  height="29">
						&lt;font color="#FAFAFA">&lt;span style="text-decoration: none">&lt;strong>
							&lt;xsl:value-of select="description"/>
						&lt;/strong>&lt;/span>&lt;/font>
						&lt;/td>
					&lt;/tr>
					&lt;tr>
						&lt;td align="left" valign="middle"  height="29">
						&lt;font color="#FAFAFA">&lt;span style="text-decoration: none">&lt;strong>
							&lt;xsl:value-of select="pubDate"/>
						&lt;/strong>&lt;/span>&lt;/font>
						&lt;/td>
					&lt;/tr>
				&lt;/table>
			&lt;/td>
			&lt;td>
				&lt;table width="300"  height="30" border="0"  cellspacing="1" cellpadding="0">
					&lt;tr>
					&lt;xsl:for-each  select="/rss/channel/image">
						&lt;td align="left" valign="middle"  height="29">
						
							&lt;img>   
							  &lt;xsl:attribute   name="src">&lt;xsl:value-of  select="/rss/channel/image/url"/>&lt;/xsl:attribute>   
							&lt;/img>  
						&lt;/td>
					&lt;/xsl:for-each>
					&lt;/tr>					
				&lt;/table>
			&lt;/td>
	   &lt;/tr>
   &lt;/xsl:for-each>
    &lt;tr>
    &lt;td>
    &lt;xsl:choose>
     &lt;xsl:when test="$page = 1">   
      &lt;a href="#{$page + 1}" onclick="nextPage({$page + 1})">
      &lt;font color="blue">&lt;span style="text-decoration: none">&lt;strong>     下一页    &lt;/strong>&lt;/span>&lt;/font>
      &lt;/a>     
      &lt;a href="#{$page + 1}" onclick="showPage({$pages},{$pages})">
      &lt;font color="blue">&lt;span style="text-decoration: none">&lt;strong>     末页    &lt;/strong>&lt;/span>&lt;/font>
      &lt;/a>

     &lt;/xsl:when>

     &lt;xsl:when test="$page = $pages">    
     &lt;a href="#{$page + 1}" onclick="showPage(1,{$pages})">
      &lt;font color="blue">&lt;span style="text-decoration: none">&lt;strong>     首页    &lt;/strong>&lt;/span>&lt;/font>
      &lt;/a>
      &lt;a href="#{$page - 1}" onclick="prevPage({$page - 1})">
      &lt;font color="blue">&lt;span style="text-decoration: none">&lt;strong>     上一页     &lt;/strong>&lt;/span>&lt;/font>
      &lt;/a>   
     &lt;/xsl:when>

     &lt;xsl:otherwise>
      &lt;a href="#{$page + 1}" onclick="showPage(1,{$pages})">
      &lt;font color="blue">&lt;span style="text-decoration: none">&lt;strong>     首页    &lt;/strong>&lt;/span>&lt;/font>
      &lt;/a>
      &lt;a href="#{$page - 1}" onclick="prevPage({$page - 1})">
      &lt;font color="blue">&lt;span style="text-decoration: none">&lt;strong>     上一页    &lt;/strong>&lt;/span>&lt;/font>
      &lt;/a>   
      &lt;a href="#{$page + 1}" onclick="nextPage({$page + 1})">
      &lt;font color="blue">&lt;span style="text-decoration: none">&lt;strong>     下一页    &lt;/strong>&lt;/span>&lt;/font>
      &lt;/a>    
      &lt;a href="#{$page + 1}" onclick="showPage({$pages},{$pages})">
      &lt;font color="blue">&lt;span style="text-decoration: none">&lt;strong>     末页    &lt;/strong>&lt;/span>&lt;/font>
      &lt;/a>
     &lt;/xsl:otherwise>
    &lt;/xsl:choose>
   &lt;/td>
   &lt;/tr>
   &lt;tr>
   &lt;td>
      &lt;font color="#FAFAFA">&lt;span style="text-decoration: none">&lt;strong>当前第&lt;xsl:value-of select="$page" />页 &lt;/strong>&lt;/span>&lt;/font> 
      &lt;font color="#FAFAFA">&lt;span style="text-decoration: none">&lt;strong>共&lt;xsl:value-of select="$pages" />页&lt;/strong>&lt;/span>&lt;/font>
   &lt;/td>
   &lt;/tr>
   &lt;tr>
  &lt;td> 
  &lt;font color="#FAFAFA">&lt;span style="text-decoration: none">&lt;strong>
  转到&lt;input type="text" name="jump" id="jump{$page}" value="" size="2"/>页 &lt;input type="button" value="go" onclick="jumpPage({$page},{$pages})"/>
  &lt;/strong>&lt;/span>&lt;/font>
  &lt;/td>
   &lt;td>
  &lt;a href="SearchGenreServlet">
  &lt;font color="blue">&lt;span style="text-decoration: none">&lt;strong>
   返回&lt;/strong>&lt;/span>&lt;/font>
  &lt;/a>
  &lt;/td>
   &lt;/tr>
   &lt;/table>
   &lt;/div>
 &lt;/xsl:template>
&lt;/xsl:stylesheet>
 </pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/154361#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Jan 2008 13:54:20 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/154361</link>
        <guid>http://shiningwu.javaeye.com/blog/154361</guid>
      </item>
      <item>
        <title>跨浏览器的xslt分页(一)</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/152823" style="color:red;">http://shiningwu.javaeye.com/blog/152823</a>&nbsp;
          发表时间: 2008年01月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          xml文件（rss2.0）<br /><pre name="code" class="java"> 
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;?xml-stylesheet type="text/xsl" href="template.xsl"?>
&lt;rss xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  &lt;channel>
    &lt;title>电影&lt;/title>
    &lt;link>http://localhost:8080/rss/3.xml&lt;/link>
    &lt;description>电影频道&lt;/description>
    &lt;image>
      &lt;title>添加&lt;/title>
      &lt;url>http://localhost:8080/rss/images/add.gif&lt;/url>
      &lt;description>添加&lt;/description>
    &lt;/image>
    &lt;item>
      &lt;title>土豆视频&lt;/title>
      &lt;link>http://www.tudou.com&lt;/link>
      &lt;description>土豆视频&lt;/description>
      &lt;pubDate>Mon, 17 Dec 2007 16:00:00 GMT&lt;/pubDate>
      &lt;guid>http://www.tudou.com&lt;/guid>
      &lt;dc:date>2007-12-17T16:00:00Z&lt;/dc:date>
    &lt;/item>
    &lt;item>
      &lt;title>六间房&lt;/title>
      &lt;link>http://www.6rooms.com&lt;/link>
      &lt;description>六间房电影&lt;/description>
      &lt;pubDate>Tue, 01 Jan 2008 16:00:00 GMT&lt;/pubDate>
      &lt;guid>http://www.6rooms.com&lt;/guid>
      &lt;dc:date>2008-01-01T16:00:00Z&lt;/dc:date>
    &lt;/item>
    &lt;item>
      &lt;title>tom电影频道&lt;/title>
      &lt;link>http://ent.tom.com/movie/&lt;/link>
      &lt;description>tom电影&lt;/description>
      &lt;pubDate>Tue, 01 Jan 2008 16:00:00 GMT&lt;/pubDate>
      &lt;guid>http://ent.tom.com/movie/&lt;/guid>
      &lt;dc:date>2008-01-01T16:00:00Z&lt;/dc:date>
    &lt;/item>
    &lt;item>
      &lt;title>迅雷电影&lt;/title>
      &lt;link>http://www.xunlei.com&lt;/link>
      &lt;description>迅雷电影&lt;/description>
      &lt;pubDate>Tue, 01 Jan 2008 16:00:00 GMT&lt;/pubDate>
      &lt;guid>http://www.xunlei.com&lt;/guid>
      &lt;dc:date>2008-01-01T16:00:00Z&lt;/dc:date>
    &lt;/item>
    &lt;item>
      &lt;title>网易电影&lt;/title>
      &lt;link>http://ent.163.com/movie/&lt;/link>
      &lt;description>网易电影&lt;/description>
      &lt;pubDate>Tue, 01 Jan 2008 16:00:00 GMT&lt;/pubDate>
      &lt;guid>http://ent.163.com/movie/&lt;/guid>
      &lt;dc:date>2008-01-01T16:00:00Z&lt;/dc:date>
    &lt;/item>
  &lt;/channel>
&lt;/rss>
</pre> <br /><br />xsl文件：<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="GB2312"?>
&lt;xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 &lt;!--Declare Current Page-->
 &lt;xsl:param name="current">1&lt;/xsl:param>
 &lt;!--Declare Page Size-->
 &lt;xsl:param name="page">2&lt;/xsl:param>
 &lt;!--Declare xmlDocument address-->
 &lt;xsl:param name="ad">3.xml&lt;/xsl:param>


 &lt;xsl:template match="/">
&lt;HTML>
&lt;HEAD>
&lt;meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
&lt;title>&lt;xsl:value-of select="rss/channel/title"/>&lt;/title>
    &lt;script type="text/javascript">
    function paging(page,ad){
	    var xmlDocument;
	    var xslDocument;


	if (window.ActiveXObject){
		xslDocument=new ActiveXObject("Microsoft.XMLDOM");
		xslDocument.async=false;

		xmlDocument=new ActiveXObject("Microsoft.XMLDOM");
		xmlDocument.async=false;

		xslDocument.load("template.xsl");
                xmlDocument.load(ad);

		xslDocument.selectNodes("xsl:stylesheet/xsl:template[@match='/']").removeAll();
	        xslDocument.selectSingleNode("xsl:stylesheet/xsl:param[@name='current']").text=page;

	        document.body.innerHTML=xmlDocument.transformNode(xslDocument);

	}else{   // code for Mozilla, Firefox, Opera, etc.
		xslDocument=document.implementation.createDocument("","",null);
		xslDocument.async = false;

		xmlDocument=document.implementation.createDocument("","",null);
		xmlDocument.async=false;

		xslDocument.load("template.xsl");
                xmlDocument.load(ad);

		var xsltProcessor = new XSLTProcessor();
		xsltProcessor.importStylesheet(xslDocument);
		xsltProcessor.setParameter(null,"current",page);
		var result = xsltProcessor.transformToDocument(xmlDocument);
		var xmls = new XMLSerializer();
		document.body.innerHTML = xmls.serializeToString(result);
	}
    }
    &lt;/script>
&lt;/HEAD>
&lt;body topmargin="0" leftmargin="0" bgcolor="#47A3AC" background="http://61.158.218.76/eums/generator/img/cncbg06040415593.jpg">
&lt;xsl:apply-templates/>
&lt;/body>
&lt;/HTML>
&lt;/xsl:template>

&lt;xsl:template match="rss" name="show1">
  &lt;xsl:apply-templates select="item[position() &gt;= ($current - 1) * $page and position() &lt;= $current * $page]"/>
  &lt;xsl:call-template name="page"/>
 &lt;/xsl:template>

 &lt;xsl:template match="rss" name="show">
&lt;table  border="0" cellspacing="0" cellpadding="0" style="position: absolute; width: 204px; height: 33px; left: 72px; top:13px">
                 &lt;tr>
        &lt;td align="left">&lt;span style="text-decoration:none">&lt;font color="#FAFAFA">&lt;strong>当前栏目：&lt;xsl:value-of select="channel/title"/>&lt;/strong>&lt;/font>&lt;/span>&lt;/td>&lt;/tr>
&lt;/table>
&lt;table  border="0" cellspacing="0" cellpadding="0" style="position: absolute; width: 600px; height: 313px; left: 25px; top:55px">
&lt;tr>
&lt;td> 
&lt;font color="#FAFAFA">&lt;span style="text-decoration: none">&lt;strong>
Feed地址:&lt;xsl:value-of select="channel/link"/>&lt;/strong>&lt;/span>&lt;/font>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>
&lt;font color="#FAFAFA">&lt;span style="text-decoration: none">&lt;strong>当前Feed内容: &lt;/strong>&lt;/span>&lt;/font>
&lt;/td>
&lt;/tr>
&lt;xsl:for-each  select="channel/item[position() &gt; ($current - 1) * $page and position() &lt;= $current * $page]">
 &lt;tr>
			&lt;td>
				&lt;table width="300"  height="30" border="0"  cellspacing="1" cellpadding="0">
					&lt;tr>
						&lt;td align="left" valign="middle"  height="29">
							&lt;a>   
							    &lt;xsl:attribute name="href">&lt;xsl:value-of  select="link"/>&lt;/xsl:attribute> 
							    &lt;font color="#FAFAFA" size="2">&lt;span style="text-decoration: none">&lt;strong>&lt;xsl:value-of select="title"/> &lt;/strong>&lt;/span>&lt;/font>    
							&lt;/a>
						&lt;/td>
					&lt;/tr>
					&lt;tr>
						&lt;td align="left" valign="middle"  height="29">
							&lt;font size="2" color="#FAFAFA" face="Arial">&lt;xsl:value-of select="description"/>&lt;/font>
						&lt;/td>
					&lt;/tr>
					&lt;tr>
						&lt;td align="left" valign="middle"  height="29">
							&lt;font size="2" color="#FAFAFA" face="Arial">&lt;xsl:value-of select="pubDate"/>&lt;/font>
						&lt;/td>
					&lt;/tr>
				&lt;/table>
			&lt;/td>
			&lt;td>
				&lt;table width="300"  height="30" border="0"  cellspacing="1" cellpadding="0">
					&lt;tr>
					&lt;xsl:for-each  select="/rss/channel/image">
						&lt;td align="left" valign="middle"  height="29">
						
							&lt;img>   
							  &lt;xsl:attribute   name="src">&lt;xsl:value-of   select="/rss/channel/image/url"/>&lt;/xsl:attribute>   
							&lt;/img>  
						&lt;/td>
					&lt;/xsl:for-each>
					&lt;/tr>					
				&lt;/table>
			&lt;/td>
	    &lt;/tr>

&lt;/xsl:for-each>
&lt;tr>
&lt;td>
  &lt;xsl:call-template name="show1"/>
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;/xsl:template>

 &lt;xsl:template name="page">



  &lt;xsl:for-each select="/rss/channel/item[position() mod $page = 1]">
   &lt;a href="javascript:paging({position()},'{$ad}')">
    &lt;font color="#FAFAFA" size="3">&lt;span style="text-decoration: none">&lt;strong>
    &lt;xsl:value-of select="position()"/>
     &lt;/strong>&lt;/span>&lt;/font> 
   &lt;/a>&lt;xsl:text>      &lt;/xsl:text>   
  &lt;/xsl:for-each>
 &lt;/xsl:template>

&lt;/xsl:stylesheet>
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/152823#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Jan 2008 15:03:22 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/152823</link>
        <guid>http://shiningwu.javaeye.com/blog/152823</guid>
      </item>
      <item>
        <title>Quartz示例</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/151201" style="color:red;">http://shiningwu.javaeye.com/blog/151201</a>&nbsp;
          发表时间: 2007年12月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          QuartzServlet<br /><pre name="code" class="java">
	public class QuartzServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	}

	public void init() throws ServletException {
		try{
            startScheduler();
        }catch (SchedulerException ex){
            ex.printStackTrace(); 
        }
	}
	
	
	protected void startScheduler() throws SchedulerException {
    	long ctime = System.currentTimeMillis();
        //使用工厂创建调度器实例
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); 
        //以作业创建JobDetail实例
        JobDetail jobDetail = new JobDetail("dd", Scheduler.DEFAULT_GROUP,QuartzJob.class);
        //创建trigger
        //Trigger trigger = new SimpleTrigger("dd",Scheduler.DEFAULT_GROUP,5000,200) ;
        
        //start
        
        SimpleTrigger trigger =new SimpleTrigger("simpleTrigger","triggerGroup-s1");
        trigger.setStartTime(new Date(ctime));
        // set the interval, how often the job should run (10 seconds here)
        trigger.setRepeatInterval(20000);
        // set the number of execution of this job, set to 10 times.
        // It will run 10 time and exhaust.
        trigger.setRepeatCount(2);
        
        
        //end
        
        //调度器将作业与trigger关联起来
        scheduler.scheduleJob(jobDetail, trigger); 
        //开始调度
        scheduler.start();
		
		 /*try {
	            Scheduler scheduler = null;
	            scheduler = StdSchedulerFactory.getDefaultScheduler();	            
	            jobDetail(scheduler, "Jobhouse", scheduler.DEFAULT_GROUP,"triger1", Scheduler.DEFAULT_GROUP, 
	            		QuartzJob.class,"0 0 0 * * ?");//每天凌晨0点执行
	            scheduler.start();
	        } catch (Exception ex) {
	        	ex.printStackTrace();
	        } */
    }
	
	 private static void jobDetail(Scheduler scheduler, String jobName,
             String jobgroup,
             String trigerName,
             String trigerGroup, Class jobClass,
             String triggerTime) {
			try {
			//任务实体
			JobDetail jobDetail = new JobDetail(jobName, jobgroup, jobClass);
			//任务触发器
			Trigger trigger = new CronTrigger(trigerName, trigerGroup,triggerTime);
			//将任务添加到调度器
			scheduler.scheduleJob(jobDetail, trigger);
			} catch (Exception ex) {
				ex.printStackTrace();
			} 
			}
}
</pre><br /><br />QuartzJob<br /><pre name="code" class="java">
public class QuartzJob implements Job{
    
   public void execute(JobExecutionContext context) throws JobExecutionException{
	   QuartzInfo info=new QuartzInfo();
	    ArrayList list=info.getGenreID();	    
        System.out.println(new Date() +"    作业调度开始。");
        for(int i=0;i&lt;list.size();i++){
	        ArrayList genre=info.getGenre((String)list.get(i));
	        ArrayList pro=info.getPro((String)list.get(i));
	        Feed feed=new Feed();	        
	        feed.transferFunds(genre, pro,(String)list.get(i));
        }
        System.out.println(new Date() +"    作业调度结束。");
    }
}
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/151201#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 27 Dec 2007 13:20:43 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/151201</link>
        <guid>http://shiningwu.javaeye.com/blog/151201</guid>
      </item>
      <item>
        <title>rome+xslt rss解决方案</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/151200" style="color:red;">http://shiningwu.javaeye.com/blog/151200</a>&nbsp;
          发表时间: 2007年12月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          rome生成rss文件<br /><pre name="code" class="java">
private static final String DEFAULT_FEED_TYPE = "default.feed.type"; 
    private static final String FEED_TYPE = "type"; 
    private static final String MIME_TYPE = "application/xml; charset=GB2312"; 
    private static final String COULD_NOT_GENERATE_FEED_ERROR = "Could not generate feed"; 
    private static final String DATE_FORMAT = "yyyy-MM-dd"; 
    private String _defaultFeedType; 
    
    public void transferFunds(ArrayList&lt;InfoGenre> genre,ArrayList&lt;InfoPro> pro,String genreid){    
            String fileName="";
            InfoGenre gen=genre.get(0);
            try {
                String feedType = "rss_2.0";//指定rss类型
                
                String value = ""; 
                Properties prop = new Properties(); 
            	String url=this.getClass().getResource("/rss.properties").getPath().trim();
            	url=url.replaceAll("%20"," ");
                InputStream fis = new FileInputStream(url); 
                prop.load(fis); 
                value = prop.getProperty("address"); 
                      
                fileName = value+"//"+genreid+"//"+genreid+".xml";//静态rss存放目录
                String xslpath=value;
                DateFormat dateParser = new SimpleDateFormat(DATE_FORMAT);
  //feed是通过SyndFeedImpl的实例 
                SyndFeed feed = new SyndFeedImpl();
                feed.setFeedType(feedType);
                feed.setTitle(gen.getName());
                feed.setLink(gen.getLink());
                feed.setDescription(gen.getDescription());
                //SyndImage image=feed.getImage();  
                SyndImage image = new SyndImageImpl(); 
                if(image!=null)   {   
	                //image.setLink(gen.getImagelink()); 
	                image.setUrl(gen.getImagelink()); 
	                image.setDescription(gen.getImagedes());   
	                image.setTitle(gen.getImagetitle());   
                }   
                feed.setImage(image);   
  //entries就是item集合
                List&lt;SyndEntry> entries = new ArrayList&lt;SyndEntry>();
  //一个entry就是一个item
                SyndEntry entry=null;
                SyndContent description;
  
  //第一个item
                InfoPro program=null;
                for(int i=0;i&lt;pro.size();i++){
                	program=(InfoPro)pro.get(i);
	                entry = new SyndEntryImpl();
	                entry.setTitle(program.getTitle());
	                entry.setLink(program.getLink());
	                entry.setPublishedDate(dateParser.parse(program.getPublishtime()));
	                description = new SyndContentImpl();
	                description.setType("text/plain");
	                description.setValue(program.getDescription());
	                entry.setDescription(description);
	                entries.add(entry);
                }

  //将entries加入channel
                feed.setEntries(entries);
                File f=new File(value+"//"+genreid);	
         	    if(!f.exists())  f.mkdirs();
                Writer writer = new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8");
                SyndFeedOutput output = new SyndFeedOutput();                
                
  //更新客户对应栏目表isupdate字段，提示更新
                if(gen.getIsupdate().equals("1")){
                	boolean flag=updateCusGenre(gen.getId());
                }
                boolean flag1=updateGenre(gen.getId());
  //存盘,形成静态rss
                output.output(feed,writer);              
                writer.close();
                
  //存盘，形成静态html                
                Transform trans=new Transform();
                trans.transForm(genreid, fileName, xslpath);                          
                
            }
            catch (Exception ex) {
                ex.printStackTrace();
                System.out.println("ERROR: "+ex.getMessage());
            }
    }
</pre><br /><br />    rss+xslt转换html输出<br /><br /><pre name="code" class="java">
public void transForm(String  genreid,String rssPath,String xslPath){
		try {
		   //取得xml和xsl流   
			StreamSource source = new StreamSource(rssPath); 			
			StreamSource style = new StreamSource(xslPath+"//template.xsl"); 
		    
		   //设置输出流，把生成的结果传送到输出流中。构造函数中的输出流也可以是其他形式。
			String value = ""; 
            Properties prop = new Properties(); 
        	String url=this.getClass().getResource("/rss.properties").getPath().trim();
        	url=url.replaceAll("%20"," ");
            InputStream fis = new FileInputStream(url); 
            prop.load(fis); 
            value = prop.getProperty("address");                   
            String fileName = value+"//"+genreid+"//"+genreid+".html";//静态h存放目录         
		    Writer outfile = new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8");
		    StreamResult result = new StreamResult(outfile);
		    
		   //初始化转换器  
	       TransformerFactory transFactory = TransformerFactory.newInstance(); 
	       Transformer transformer = transFactory.newTransformer(style);
	       
		   //设置生成html形式结果流的编码为GBK
	       transformer.setOutputProperty(OutputKeys.ENCODING,"GBK");
	       
		   //设置html形式的流是有缩进格式的  
	       transformer.setOutputProperty(OutputKeys.INDENT,"yes");
	       
		  //转换并且输出流   
	       transformer.transform(source,result);
	       
	       }catch(Exception e) { 
	    	   e.printStackTrace(); 
	       }
	}

</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/151200#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 27 Dec 2007 13:17:59 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/151200</link>
        <guid>http://shiningwu.javaeye.com/blog/151200</guid>
      </item>
      <item>
        <title>ROME使用UTF-8编码写rss文件时出现乱码的解决方法</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/135454" style="color:red;">http://shiningwu.javaeye.com/blog/135454</a>&nbsp;
          发表时间: 2007年10月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天写一个程序使用ROME这个开源组件生成rss2.0文件，
使用utf-8格式保存中文总出现乱码，
从网上搜了一下,Rome在保存数据时采用的是gb2312格式，文件utf-8时即出现乱码，
SyndFeedOutput output = new SyndFeedOutput();    
Writer out = null;
out = new FileWriter("文件名");    
output.output(feed, out);  
改为
SyndFeedOutput output = new SyndFeedOutput();
Writer writer;
writer = new OutputStreamWriter(new FileOutputStream("文件名")), "UTF-8");
output.output(feed, writer); 

FileWriter写数据时采用的是系统默认的编码格式，所以需要下面的方法来设置使用“UTF-8”编码。    
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/135454#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 25 Oct 2007 15:25:51 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/135454</link>
        <guid>http://shiningwu.javaeye.com/blog/135454</guid>
      </item>
      <item>
        <title>就是喜欢</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/135452" style="color:red;">http://shiningwu.javaeye.com/blog/135452</a>&nbsp;
          发表时间: 2007年10月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          从04年跟着一个朋友开始看F1，一直以来对莱科宁情有独钟，舒马赫老气横秋，
阿隆索的大头、大驴脸配上小身板真是不协调...
就是以貌取人，就是喜欢KIMI...
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/135452#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 25 Oct 2007 15:20:12 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/135452</link>
        <guid>http://shiningwu.javaeye.com/blog/135452</guid>
      </item>
      <item>
        <title>莱科宁夺冠</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/135449" style="color:red;">http://shiningwu.javaeye.com/blog/135449</a>&nbsp;
          发表时间: 2007年10月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>七年之痒，莱科宁对这句话有深刻的体会。 莱科宁可谓是F1近代历史上最倒霉的车手，从2000年进入F1，从麦凯轮转站法拉利，噩运总是围绕莱科宁。在本赛季F1最后一站巴西站莱科宁迎来了幸运之神，奇迹般地夺得了个人的首个F1冠军。</p><p>莱科宁从2000年进入F1，隔年转入麦凯轮车队，便成为当时舒马赫唯一的冠军争夺者。可面对辛辣的车王，莱科宁除了经验上的欠缺，更缺乏好的运气。在麦凯轮度过五年，莱科宁终于转投法拉利车队，接替舒马赫的位置。除了同样的技术团队，他同样获得了目前F1车手中最高的年薪。甚至高于两届世界冠军阿隆索两倍之多。这是F1赛车界对莱科宁最好的认同。 同时，这4000多万美元的年薪也带来了前所未有的压力。更糟糕的噩运并没有离开莱科宁。在转会到法拉利的初期，全新的法拉利赛车却遇到了很大的问题。无论是稳定性及速度都落后于麦凯轮。直至转战欧洲赛场，法拉利才慢慢恢复冠军车队应有的王者风范。然此时赛程过半，并且22岁的汉密尔顿在进入F1的第一年便表现出所向无敌的杀伤性。更为夸张的是在巴西前的16个分站中，他所驾驶的赛车从来没有遇到过机械故障。这同2006年莱科宁所在的迈凯轮车队已是天壤之别。莱科宁遇到了人生中更大的挑战。对于其个人职业生涯而言，这也是至关重要的一个赛季，甚至是有些决定意义的。决定新赛季在新人辈出的F1的地位，这远比决定去或留更让人担忧。</p><p>&nbsp;巴西站圣保罗赛道，当所有的人都将冠军之争的焦点聚焦在阿隆索和汉密尔顿身上时，马萨和莱科宁完美的配合起步双双将麦凯轮车手抛在身后，紧接法拉利双雄一路领跑，而后续的赛车却一片混乱。落至第四的汉密尔顿情绪焦虑以及随后出现的机械故障让其掉到了第18位，而阿隆索也并不顺利，一度在三四名之间徘徊。 这给芬兰冰人带来了希望，更重要的冰人并没有完全依靠车队的倾斜政策来获得冠军，而是依靠比马萨晚进站3圈的时间里努力为自己争取时间，并且在这三圈中取得空前的成功。法拉利也不会否认，巴西站是一个奇迹。这是一场回味无穷的赛事</p><p>莱科宁在七年之后终于夺得了个人的首个F1冠军，也让法拉利车队成功将冠军收于囊中。 </p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/135449#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 25 Oct 2007 15:16:19 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/135449</link>
        <guid>http://shiningwu.javaeye.com/blog/135449</guid>
      </item>
      <item>
        <title>开了 开了</title>
        <author>阳光小菜鸟</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shiningwu.javaeye.com">阳光小菜鸟</a>&nbsp;
          链接：<a href="http://shiningwu.javaeye.com/blog/133457" style="color:red;">http://shiningwu.javaeye.com/blog/133457</a>&nbsp;
          发表时间: 2007年10月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>新浪的博客无疾而终，不想一直占用网络空间，却也不知如何取消，只能随它去了。</p><p>在javaeye论坛注册还附送博客，姑且&quot;开&quot;了它吧，嘿嘿... </p><p>抓耳挠腮的写了2个月的文档，逼得我面对现实，这辈子和文学青年是无缘无份了, 以后也不会想着抒发个小感情、整个小幽默、装个小忧郁了，和人家差得不是一点半点啊，那可是天上地下啊...</p><p>还是写我熟悉的东西吧，还省下了买本子的钱。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://shiningwu.javaeye.com/blog/133457#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 19 Oct 2007 16:25:21 +0800</pubDate>
        <link>http://shiningwu.javaeye.com/blog/133457</link>
        <guid>http://shiningwu.javaeye.com/blog/133457</guid>
      </item>
  </channel>
</rss>