<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>先学者为师</title>
    <description>活到老必须要学到老!</description>
    <link>http://andyj.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>apache传输压缩</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/205287" style="color:red;">http://andyj.javaeye.com/blog/205287</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          httpd.conf:<br /><br />LoadModule deflate_module modules/mod_deflate.so<br />LoadModule headers_module modules/mod_headers.so<br /><br />DeflateCompressionLevel 9 <br /><br />&lt;Location /><br /><br />AddOutputFilterByType DEFLATE text/html text/plain <br />                    text/xml text/javascript text/css<br /><br />BrowserMatch ^Mozilla/4 gzip-only-text/html <br />BrowserMatch ^Mozilla/4\.0[678] no-gzip <br />BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html<br /> <br />Header append Vary User-Agent env=!dont-vary <br />&lt;/Location><br /><br />以上的做法是压缩一般的网页html、xml、php、css、js等格式文件的输出，虽然会占用一点服务器的资源，不过这个可以减少带宽被占用的情况:)<br />这里：DeflateCompressionLevel 9是指压缩程度的等级，从1到9，9是最高级别的。这样做可以压缩到20%的大小，最少也有50%。至于jpg等已经压缩过的文件，就不需要再压缩了。
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/205287#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Wed, 18 Jun 2008 18:30:20 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/205287</link>
        <guid>http://andyj.javaeye.com/blog/205287</guid>
      </item>
      <item>
        <title>安装mysql</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/205281" style="color:red;">http://andyj.javaeye.com/blog/205281</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          # bin/mysql_install_db --user=mysql<br /><br /># chown -R root:mysql .<br /><br /># chown -R mysql /var/lib/mysql<br /><br /># chmod 755 /etc/rc.d/init.d/mysqld<br /><br /># chkconfig --add mysqld<br /><br /># /etc/rc.d/init.d/mysqld start
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/205281#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Jun 2008 18:20:45 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/205281</link>
        <guid>http://andyj.javaeye.com/blog/205281</guid>
      </item>
      <item>
        <title>Deep Profiling jQuery Apps</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/204660" style="color:red;">http://andyj.javaeye.com/blog/204660</a>&nbsp;
          发表时间: 2008年06月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://ejohn.org/blog/deep-profiling-jquery-apps/" target="_blank"><strong>原文出处</strong></a><br /><br />如果我们看上了一个网页中使用了jQuery的应用,如何能够快速完整的分析出整个页面的jQuery code呢?之前除了一点一点查看源代码以外,没有其他好的方法。John Resig给我们带来一个分析jQuery code的插件，很方便的，<a href="http://dev.jquery.com/~john/plugins/profile/jquery-profile.js" target="_blank">点此下载</a><br /><br />使用步骤如下：<br /><br />Step 1: 复制站点代码,加入base href,加入插件<br /><br />例如 http://www.abc.com/index.html中使用了jQuery，把此页面代码copy下来放到本地，然后修改代码。<br /><br />before:<br /><pre name="code" class="js">
 &lt;head>
    &lt;meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    ...
    &lt;script src="/javascripts/hisapp.js">&lt;/script>
    ...
  &lt;/head>
</pre><br /><br />after:<br /><pre name="code" class="js">
&lt;head>
    &lt;meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    &lt;base href="http://www.abc.com/"/>
    ...
    &lt;script src="/javascripts/hisapp.js">&lt;/script>
&lt;!--或者手动使用全路径 &lt;script src="http://www.abc.com/javascripts/hisapp.js">&lt;/script>-->

&lt;!--这个文件要放在jQuery.js后面 -->
    &lt;script src="http://dev.jquery.com/~john/plugins/profile/jquery-profile.js">&lt;/script>
    ...
  &lt;/head>
</pre><br /><br />Step 2: 打开页面，查看数据<br /><br />这里我们需要使用firefox + firebug打开修改后的页面，在firebug的console视图中输入jQuery.displayProfile(); 这个时候，整个页面的事件信息就会出现在页面下方了。
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/204660#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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, 17 Jun 2008 13:16:15 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/204660</link>
        <guid>http://andyj.javaeye.com/blog/204660</guid>
      </item>
      <item>
        <title>cookie.setSecure(true)</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/200491" style="color:red;">http://andyj.javaeye.com/blog/200491</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          基本上我们所有的 web 安全都是依靠 cookie 维系的，虽然多多少少会有一些方法来保证攻击者不能随便生成一个 cookie，但对于非加密的 HTTP 来说，监听到别人的 cookie 后然后伪造身份是非常容易的事情。<br /><br />即使用户通过 https 提交用户名/口令，但 cookie 一旦在 http 通道上被传递给服务器，安全隐患就随之而来了。<br /><br />Set-Cookie 的 secure 属性就是处理这方面的情况用的，它表示创建的 cookie 只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证，如果是 HTTP 连接则不会传递该信息，所以绝对不会被窃听到。凡是计划采用 HTTPS 来保证用户帐户安全的同志们都要注意对这个参数的使用，搞不好木桶上的最短板就在这里。
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/200491#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 05 Jun 2008 13:50:37 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/200491</link>
        <guid>http://andyj.javaeye.com/blog/200491</guid>
      </item>
      <item>
        <title>在frameset中的登陆界面session过期页面显示问题.</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/189235" style="color:red;">http://andyj.javaeye.com/blog/189235</a>&nbsp;
          发表时间: 2008年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          有些时候做一些系统的后台页面需要使用框架页。一般来说都是一个登录界面，然后登录成功后跳转到控制台页面，这个页面使用了frameset。这时候就存在一个session失效的问题，如果登录失效，那么就会在管理台页面的一个子页面中重新显示登录界面了，这个是我不想看到的。<br />解决方法是：可以在登录页面中加入以下js代码。<br /><br /><pre name="code" class="js">
if (top.location != self.location){
top.location=self.location;
}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/189235#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Sun, 04 May 2008 11:30:21 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/189235</link>
        <guid>http://andyj.javaeye.com/blog/189235</guid>
      </item>
      <item>
        <title>jquery和springmvc多文件上传</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/185465" style="color:red;">http://andyj.javaeye.com/blog/185465</a>&nbsp;
          发表时间: 2008年04月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          jquery的插件使用的是jQuery Multiple File Upload Plugin v1.27 地址 http://jquery.com/plugins/project/MultiFile/<br /><br />需要修改源代码,在js的282行<br /><pre name="code" class="js">
slave.name = (slave.name || $(MASTER).attr('name') || 'file');// + (slave.i>0?slave.i:''); // same name as master element
</pre><br />去掉注释,让input name就生成不同名称了,不然post上来的文件数据都是没有名字的.<br /><br />页面端代码:<br /><pre name="code" class="html">
&lt;script type="text/javascript">
&lt;!--
$().ready(function() {
	$('#houseMaps').MultiFile({
	  accept:'gif|jpg|png|jpeg|bmp', max:6, STRING: {
	   remove:'删除',
	   selected:'Selecionado: $file',
	   denied:'不支持上传该文件类型 $ext!'
	  }
 	});
});
//-->
&lt;/script>
&lt;form method="post" action="xxx.do?method=uploader" enctype="multipart/form-data">
&lt;input type="file" id="houseMaps" name="houseMaps"/>
&lt;/form>
</pre><br /><br />spring mvc端:<br /><pre name="code" class="java">

public ModelAndView uploader(HttpServletRequest request,HttpServletResponse response,UploadFormBean ufb) throws ServletRequestBindingException, HouseImgUploadException, IOException{
	MultipartFile styleMap = ufb.getStyleMap();
	Set&lt;MultipartFile> mfs = getFileSet(request);
	for(MultipartFile mf : mfs){
	   String imgPath = uploadFileAndCallback(mf);
	   //拿到的imgPath就是图片的相对于contextPath的存储路径了
	}
	
	return new ModelAndView("xxx");		
}

public Set&lt;MultipartFile> getFileSet(HttpServletRequest request) {
	MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
	Set&lt;MultipartFile> fileset = new LinkedHashSet&lt;MultipartFile>();
	for (Iterator it = multipartRequest.getFileNames(); it.hasNext();) {
		String key = (String)it.next();
		MultipartFile file = multipartRequest.getFile(key);
		if (file.getOriginalFilename().length() > 0) {
			fileset.add(file);
		}
	}
	return fileset;
}
private String uploadFileAndCallback(MultipartFile file) throws HouseImgUploadException, IOException {
	if(validateFile(file)){
		String filename = file.getOriginalFilename();
		String extName = filename.substring(filename.lastIndexOf(".")).toLowerCase();
		String lastFileName = System.currentTimeMillis()+CalendarUtil.getRadomValue()+extName;
		//图片存储的相对路径
		String path = sp+resource_subpath_name+sp+houseId+sp;
		String fileFullPath = getServletContext().getRealPath(resource_name)+path+lastFileName;
		FileCopyUtils.copy(file.getBytes(),new File(fileFullPath));
		return "/"+resource_name+"/"+resource_subpath_name+"/"+lastFileName;
	}else{
		throw new HouseImgUploadException("上传文件不符合规格");
	}
		
}
private boolean validateFile(MultipartFile file) {
	if(file.getSize()&lt;0 || file.getSize() > 2000000) 
               return false;
	String filename = file.getOriginalFilename();
	String extName = filename.substring(filename.lastIndexOf(".")).toLowerCase();
	if(extName.equals(".jpg") || extName.equals(".gif") || 
		extName.equals(".png") || extName.equals(".bmp") || extName.equals(".jpeg")){
		return true;
	}else{
		return false;
	}
}

</pre><br /><br />UploadFormBean:<br /><br /><pre name="code" class="java">
public class UploadFormBean {
	
	private MultipartFile styleMap;

	public MultipartFile getStyleMap() {
		return styleMap;
	}

	public void setStyleMap(MultipartFile styleMap) {
		this.styleMap = styleMap;
	}

	

}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/185465#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Apr 2008 14:44:22 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/185465</link>
        <guid>http://andyj.javaeye.com/blog/185465</guid>
      </item>
      <item>
        <title>用enum替换简单字典服务</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/185454" style="color:red;">http://andyj.javaeye.com/blog/185454</a>&nbsp;
          发表时间: 2008年04月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          很多应用中会用到字典服务,每次构建一个新应用的时候,整理字典是必不可少的工作,然后字典的录入更是一个费力的差事,大的字典也就无妨了,因为录入一次以后基本上就可以反复重用了,比如省市区三级数据联动。<br /><br />    在一些小的字典应用中，可以考虑使用enum来替代，enum的使用我不多介绍，我们定义一个enum肯定是要在程序中随处引用，但是最终的数据都是要持久化的，比如产品的状态(productState)，然后页面端的form也要使用可选择值的控件&lt;select>&lt;radio>等,这里讲一下如何把前后台的枚举联系起来。<br /><br /><br />假设我们有一个很简单的项目就是把产品类入库，然后按照不同状态查询出来:<br /><br />1.定义一个枚举<br /><pre name="code" class="java">
public enum ProductState {
	
	未审核(0), 
	已审核(1),
	下架(2),
	交易完毕(3);
	
	private Integer state;

	HouseState(Integer state) {
		this.state = state;
	}
	
	/**
	 * 此方法用于在dao里面使用查询
	 */
	public static ProductState valueOf(Integer i) {
		switch(i){
			case 0 : 
				return ProductState.未审核;
			case 1 :
				return ProductState.已审核;
			case 2 : 
				return ProductState.下架;
			case 3 : 
				return ProductState.交易完毕;
			default : 
				return null;
		}
	}
}
</pre><br /><br />2.定义pojo,这里我使用hibernate的annotation<br /><pre name="code" class="java">
@Entity
@Table(name="t_product")
public class Product {

	private Long id;
	private String name;
	
	private ProductState state;
	......

	@Id
	@GeneratedValue(generator="h-native")
    	@GenericGenerator(name="h-native", strategy="native")
	public Long getId() {
		return id;
	}
	
	@Enumerated()
	public HouseState getState() {
		return state;
	}
}
</pre><br /><br />这里需要注意：t_product表中的state字段需要定义为integer,要和你的枚举类里的构造函数参数类型相同<br />3.定义dao<br />简单的crud<br /><br />4.junit中调用<br /><pre name="code" class="java">
public void testDao(){
         Product p= new Product();
	p.setState(ProductState.已审核);
	dao.add(p);
}
</pre><br />查下数据库，已经有一条记录插入进去了，state的值为1<br /><br />5.按状态查询，返回中文枚举<br /><br />在hibernate内返回满足某一个枚举等于一个给定值的实体类也很方便。我这里用Criteria，在dao里面定义查询方法：<br /><pre name="code" class="java">
return (List&lt;Product>) this.getHibernateTemplate().execute(new HibernateCallback(){
	public Object doInHibernate(Session session) throws HibernateException, SQLException {
	Criteria ca = session.createCriteria(Product.class);
	ca.add(Expression.eq("state",ProductState .valueOf(1))); 
	return ca.list();
	}
});
</pre><br /><br />上面的1就可以使用参数传递进来了,或者构建自己的抽象查询对象，返回的product对象就可以按照house.getState()直接返回“已审核”的中文值了，剩下的就是页面端的事情了。<br /><br />对于页面端得显示,直接调用${porduct.state}就可以看到对应的中文的值了,如果需要更新操作的话,我的办法是把enum转换成map,这样key和value都有了!这种方法在对应大的字典集或者父子字典集的时候并不会减少工作量,要谨慎使用!
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/185454#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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, 22 Apr 2008 14:20:15 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/185454</link>
        <guid>http://andyj.javaeye.com/blog/185454</guid>
      </item>
      <item>
        <title>linux访问光驱</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/181140" style="color:red;">http://andyj.javaeye.com/blog/181140</a>&nbsp;
          发表时间: 2008年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          linux下的设备是被当作文件来访问的。<br /><br />1.装载<br />#cd /mnt<br />#mkdir cdrom<br />#mount /dev/cdrom /mnt/cdrom<br /><br />2.卸载<br />#umount /mnt/cdrom
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/181140#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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, 10 Apr 2008 10:59:05 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/181140</link>
        <guid>http://andyj.javaeye.com/blog/181140</guid>
      </item>
      <item>
        <title>linux 中文显示乱码解决办法</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/181138" style="color:red;">http://andyj.javaeye.com/blog/181138</a>&nbsp;
          发表时间: 2008年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          #vi /etc/sysconfig/i18n<br /><br />将内容改为<br /><br />LANG="zh_CN.GB18030"<br />LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"<br />SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"<br />SYSFONT="lat0-sun16"<br /><br />这样中文在SSH,telnet终端就可以正常显示了。
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/181138#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 10 Apr 2008 10:57:55 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/181138</link>
        <guid>http://andyj.javaeye.com/blog/181138</guid>
      </item>
      <item>
        <title>一个apache重写的应用(补充)</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/180553" style="color:red;">http://andyj.javaeye.com/blog/180553</a>&nbsp;
          发表时间: 2008年04月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          之前的网站渠道统计的设计有些糟糕,感觉可以直接来用apache实现,已经做了一些测试,写如下心得:<br /><br />在实现apache rewrite的时候,是可以把一些需要的信息写入到cookie中的<br /><br />httpd.conf:<br /><br />&lt;VirtualHost *:80><br />    ServerName aa.my.com<br />    RewriteEngine On<br />    RewriteRule ^/ref/(.*)$  /bb  [R,L,NC,CO=Visitor_PID:$1:my.com:60,CO=Visitor_Referer:%{HTTP_REFERER}:my.com:60]<br />    RewriteRule ^\/$ /bb [R,L]<br />    JkMount /*	examples<br />&lt;/VirtualHost><br /><br />以上的写法中,所有的aa.my.com/ref/st_xxx的请求都被转到/bb上了,这个对应着后面tomcat的应用,并且要向客户端写入两个cookie,分别是Visitor_PID = st_xxx,Visitor_Referer = http头里的referer，以上写法没错，但是实际操作中会发现只有Visitor_PID的cookie写进了客户端！经过反复debug发现，因为http header里面的referer的值通常是 http:或者https:开头，所以带入后的字符串就变成了CO=Visitor_Referer:http://xxx.xxxx.com:my.com:60，都是http后面的:搞得鬼，难怪会写不进去，估计apache解析的时候就没解析明白，如果你替换其他的系统变量，都是可以写进去的。以上的解决方案更完美些，不需要tomcat端再去设置渠道号，直接在网站全局内即可拿到cookie中的渠道号，方便与业务数据绑定！<br /><br />这个冒号问题目前我没有解决，希望有知道的高手不吝赐教！谢谢！<br /><br />关于R,L,NC,CO的作用可以参考apache rewrite文档:<br />http://www.cnfan.net/manual/Apache2.2/mod/mod_rewrite.html
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/180553#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Apr 2008 17:51:05 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/180553</link>
        <guid>http://andyj.javaeye.com/blog/180553</guid>
      </item>
      <item>
        <title>一个apache重写的应用</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/180433" style="color:red;">http://andyj.javaeye.com/blog/180433</a>&nbsp;
          发表时间: 2008年04月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          之前的网站渠道统计一直是前端apache来做的，分析渠道号，写入cookie，供后台系统使用。但是由于人事变动，之前的apache rewrite的系统出了些问题，而运维部门的人没能按照需求把系统改好，所以又得我自己出马了！<br /><br />需求：渠道代码 http://aa.my.com/ref/st_xxx <br />目的：利用apache write，把渠道号码和refer头信息取出来，放入到my.com根域内，然后重定向到tomcat的bb应用上去<br /><br />解决办法：当然直接利用apache肯定可以全部做，但是由于我之前没有接触过linux和apache(别鄙视我啊),所以都是先买现卖的，而且这个需求很着急用。因为apache rewrite中操作cookie的代码不知道怎么写，所以我把需求拆分了两部，让apache把渠道号拿出来以参数的形式传递给tomcat应用，然后tomcat的controller负责分析渠道号，然后写入cookie，最后重定向到自己！<br /><br />如：<br />渠道请求url： http://aa.my.com/ref/st_xxx<br />apache rewrite1: http://aa.my.com/bb/v/index.html?channel=st_xxx<br />tomcat index.html:解析channel，写人my.com根域cookie,redirct到http://aa.my.com/bb/v/index.html<br />apache rewrite2: http://aa.my.com/bb/v/index.html<br />tomcat index.html:没有channel参数，直接进入网站逻辑<br /><br />over!感觉这么做有些白痴，这些流程完全可以在apache端完成的，不过先应付上项目，接下来找时间把apache write cookie的相关内容看下再做修改了。<br /><br />httpd.conf的配置：<br />&lt;VirtualHost *:80><br />ServerName aa.my.com		<br />RewriteEngine On  <br />RewriteRule ^/ref/(.+)$ /bb/v/index.html\?channel=$1 [R,L]  <br />RewriteRule ^\/$ /bb [R,L]<br />JkMount /* examples<br />&lt;/VirtualHost>
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/180433#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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>Tue, 08 Apr 2008 13:35:17 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/180433</link>
        <guid>http://andyj.javaeye.com/blog/180433</guid>
      </item>
      <item>
        <title>CentOS 5.0环境下配置apache+tomcat</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/180428" style="color:red;">http://andyj.javaeye.com/blog/180428</a>&nbsp;
          发表时间: 2008年04月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.apache (使用CentOS自带的apache,/etc/httpd)<br /><br />当然也可以自己安装一个,下载apache,然后解压缩<br />首先要先安装APR<br />cd srclib/apr <br />#./configure --prefix=/usr/local/apr <br />#make <br />#make install <br /><br />安装APR-util <br />cd srclib/apr-util <br />#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr <br />#make <br />#make install <br /><br />cd apache目录<br /># ./configure --prefix=/usr/local/apache <br />--enable-so --enable-mods-shared=all <br />--enable-cgi <br />--with-apr=/usr/local/apr <br />--with-apr-util=/usr/local/apr-util/bin <br />#make <br />#make install<br />这里可以把所有模块都编译了,省得后面麻烦,然后在http.conf再把不需要的模块注释掉!<br /><br />2.jre<br /><br />下载jre-1_5_0-linux-i586.bin <br />#chmod a+x jre-1_5_0-linux-i586.bin <br />#vi /etc/profile<br /><br />在最后加入以下语句<br />export JAVA_HOME=/usr/local/jdk<br />export CLASSPATH=$JAVA_HOME/lib<br /><br />3.tomcat<br /><br />解压缩,直接运行,访问http://localhost:8080 ,应该可以看到小猫!<br /><br />4.整合tomcat和apache<br /><br />整合的工具mod_jk,去tomcat网站下载connector包<br /><br />解压缩,进入native,编译成功后记得copy到apache的modules里面<br />#./configure --with-apxs=/usr/sbin/apxs<br />#make<br />#cp apache-2.0/mod_jk.so /etc/httpd/modules/<br /><br />注:如果是用CentOS自带的apache,需要安装#yum install httpd-devel<br /><br />修改http.conf:<br />vi /etc/httpd/conf/httpd.conf<br />把NameVirtualHost *:80前面注释去掉,在结尾加上:<br /><br />&lt;VirtualHost *:80><br />    ServerName examples.andy.com<br />    RewriteEngine On        <br />    RewriteRule ^\/$  http://examples.andy.com/examples      [R,L]<br />    JkMount /*  examples<br />&lt;/VirtualHost><br /><br />然后#vi /etc/httpd/conf.d/jk.conf<br />添写如下内容<br />LoadModule jk_module modules/mod_jk.so<br /><br />JkLogFile         /var/log/httpd/mod_jk.log<br />JkLogLevel        info<br /><br />JkWorkerProperty worker.list=examples<br />JkWorkerProperty worker.examples.type=ajp13<br />JkWorkerProperty worker.examples.host=localhost<br />JkWorkerProperty worker.examples.port=8009<br />JkWorkerProperty worker.examples.connection_pool_timeout=600<br />JkWorkerProperty worker.examples.socket_keepalive=True<br />JkWorkerProperty worker.examples.socket_timeout=60<br /><br />记住如果有多个虚拟主机，就把每个[JkMount /*  别名]这里的别名在jk.conf里面定义多个就可以了！<br /><br />直接启动apache,tomcat,输入http://examples.andy.com 是不是会跳转到tomcat的例子程序上去了呢！^ ^ 别忘了修改你的hosts文件哦！
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/180428#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Apr 2008 13:20:43 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/180428</link>
        <guid>http://andyj.javaeye.com/blog/180428</guid>
      </item>
      <item>
        <title>CA认证过程</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/176470" style="color:red;">http://andyj.javaeye.com/blog/176470</a>&nbsp;
          发表时间: 2008年03月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.生成jks<br /><br /><img src="http://andyj.javaeye.com/upload/picture/pic/10433/39723bb3-0a9b-3357-b6b8-b9ae94144985.png " /><br /><br />-alias后面别名很重要,后面都要用到一个,这里你可以自定义,-keystore后面跟的是java用的存储密钥的容器,后缀一般是.jks或者.keystore或.truststore等,或者扩展名什么都不写,输入CN的时候一定要输入你的主机名(域名),不能用ip,切记!<br /><br />2.生成csr文件<br /><br /><img src="http://andyj.javaeye.com/upload/picture/pic/10431/23268e87-0392-3865-aad7-b66ccd22f4b9.png " /><br />命令产生了一个tomcatreq.csr 的证书请求文件,看到了没,你自己给你自己颁发了一个包含钥匙的证书^ ^<br /><br />3.去ca中心获取签名证书<br /><br />上面那个csr文件就是我们要提交给CA的需要签名的证书,下面我介绍以verisign为例,www.verisign.com的主页上有个Free SSL Trial ,还等什么,赶紧进去^ ^<br />接下来就是填写信息了,email要写好啊,因为要收证书的.其它随便了,一路下来,会到一个让你输入CSR的页面,把上面的csr文件用文本编辑器打开,然后粘贴上去,继续下来,后面回让你输入密码问题等,为了方便后面万一出错要修改csr,密码和问题要填写记住.成功后等着收email,很快verisign会给你邮寄来一个下面带有证书编码的信,把证书存为client.cer,这里的名字随意了,email里面还有其它的帮助信息,按照步骤可以完成部署。<br />这里还需要另外两个证书文件<br /><a href="http://www.verisign.com/support/verisign-intermediate-ca/Trial_Secure_Server_Root/index.html" target="_blank">Root CA Certificates</a>和 <a href="http://www.verisign.com/support/verisign-intermediate-ca/trial-secure-server-intermediate/index.html" target="_blank">Intermediate CA Certificates</a><br /><br />4.导入证书到jks中<br /><br />把它们分别保存为root.cer和inter-ca.cer ,接下来把这三个证书按照顺序导入到我们的密钥容器中<br /><pre name="code" class="java">
E:\CASTomcat>keytool -import -alias root -keystore mykey -trustcacerts -file root.cer
E:\CASTomcat>keytool -import -alias inter-ca -keystore mykey -trustcacerts -file inter-ca.cer
E:\CASTomcat>keytool -import -alias tomcat -keystore mykey -trustcacerts -file client.cer
</pre><br /><br />导入client.cer的时候要保证使用genkey时候的别名,再查看一下mykey，你会发现tomcat的信息变了！<br /><img src="http://andyj.javaeye.com/upload/picture/pic/10429/680c3f06-1dc0-374e-b4f1-593aa476e3d5.png " /><br />最后把mykey copy到tomcat的conf中，记得修改配置文件指向mykey哦！
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/176470#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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, 26 Mar 2008 19:07:56 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/176470</link>
        <guid>http://andyj.javaeye.com/blog/176470</guid>
      </item>
      <item>
        <title>cas-client-3.1.1的客户端配置</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/175825" style="color:red;">http://andyj.javaeye.com/blog/175825</a>&nbsp;
          发表时间: 2008年03月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          包结构: org.jasig.cas.client,下面有authentication,proxy,session,util,validation，和Yale的客户端不一样了。<br />里面有几个重要的filter:<br /><br />org.jasig.cas.client.authentication.AuthenticationFilter (负责客户端认证)<br />org.jasig.cas.client.validation.Cas10TicketValidationFilter (按照CAS1体系结构校验Ticket)<br />org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter (按照CAS2体系结构校验Ticket)<br />org.jasig.cas.client.util.HttpServletRequestWrapperFilter (包装request.getRemoteUser()数据)<br /><br />关于CAS1和CAS2体系结构参照官网<br /><a href="http://www.ja-sig.org/products/cas/overview/cas1_architecture/index.html" target="_blank">CAS 1 Architecture</a><br /><a href="http://www.ja-sig.org/products/cas/overview/cas2_architecture/index.html" target="_blank">CAS 2 Architecture</a><br /><br />web.xml<br /><br /><pre name="code" class="xml">
&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;display-name>my test app&lt;/display-name>
	
	&lt;context-param>
		&lt;param-name>contextConfigLocation&lt;/param-name>
		&lt;param-value>
			/WEB-INF/config/casContext.xml
		&lt;/param-value>
	&lt;/context-param>
	&lt;listener>
		&lt;listener-class>
			org.springframework.web.context.ContextLoaderListener
		&lt;/listener-class>
	&lt;/listener>
	
	&lt;!-- 负责用户认证 -->
	&lt;filter>
		&lt;filter-name>CAS Authentication Filter&lt;/filter-name>
		&lt;filter-class>org.jasig.cas.client.authentication.AuthenticationFilter&lt;/filter-class>
		&lt;!-- CAS login 服务地址-->
		&lt;init-param>
			&lt;param-name>casServerLoginUrl&lt;/param-name>
			&lt;param-value>https://kongji.xxx.com:8443/cas/login&lt;/param-value>
		&lt;/init-param>
		&lt;init-param>
			&lt;param-name>renew&lt;/param-name>
			&lt;param-value>false&lt;/param-value>
		&lt;/init-param>
		&lt;init-param>
			&lt;param-name>gateway&lt;/param-name>
			&lt;param-value>false&lt;/param-value>
		&lt;/init-param>
		&lt;!-- 客户端应用服务地址-->
		&lt;init-param>
			&lt;param-name>serverName&lt;/param-name>
			&lt;param-value>http://c1.xxx.com:8080&lt;/param-value>
		&lt;/init-param>
	&lt;/filter>
	
	&lt;!--负责Ticket校验-->
	&lt;filter>
		&lt;filter-name>CAS Validation Filter&lt;/filter-name>
		&lt;filter-class>org.springframework.web.filter.DelegatingFilterProxy&lt;/filter-class>
		&lt;init-param>
			&lt;param-name>targetBeanName&lt;/param-name>
			&lt;param-value>cas.validationfilter&lt;/param-value>
		&lt;/init-param>
	&lt;/filter>
	
	&lt;filter-mapping>
		&lt;filter-name>CAS Authentication Filter&lt;/filter-name>
		&lt;url-pattern>/safe/*&lt;/url-pattern>
	&lt;/filter-mapping>
	
	&lt;filter-mapping>
		&lt;filter-name>CAS Validation Filter&lt;/filter-name>
		&lt;url-pattern>/safe/*&lt;/url-pattern>
	&lt;/filter-mapping>

&lt;/web-app>
</pre><br /><br />casContext.xml<br /><br /><pre name="code" class="xml">
&lt;bean id="cas.validationfilter" class="org.jasig.cas.client.validation.Cas10TicketValidationFilter">
		&lt;property name="ticketValidator">
			&lt;ref bean="cas10TicketValidator"/>
		&lt;/property>
		&lt;property name="useSession">
			&lt;value>true&lt;/value>
		&lt;/property>
		&lt;!-- 客户端应用服务地址-->
		&lt;property name="serverName">
			&lt;value>http://c1.xxx.com:8080&lt;/value>
		&lt;/property>
		&lt;property name="redirectAfterValidation">
			&lt;value>true&lt;/value>
		&lt;/property>
	&lt;/bean>
	
	&lt;bean id="cas10TicketValidator" class="org.jasig.cas.client.validation.Cas10TicketValidator">
	&lt;!-- 这里参数是cas服务器的地址-->
		&lt;constructor-arg index="0" value="https://kongji.xxx.com:8443/cas" />
	&lt;/bean>
&lt;/beans>
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/175825#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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, 25 Mar 2008 14:22:38 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/175825</link>
        <guid>http://andyj.javaeye.com/blog/175825</guid>
      </item>
      <item>
        <title>CAS3.2服务端架设</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/175398" style="color:red;">http://andyj.javaeye.com/blog/175398</a>&nbsp;
          发表时间: 2008年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong><span style="font-size: medium">step1:下载</span></strong></p><p>server: <a href="http://www.ja-sig.org/downloads/cas/cas-server-3.2-release.zip">http://www.ja-sig.org/downloads/cas/cas-server-3.2-release.zip</a><br />client(有两个版本,一个是Yale的client,一个是ja-sig最新的,给出最新的): </p><p><a href="http://www.ja-sig.org/downloads/cas-clients/cas-client-3.1.1-release.zip">http://www.ja-sig.org/downloads/cas-clients/cas-client-3.1.1-release.zip</a></p><p>CAS的服务端安装很简单,它的服务就是一个独立的war包,在解压包里找到cas-server-webapp-3.2.war文件copy的你的tomcat中,我的tomcat为5.5版本.</p><p><strong><span style="font-size: medium">Step 2: 使用keytool配置web服务器的ssl支持</span></strong></p><p>因为CAS服务器端需要https的支持,所以在部署的web服务器上要开启ssl支持，这样就要提供访问的证书。<br />操作如下:</p><p>&nbsp;</p><p>Microsoft Windows XP [Version 5.1.2600]<br />(C) Copyright 1985-2001 Microsoft Corp.<br /><br />C:\Program Files\Java\jdk1.5.0_11\bin&gt;keytool -genkey -alias tomcatsso -keypass changeit -keyalg RSA<br />Enter keystore password:&nbsp; changeit<br />What is your first and last name?<br />&nbsp; [Unknown]:&nbsp; localhost<br />What is the name of your organizational unit?<br />&nbsp; [Unknown]:&nbsp; sino<br />What is the name of your organization?<br />&nbsp; [Unknown]:&nbsp; sino<br />What is the name of your City or Locality?<br />&nbsp; [Unknown]:&nbsp; beijing<br />What is the name of your State or Province?<br />&nbsp; [Unknown]:&nbsp; beijing<br />What is the two-letter country code for this unit?<br />&nbsp; [Unknown]:&nbsp; CN<br />Is CN=localhost, OU=Information Systems, O=Pacific Disaster Center, L=Kihei, ST=HI, C=US correct?<br />&nbsp; [no]:&nbsp; yes</p><p>&nbsp;</p><p><strong>说明：命令行的-alias别名参数你可以随意设置，但是要记住这个别名是后面操作(查看，导入，导出，删除，添加)该证书的唯一id，执行到这里你可以查看你的系统用户目录里面会产生一个.keystore的文件，记住这个路径，或者我是直接改个名字tomcatsso.keystore然后放到了tomcat的conf目录里面，后面会用到。还有就是What is your first and last name?这个问题,答案一定要填写你本机hosts里面对应的主机名，不然后面使用CAS的时候会出现错误。</strong></p><p>&nbsp;</p><p>C:\Program Files\Java\jdk1.5.0_11\bin&gt;keytool -export -alias tomcatsso -keypass changeit -file tomcatsso_server.crt<br />Enter keystore password: changeit<br />Certificate stored in file &lt;server.crt&gt;</p><p><strong>说明：这里会在你当前的路径下产生一个tomcatsso_server.crt，这个是服务端的数字签名文件</strong></p><p>&nbsp;</p><p>C:\Program Files\Java\jdk1.5.0_11\bin&gt;keytool -import -file tomcatsso_server.crt -keypass changeit -keystore ..\jre\lib\security\cacerts<br />Enter keystore password: changeit<br />Owner: CN=localhost, OU=sino, O=sino, L=beijing, ST=beijing, C=CN<br />Issuer: CN=localhost, OU=sino, O=sino, L=beijing, ST=beijing, C=CN<br />Serial number: 462030d8<br />Valid from: Fri Apr 13 15:39:36 HST 2007 until: Thu Jul 12 15:39:36 HST 2007<br />Certificate fingerprints:<br />MD5: CC:3B:FB:FB:AE:12:AD:FB:3E:D 5:98:CB:2E:3B:0A:AD<br />SHA1: A1:16:80:68:39:C7:58:EA:2F:48:59:AA:1D:73:5F:56:78:CE:A4:CE<br />Trust this certificate? [no]: yes<br />Certificate was added to keystore</p><p><strong>说明：把之前生成的数字签名证书导入到java的信任域里面</strong></p><p>&nbsp;</p><p>你也可以用keytool来查询系统中已经添加的安全认证<br />C:\Program Files\Java\jdk1.5.0_11\bin&gt;keytool -list -keypass changeit -keystore ..\jre\lib\security\cacerts</p><p>或者删除</p><p>C:\Program Files\Java\jdk1.5.0_11\bin&gt;keytool -delete -alias tomcatsso&nbsp;-keypass changeit -keystore ..\jre\lib\security\cacerts</p><p>&nbsp;</p><p><strong><span style="font-size: medium">Step3：配置tomcat</span></strong></p><p>打开conf/server.xml文件，找到&lt;!-- Define a SSL HTTP/1.1 Connector on port 8443 --&gt;这行，把下面的Connector的注释去掉，开启ssl支持。<br />配置一个truststoreFile属性，值就是你的cacerts文件的路径，给出xml：</p><pre name="code" class="xml">&lt;Connector port=&quot;8443&quot; maxHttpHeaderSize=&quot;8192&quot;
               maxThreads=&quot;150&quot; minSpareThreads=&quot;25&quot; maxSpareThreads=&quot;75&quot;
               enableLookups=&quot;false&quot; disableUploadTimeout=&quot;true&quot;
               acceptCount=&quot;100&quot; scheme=&quot;https&quot; secure=&quot;true&quot;
               keystoreFile=&quot;E:/apache-tomcat5.5/conf/tomcatsso.keystore&quot;
               keystorePass=&quot;changeit&quot;
               truststoreFile=&quot;C:/Program Files/Java/jdk1.5.0_04/jre/lib/security/cacerts&quot;
               URIEncoding=&quot;UTF-8&quot;
               clientAuth=&quot;false&quot; sslProtocol=&quot;TLS&quot; /&gt;
</pre><p>&nbsp;</p><p>打开浏览器，安装好证书，访问<a href="https://localhost:8443/">https://localhost:8443</a>，看看，是不是小猫出来了^ ^<br />部署好cas-server-webapp-3.2.war，访问<a href="https://localhost:8443/cas/login">https://localhost:8443/cas/login</a>，看看，CAS登录的页面是不是也该出来了 ^ ^</p>
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/175398#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 24 Mar 2008 13:45:53 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/175398</link>
        <guid>http://andyj.javaeye.com/blog/175398</guid>
      </item>
      <item>
        <title>spring2.5 mvc的annotation的使用</title>
        <author>kj2ff</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://andyj.javaeye.com">kj2ff</a>&nbsp;
          链接：<a href="http://andyj.javaeye.com/blog/173656" style="color:red;">http://andyj.javaeye.com/blog/173656</a>&nbsp;
          发表时间: 2008年03月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>项目中一种在用spring2.0,虽然2.5出来了很多新特性,但是一直没有时间实现,最近抽空做了一次尝试。spring mvc在系统中使用最多的就是Controller、MultiActionController和自定义的View了,Controller annotation的配置很简单，如下:</p><p>&nbsp;</p><p><strong>Service的配置</strong></p><pre name="code" class="java">@Component
public class FooServiceImpl implements FooService {
     //服务实现
}</pre><p><strong>Controller的配置</strong></p><pre name="code" class="java">@Controller
@RequestMapping(&quot;/findStudent.do&quot;)
public class FindStudent {

private FooService fooService;

	@Autowired
	public FindStudent(FooService fooService) {
	                this.fooService = fooService;
	}

	@RequestMapping(type = &quot;GET&quot;)
	public String doGet(ModelMap model) {
		//do Get
	}

                @RequestMapping(type = &quot;POST&quot;)
	public  String doPost(@ModelAttribute(&quot;student&quot;) Student student, BindingResult result, ModelMap model) {
		//do Post
	}
	
	@ModelAttribute(&quot;students&quot;)
	public Collection&lt;Student&gt; allStudent(){
		//返回collection
	}

}</pre><p>&nbsp;</p><p>Controller的方法可以返回4种类型void,String,ModelMap,ModelAndView，其中String是ViewName,ModelMap是一个LinkHashMap,在Spring处理annotation的时候会利用ModelMap来构建一个ModelAndView往上返回。单一的Controller主要是用于Form Controller的，其它的一些使用和以前的功能一样，这里说下@ModelAttribute,它可以把标记返回的数据存储到以指定value为attributeName的request中，这样可以在页面里面使用&lt;form:form modelAttribute=&quot;student&quot;&gt;中快速获取值,不过我不建议在视图层使用spring tag，这个看个人情况了 ^ ^</p><p>&nbsp;</p><p><strong>xml的配置</strong></p><pre name="code" class="xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
		xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
		xmlns:context=&quot;http://www.springframework.org/schema/context&quot;
		xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd&quot;&gt;

&lt;context:component-scan base-package=&quot;blog.andyj.spring.annotation&quot; /&gt;

&lt;/beans&gt;</pre><p>&nbsp;</p><p>context:component-scan还包括一些更详细的配置，比如过滤包等等，这里就不详细描述了。以上是Controller的配置，这样系统中的xml文件是不是干净很多了，呵呵！其实我本人还是比较多的使用MultiActionController的，下面说下它的实现:</p><p>&nbsp;</p><p><strong>MultiActionController配置</strong></p><p>&nbsp;</p><pre name="code" class="java">@Controller
public class TestController {
	
	@Autowired
	private TestService testService;
	
	@RequestMapping(&quot;/testHello.do&quot;)	
	public String hello(@RequestParam(value=&quot;name&quot;,required=true)String name,ModelMap model){
		model.addAttribute(&quot;message&quot;,name);
		return &quot;forward:hello.jsp&quot;;
	}
	
	@RequestMapping(&quot;/testView.do&quot;)
	public String go(){
		return &quot;testView&quot;;
	}

	public TestService getTestService() {
		return testService;
	}

	public void setTestService(TestService testService) {
		this.testService = testService;
	}

}</pre><p><span style="background-color: #fafafa">多数的配置都是一样的，@RequestParam有两个值，value是从request来的parameterName这样我们就不用写request.getParameter(&quot;name&quot;)，直接在controller使用我们的变量name就可以了;required默认为false,允许request中没有name参数，如果改为true，当request.getParameter(&quot;name&quot;)为空的时候会抛出org.springframework.web.bind.MissingServletRequestParameterException异常,我们可以用exceptionViewResolver接住异常转到相应视图上。还有关于自定义的View实现也是和以前的实现一样<br />，在上面go()方法中我返回了&quot;testView&quot;的viewName,您只要像以前一样在xml文件里定义好View和ViewResolver就可以了。</span></p><p>&nbsp;</p><p>最后，这里只是涉及了spring2.5中相关内容中非常少的一点，如果大家有兴趣深入了解可以参考spring reference。</p>
          <br/>
          <span style="color:red;">
            <a href="http://andyj.javaeye.com/blog/173656#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Mar 2008 10:41:38 +0800</pubDate>
        <link>http://andyj.javaeye.com/blog/173656</link>
        <guid>http://andyj.javaeye.com/blog/173656</guid>
      </item>
  </channel>
</rss>