<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>xrb2008</title>
    <description></description>
    <link>http://xrb2008.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>dwr查询问题?</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/157589" style="color:red;">http://xrb2008.javaeye.com/blog/157589</a>&nbsp;
          发表时间: 2008年01月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          spring+hibernate+dwr 查询时在控制台出现 <br />[ERROR]: [No converter found for 'org.hibernate.proxy.CGLIBLazyInitializer'<br /><br /><br />这是什么原因?不过程序能正常运行.<br /><br />谁碰到过这样的问题?<br /><br />注:因为我的表中涉及到一对多的关系.考虑到延迟加载,采用了open session in view.方式.
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/157589#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 19 Jan 2008 15:03:20 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/157589</link>
        <guid>http://xrb2008.javaeye.com/blog/157589</guid>
      </item>
      <item>
        <title>java访问各种数据库连接代码</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/156454" style="color:red;">http://xrb2008.javaeye.com/blog/156454</a>&nbsp;
          发表时间: 2008年01月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">Java连接各种数据库的实例  
 
此文中的代码主要列出连接数据库的关键代码，其他访问数据库代码省略

1、Oracle8/8i/9i数据库（thin模式） 
Class.forName(&quot;oracle.jdbc.driver.OracleDriver&quot;).newInstance(); 
String url=&quot;jdbc:oracle:thin:@localhost:1521:orcl&quot;; 
//orcl为数据库的SID 
String user=&quot;test&quot;; 
String password=&quot;test&quot;; 
Connection conn= DriverManager.getConnection(url,user,password); 

2、DB2数据库 
Class.forName(&quot;com.ibm.db2.jdbc.app.DB2Driver &quot;).newInstance(); 
String url=&quot;jdbc:db2://localhost:5000/sample&quot;; 
//sample为你的数据库名 
String user=&quot;admin&quot;; 
String password=&quot;&quot;; 
Connection conn= DriverManager.getConnection(url,user,password); 

3、Sql Server7.0/2000数据库 
Class.forName(&quot;com.microsoft.jdbc.sqlserver.SQLServerDriver&quot;).newInstance(); 
String url=&quot;jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb&quot;; 
//mydb为数据库 
String user=&quot;sa&quot;; 
String password=&quot;&quot;; 
Connection conn= DriverManager.getConnection(url,user,password); 

4、Sybase数据库 
Class.forName(&quot;com.sybase.jdbc.SybDriver&quot;).newInstance(); 
String url =&quot; jdbc:sybase:Tds:localhost:5007/myDB&quot;; 
//myDB为你的数据库名 
Properties sysProps = System.getProperties(); 
SysProps.put(&quot;user&quot;,&quot;userid&quot;); 
SysProps.put(&quot;password&quot;,&quot;user_password&quot;); 
Connection conn= DriverManager.getConnection(url, SysProps); 

5、Informix数据库 
Class.forName(&quot;com.informix.jdbc.IfxDriver&quot;).newInstance(); 
String url = 
&quot;jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver; 
user=testuser;password=testpassword&quot;; 
//myDB为数据库名 
Connection conn= DriverManager.getConnection(url); 

6、MySQL数据库 
Class.forName(&quot;org.gjt.mm.mysql.Driver&quot;).newInstance(); 
String url =&quot;jdbc:mysql://localhost/myDB?user=soft&amp;password=soft1234&amp;useUnicode=true&amp;characterEncoding=8859_1&quot; 
//myDB为数据库名 
Connection conn= DriverManager.getConnection(url); 

7、PostgreSQL数据库 
Class.forName(&quot;org.postgresql.Driver&quot;).newInstance(); 
String url =&quot;jdbc:postgresql://localhost/myDB&quot; 
//myDB为数据库名 
String user=&quot;myuser&quot;; 
String password=&quot;mypassword&quot;; 
Connection conn= DriverManager.getConnection(url,user,password); 
 
 
</pre>&nbsp;
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/156454#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jan 2008 13:18:07 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/156454</link>
        <guid>http://xrb2008.javaeye.com/blog/156454</guid>
      </item>
      <item>
        <title>各种常用转换函数</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/156453" style="color:red;">http://xrb2008.javaeye.com/blog/156453</a>&nbsp;
          发表时间: 2008年01月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>1、float类型小数位数控制</p><p>&nbsp;</p><pre name="code" class="java"> float subFloat(float f,int lenght)
{
        String fStr = String.valueOf(f);
        int i = fStr.indexOf('.');
        String returnStr = fStr.substring(0, i + 1 + lenght);
        float returnf = (Float.valueOf(returnStr)).floatValue();
        return returnf;
}</pre><p>&nbsp;</p><p>2、string转date</p><pre name="code" class="java">// -------------------------格式转换（string ---Date）
	public final static java.sql.Date string2Date(String dateString)
			throws java.lang.Exception {
		DateFormat dateFormat;
		dateFormat = new SimpleDateFormat(&quot;yyyy-MM-dd kk:mm:ss&quot;, Locale.ENGLISH);
		dateFormat.setLenient(false);
		java.util.Date timeDate = dateFormat.parse(dateString);// util类型
		java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());// sql类型
		return dateTime;
	}</pre><p>&nbsp;</p><p>3、时间格式化</p><p>&nbsp;</p><pre name="code" class="java">// 时间
		String dtime = new SimpleDateFormat(&quot;yyyy-MM-dd HH:mm:ss&quot;)
				.format(Calendar.getInstance().getTime());

或将Calendar.getInstance().getTime()换成从数据库中取出来的时间值</pre><p>&nbsp;</p><p>4、字符串替换</p><p>&nbsp;</p><pre name="code" class="java">    /**  
  *  用  newString  替换  line  中的所有的  OldString  
  *  
  *  @param  line  原字符串  
  *  @param  oldString  被替换的字符串  
  *  @param  newString  新的要替换oldString的字符串  
  *  
  *  @return  返回所有oldString都被newString替换的字符串  
  */  

	 public  static  final  String  replace(  String  line,  String  oldString,  String  newString  )  
     {  
             //如果line是null，直接返回  
             if  (line  ==  null)  {  
                     return  null;  
             }  
             int  i=0;  
             //如果在line中确实存在oldString那么将进行以下的替换  
             if  (  (  i=line.indexOf(  oldString,  i  )  )  &gt;=  0  )  {  
                     char  []  line2  =  line.toCharArray();  
                     char  []  newString2  =  newString.toCharArray();  
                     int  oLength  =  oldString.length();  
                     StringBuffer  buf  =  new  StringBuffer(line2.length);  
                     buf.append(line2,  0,  i).append(newString2);  
                     i  +=  oLength;  
                     int  j  =  i;  
                     while(  (  i=line.indexOf(  oldString,  i  )  )  &gt;  0  )  {  
                             buf.append(line2,  j,  i-j).append(newString2);  
                             i  +=  oLength;  
                             j  =  i;  
                     }  
                     buf.append(line2,  j,  line2.length  -  j);  
                     return  buf.toString();  
             }  
             //如果在line中没有oldString  返回line  
             return  line;  
     }  

	
	</pre><p>&nbsp;</p><p>5、流转换</p><pre name="code" class="java">import java.io.*;
import java.util.*;
 class a {
  public static void main(String[] args) throws Exception {
    /*把字符串中内容读到字节输入流中，并且获得字节流的长度*/
    String s = &quot;This is a 简单测试 for I/O stream!!!!!&quot;;
    byte[] b = s.getBytes();
    ByteArrayInputStream bis = new ByteArrayInputStream(b, 0, b.length);
    System.out.println(b.length);
    /*把字节输入流中内容读到字符串中*/
    InputStreamReader isr = new InputStreamReader(bis);
    StringBuffer sb = new StringBuffer();
    char[] c1 = new char[512];
    int c;
    while ( (c = isr.read(c1)) != -1) {
      sb.append(c1, 0, c);
    }
    String s2 = new String(sb);
    System.out.println(&quot;*&quot; + s2 + &quot;*&quot;);
  }
}
</pre><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/156453#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jan 2008 13:16:09 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/156453</link>
        <guid>http://xrb2008.javaeye.com/blog/156453</guid>
      </item>
      <item>
        <title>js中各种自定义函数</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/156451" style="color:red;">http://xrb2008.javaeye.com/blog/156451</a>&nbsp;
          发表时间: 2008年01月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1、js去表单中字符中是否有空格 <br /><p>&nbsp;</p><pre name="code" class="js">function trim(inputString) {
    
              if (typeof inputString != &quot;string&quot;) { return inputString; }
              var retValue = inputString;
              var ch = retValue.substring(0, 1);
              while (ch == &quot; &quot;) { 
           //检查字符串开始部分的空格
                  retValue = retValue.substring(1, retValue.length);
                  ch = retValue.substring(0, 1);
              }
              ch = retValue.substring(retValue.length-1, retValue.length);
              while (ch == &quot; &quot;) {
                 //检查字符串结束部分的空格
                 retValue = retValue.substring(0, retValue.length-1);
                 ch = retValue.substring(retValue.length-1, retValue.length);
              }
              while (retValue.indexOf(&quot;  &quot;) != -1) { 
          //将文字中间多个相连的空格变为一个空格
                 retValue = retValue.substring(0, retValue.indexOf(&quot;  &quot;)) + retValue.substring(retValue.indexOf(&quot;  &quot;)+1, retValue.length); 
              }
              return retValue;
           } 
</pre><p>&nbsp;</p><p>2、js 弹出提示层，并锁定页面</p><p>&nbsp;</p><pre name="code" class="java"> 
  &lt;body&gt;
   &lt;a href=&quot;PAGE/MyJsp.jsp&quot;&gt;This a struts page.&lt;/a&gt;  &lt;br&gt;
   &lt;input type=&quot;button&quot; value=&quot;点击这里&quot; onclick=&quot;sAlert('test弹窗效果');&quot; /&gt;
   
  &lt;/body&gt;
&lt;/html:html&gt;
&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot;&gt;
//more javascript from http://www.smallrain.net
        function sAlert(str){
        var msgw,msgh,bordercolor;
        msgw=400;//提示窗口的宽度
        msgh=100;//提示窗口的高度
        titleheight=25 //提示窗口标题高度
        bordercolor=&quot;#c51100&quot;;//提示窗口的边框颜色
        titlecolor=&quot;#c51100&quot;;//提示窗口的标题颜色
        
        var sWidth,sHeight;
        sWidth=screen.width;
        sHeight=screen.height;

        var bgObj=document.createElement(&quot;div&quot;);
        bgObj.setAttribute('id','bgDiv');
        bgObj.style.position=&quot;absolute&quot;;
        bgObj.style.top=&quot;0&quot;;
        bgObj.style.background=&quot;#cccccc&quot;;
        bgObj.style.filter=&quot;progid:DXImageTransform.Microsoft.Alpha(style=3,opacity=25,finishOpacity=75&quot;;
        bgObj.style.opacity=&quot;0.6&quot;;
        bgObj.style.left=&quot;0&quot;;
        bgObj.style.width=sWidth + &quot;px&quot;;
        bgObj.style.height=sHeight + &quot;px&quot;;
        bgObj.style.zIndex = &quot;10000&quot;;
        document.body.appendChild(bgObj);
        
        var msgObj=document.createElement(&quot;div&quot;)
        msgObj.setAttribute(&quot;id&quot;,&quot;msgDiv&quot;);
        msgObj.setAttribute(&quot;align&quot;,&quot;center&quot;);
        msgObj.style.background=&quot;white&quot;;
        msgObj.style.border=&quot;1px solid &quot; + bordercolor;
        msgObj.style.position = &quot;absolute&quot;;
        msgObj.style.left = &quot;50%&quot;;
        msgObj.style.top = &quot;50%&quot;;
        msgObj.style.font=&quot;12px/1.6em Verdana, Geneva, Arial, Helvetica, sans-serif&quot;;
        msgObj.style.marginLeft = &quot;-225px&quot; ;
        msgObj.style.marginTop = -75+document.documentElement.scrollTop+&quot;px&quot;;
        msgObj.style.width = msgw + &quot;px&quot;;
        msgObj.style.height =msgh + &quot;px&quot;;
        msgObj.style.textAlign = &quot;center&quot;;
        msgObj.style.lineHeight =&quot;25px&quot;;
        msgObj.style.zIndex = &quot;10001&quot;;

       var title=document.createElement(&quot;h4&quot;);
       title.setAttribute(&quot;id&quot;,&quot;msgTitle&quot;);
       title.setAttribute(&quot;align&quot;,&quot;right&quot;);
       title.style.margin=&quot;0&quot;;
       title.style.padding=&quot;3px&quot;;
       title.style.background=bordercolor;
       title.style.filter=&quot;progid:DXImageTransform.Microsoft.Alpha(startX=20, startY=20, finishX=100, finishY=100,style=1,opacity=75,finishOpacity=100);&quot;;
       title.style.opacity=&quot;0.75&quot;;
       title.style.border=&quot;1px solid &quot; + bordercolor;
       title.style.height=&quot;18px&quot;;
       title.style.font=&quot;12px Verdana, Geneva, Arial, Helvetica, sans-serif&quot;;
       title.style.color=&quot;white&quot;;
       title.style.cursor=&quot;pointer&quot;;
       title.innerHTML=&quot;关闭&quot;;
       title.onclick=function(){
    document.body.removeChild(bgObj);
    document.getElementById(&quot;msgDiv&quot;).removeChild(title);
document.body.removeChild(msgObj);
            }
       document.body.appendChild(msgObj);
       document.getElementById(&quot;msgDiv&quot;).appendChild(title);
       var txt=document.createElement(&quot;p&quot;);
       txt.style.margin=&quot;1em 0&quot;
       txt.setAttribute(&quot;id&quot;,&quot;msgTxt&quot;);
       txt.innerHTML=str;
       document.getElementById(&quot;msgDiv&quot;).appendChild(txt);
        }
    &lt;/script&gt;</pre><p>&nbsp;</p><p>3、js中的日期处理</p><p>&nbsp;</p><pre name="code" class="js">
function cc(dd,dadd)
{
//可以加上错误处理
var a = new Date(dd)
a = a.valueOf()
a = a +dadd * 24 * 60 * 60 * 1000
a = new Date(a)
return (a.getFullYear() + &quot;-&quot; + (a.getMonth() + 1) + &quot;-&quot; + a.getDate() )
}

//日期格式化
function mapOnClick()
		{
                 var string = (document.form1.endtime.value).split(&quot;-&quot;);
                 var string2 = (document.form1.endtime2.value).split(&quot;-&quot;);
                // alert(new Date());
                 var myDate = new Date(string[0],string[1]-1,string[2]);
                 var myDate2 = new Date(string2[0],string2[1]-1,string2[2]);
                 //取当前日期
                 var newYear=new Date().getYear();
                 var newMonth=new Date().getMonth();
                 if(newMonth==12){
                   newMonth=1;
                 }else{
                   newMonth=newMonth+1;
                 }

                 var newDay=new Date().getDate();

               if(myDate2&gt;new Date()){
                 //alert(newYear+&quot;-&quot;+newMonth+&quot;-&quot;+newDay);
                 document.form1.endtime2.value=newYear+&quot;-&quot;+newMonth+&quot;-&quot;+newDay;
               }
               if(myDate&gt;new Date()){
                 //alert(newYear+&quot;-&quot;+newMonth+&quot;-&quot;+newDay);
                 document.form1.endtime.value=newYear+&quot;-&quot;+newMonth+&quot;-&quot;+newDay;
               }
          

                 if(myDate2&lt;myDate){
                   alert(&quot;截止日期不能大于起始日期,请重新选择!&quot;);
                   return flase;
                 }
                 
//alert(document.form1.endtime.value);
//var myDate = new Date(document.form1.endtime.value);
//alert(myDate);     
//日期相等比较
                if(Date.parse(myDate2)==Date.parse(myDate)){
                myDate=cc(myDate,1);
                //alert(myDate);
                // myDate.setDate(myDate.getDate()+1)
                document.form1.endtime2.value=myDate;
               }

			form1.map.value = &quot;1&quot;;
                        form1.table1.value = &quot;2&quot;;
			if( form1.endtime.value == &quot;&quot; || form1.endtime2.value == &quot;&quot; )
			{
				alert(&quot;请填写完整后，再执行！&quot;);
				return;
			}
			form1.submit();
		}
////////////////////////////////////////字符串类型与时间类型间的转换
 try{
               SimpleDateFormat   dateFormat   =   new   SimpleDateFormat(&quot;yyyy-MM-dd&quot;);
               Date date=dateFormat.parse(begin);
               long   dateMS   =   date.getTime();
               dateMS   =   dateMS   +   60   *   60   *   24   *   1000   *   1;
               date.setTime(dateMS);
               String   dateString   =   dateFormat.format(date);
               end=dateString;
              //System.out.println(&quot;date:::&quot;+dateString);
           }catch(Exception e){
               e.printStackTrace();
           }</pre><p>&nbsp;</p><p>4、判断所有表单项非空</p><p>&nbsp;</p><pre name="code" class="js">  function checkdate() {
     //alert(&quot;sadfsa&quot;);
   var   input = document.all.tags(&quot;input&quot;);   
   for(i=0;i&lt;input.length;i++)   
  {   
    if   (trimString(input[i].value)==&quot;&quot;)   
    {   
      alert(&quot;请填完整空白项信息！&quot;);   
      return   false;   
    }
  } </pre><p>&nbsp;</p><p>5、实现页面指定时间后自动跳转</p><p>&nbsp;</p><pre name="code" class="xml">&lt;body&gt;
  &lt;!-- url后面的为目标地址--&gt;
&lt;meta http-equiv=&quot;Refresh&quot; content=&quot;5;url=目标位置&quot;&gt;
  &lt;table&gt;
  &lt;tr&gt;
          &lt;td width=&quot;181&quot; height=&quot;30&quot; class=&quot;FontBlack&quot;&gt;　　该页面&lt;/td&gt;
          &lt;td width=&quot;22&quot; align=&quot;center&quot; class=&quot;FontBlack&quot;&gt;&lt;div id=&quot;time&quot;&gt;5&lt;/div&gt;&lt;/td&gt;
          &lt;td width=&quot;194&quot; align=&quot;left&quot; class=&quot;FontBlack&quot;&gt;秒后自动跳转&lt;/td&gt;
   &lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;

&lt;script language=&quot;JavaScript&quot;&gt;
	var times=6;
	clock();
	function clock()
	{
		window.setTimeout('clock()',1000);
		times=times-1;
		time.innerHTML =times;
	}
&lt;/script&gt;
  
</pre><p>&nbsp;</p><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/156451#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jan 2008 13:05:58 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/156451</link>
        <guid>http://xrb2008.javaeye.com/blog/156451</guid>
      </item>
      <item>
        <title>DWR中session.及request的用法</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/156106" style="color:red;">http://xrb2008.javaeye.com/blog/156106</a>&nbsp;
          发表时间: 2008年01月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          当前的项目中．用到了DWR.以为不用struts没什么关系．结果spring+dwr让我在session获取这块碰到了问题．<br />如：系统登录页面中我要进行验证码验证．一般生成的验证码是放在session中的．我点登录的时候．用的是dwr．所以是js直接调用后台的方法．<br />那么后台的方法只是一个普通的java类．是不存在什么request,session的．所以就不到session中的值．当然你要是用spirng MVC的话，可能可以．（我没用过，不好说）．<br />经查资料，原来ＤＷＲ本身中就可以传session.只不过是隐藏的．<br /><br />那么方法就是通过DWR的ＡＰＩ．（网上说很多人不推荐，不知为什么）<br /><br />具体应用：<br />HttpServletRequest,HttpServletResponse,HttpSession,ServletContext,ServletConfig. <br /><br />Java类中定义方法: save(String name, HttpSession session) <br /><br />Javascript调用: Service.save(jsID,jsName,callBack) <br /><br />注意,这里不需要传入session这个参数,DWR会自动传入,在Java端可以直接使用.<br /><br />这样的话，你就可以在后台的save方法中得到sesion了
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/156106#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 15 Jan 2008 15:45:11 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/156106</link>
        <guid>http://xrb2008.javaeye.com/blog/156106</guid>
      </item>
      <item>
        <title>dwr2.0 中 util.js脚本提供的实用方法调用说明 </title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/155563" style="color:red;">http://xrb2008.javaeye.com/blog/155563</a>&nbsp;
          发表时间: 2008年01月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1、addRows 增添数据行到指定的table<br />    方法基本语法：dwr.util.addRows(id, array, cellfuncs, [options]);<br />      * id:table 的 id (最好是一个tbody的id)<br />    * array: 需要被填充到table里的数据对象，可以是数组，集合等对象，每一个数组元素对应table的一行<br />    * cellfuncs: function数组 每个元素对应table某一列数据的取得方式<br />    * options: 包含几个属性的对象（可选）<br />    <br />    options：<br />    # 属性rowCreator: 一个function,默认返回document.createElement("tr")，可以编辑返回自定义的tr（比如不同的样式）<br />    # 属性cellCreator: 一个function，默认返回document.createElement("td")，可以编辑返回自定义的tr（比如不同的样式）<br />    # 属性escapeHtml: 是否转义&lt;,>,&,",' <br />      <br />    当所有call back function 都需要转义，则可以使用dwr.util.setEscapeHtml(false)<br />   <br />  2、removeAllRows 把指定table的所有行都移除<br />    方法基本语法：dwr.util.removeAllRows(id)；<br />    * id:table 的 id (最好是一个tbody的id)<br />    <br />    <br />  3、byId <br />　你可以把它看成是document.getElementById()的替代版，如果指定的id有多个匹配项，就会返回一个element数组<br />    方法基本语法：dwr.util.byId(id)<br />    另：在引入util.js的环境下，你还可以使用$(id)代替document.getElementById()，但是为了不和Prototype相冲突，还是建议各位使用    byId。<br />    <br />  4、getValue  取得html 页面元素的value<br />    方法基本语法：dwr.util.getValue(id)；<br />    <br />  5、getText<br />    用法和getValue方法相同，唯一的不同在于getText是用来取得下拉框列表的Text值，而非Value<br /><br />  6、getValues<br />  方法基本语法：dwr.util.getValues(object) ；<br />  参数是一个拥有多个属性的javascript object，属性名称是html页面元素的id，属性value为html页面元素的value，该方法不返回任何东西，而是改变了object的属性值。<br /><br /><br />  7、setValue  设置html 页面元素的value<br />  方法基本语法：dwr.util.setValue(id, value [, options]) ；<br />   如果id参数指定的页面元素是select列表，该列表与value参数值相匹配的option选项会处于选中状态。<br /><br />  8、setValues<br />  方法基本语法：dwr.util.setValues(object) ；<br />  参数是一个拥有多个属性的javascript object，属性名称是html页面元素的id，属性value为html页面元素的value<br /> <br />  9、addOptions<br /> 方法基本语法：dwr.util.addOptions(...); 有多种调用方式：<br /> # dwr.util.addOptions(id,["first","second","third"]) id参数指定的页面元素可以是ol、ul或select，String数组将被set到id指定的页面元素<br /> # dwr.util.addOptions(id,[{name:"first"，value:"1"},{name:"second"，value:"2"},{name:"third"，value:"3"}],"value","name")<br /> 这种方式只对应select的情形，如上所述，Object数组里每个元素的value属性值将被set到option的value里，name属性将被set到option的text里。<br /> 如果没有第四个参数，将会把value属性值同时set到option的value和text里。<br /> # dwr.util.addOptions(id，{first:"1",second:"1",third:"3"})<br /> 这种方式也只对应select的情形，第二个参数是一个Object，属性名set到option的value里，属性值set到option的text里<br /> <br />  10、removeAllOptions<br /> 方法基本语法：dwr.util.removeAllOptions(id)；<br /> 除去所有动态加载的Options或列表项，与addOptions配合使用<br /> <br /><br />  11、onReturn<br />  方法基本语法：dwr.util.onReturn(event, func）<br />  当输入回车时，调用func名指定的方法<br /><br />  12、useLoadingMessage<br />  方法基本语法：dwr.util.useLoadingMessage();<br />  显示一个正在加载的图片。必须在页面loaded以后调用
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/155563#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 Jan 2008 10:05:35 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/155563</link>
        <guid>http://xrb2008.javaeye.com/blog/155563</guid>
      </item>
      <item>
        <title>关于普通类读取spinng　xml文件</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/155253" style="color:red;">http://xrb2008.javaeye.com/blog/155253</a>&nbsp;
          发表时间: 2008年01月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近用到spring .在类中需要用到xml文件中的ＢＥＡＮ．所以找了一些资料<br />如：<br />方法一：<br /><br />String[]   path={"WebRoot/WEB-INF/applicationContext.xml","WebRoot/WEB-INF/applicationContext_task.xml"};<br /><br />ApplicationContext context = new FileSystemXmlApplicationContext(path);<br /><br /><br />方法二：<br /><br />  String path="WebRoot/WEB-INF/applicationContext*.xml";<br />  ApplicationContext context = new FileSystemXmlApplicationContext(path);<br /><br />方法三：<br />ApplicationContext ctx = <br />new FileSystemXmlApplicationContext("classpath:地址"); <br />没有classpath的话就是从当前的工作目录<br /><br />等．<br />但大多数需将．xml文件置于工程目录的classes中．才能读到．而我的是放在webroot/web-inf中<br />所以我采用的方式是．<br /><br />String truePath=request.getRealPath("/WEB-INF");<br />String path=truePath+"/app-*.xml";<br />ApplicationContext context = <br />new FileSystemXmlApplicationContext(path);<br /><br />ProoftabDAO prooftabDAO=(ProoftabDAO)context.getBean("ProoftabDAO");<br /><br /><br />不知道这样读有什么问题．要是没有request.之类的东东．应该怎么做？请指点．一个普通的java类应该怎么读位于webroot/web-inf/下的app...xml文件．
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/155253#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 Jan 2008 12:06:11 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/155253</link>
        <guid>http://xrb2008.javaeye.com/blog/155253</guid>
      </item>
      <item>
        <title>javascript全选及取值</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/154127" style="color:red;">http://xrb2008.javaeye.com/blog/154127</a>&nbsp;
          发表时间: 2008年01月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="xml">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;
&lt;html&gt;
 &lt;head&gt;
  &lt;title&gt;checked.html&lt;/title&gt;

  &lt;meta http-equiv=&quot;keywords&quot; content=&quot;keyword1,keyword2,keyword3&quot;&gt;
  &lt;meta http-equiv=&quot;description&quot; content=&quot;this is my page&quot;&gt;
  &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=gb2312&quot;&gt;

  &lt;!--&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;./styles.css&quot;&gt;--&gt;

  &lt;script type=&quot;text/javascript&quot;&gt;
    function checkAll(str){
     var a = document.getElementsByName(str);
     var n = a.length;    
 
 for(var i=0;i&lt;n;i++){
      a[i].checked = window.event.srcElement.checked;
     }
    }  

function checkItem(str){
     var e = window.event.srcElement;
     var all = eval(&quot;document.f1.&quot;+str);
     if(e.checked){
      var a = document.getElementsByName(e.name);
      all.checked = true;
      for(var i=0;i&lt;a.length;i++){
       if(!a[i].checked){
        all.checked = false;
        break;
       }
      }
     }else{
      all.checked = false;
     }
    }

	function getInfo(){
		var uid='';
		var obj=document.all('mm');
		for(var i=0; i &lt; obj.length; i++){
			 if(obj[i].checked)
					uid +=obj[i].value + ',';
		   }
		alert(uid);
	}
  &lt;/script&gt;
 &lt;/head&gt;

 &lt;body&gt;
  &lt;form name=&quot;f1&quot; id=&quot;f1&quot; action=&quot;&quot; method=&quot;post&quot;&gt;
  
   &lt;input type=&quot;checkbox&quot; value=&quot;e1&quot; name=&quot;mm&quot; onclick=&quot;checkItem('all')&quot;&gt;
   &lt;br /&gt;
   &lt;input type=&quot;checkbox&quot; value=&quot;e2&quot; name=&quot;mm&quot; onclick=&quot;checkItem('all')&quot;&gt;
   &lt;br /&gt;
   &lt;input type=&quot;checkbox&quot; value=&quot;e4&quot; name=&quot;mm&quot; onclick=&quot;checkItem('all')&quot;&gt;
   &lt;br /&gt;
   &lt;input type=&quot;checkbox&quot; value=&quot;e5&quot; name=&quot;mm&quot; onclick=&quot;checkItem('all')&quot;&gt;
   &lt;br /&gt;
   &lt;input type=&quot;checkbox&quot; value=&quot;e6&quot; name=&quot;mm&quot; onclick=&quot;checkItem('all')&quot;&gt;
   &lt;br /&gt;
   &lt;input type=&quot;checkbox&quot; value=&quot;e7&quot; name=&quot;mm&quot; onclick=&quot;checkItem('all')&quot;&gt;
   &lt;br /&gt;
	 &lt;input type=&quot;checkbox&quot; name=&quot;all&quot; onclick=&quot;checkAll('mm')&quot;&gt;
   全选
    &lt;input type=&quot;button&quot; name=&quot;all&quot; value=&quot;测试&quot; onclick=&quot;getInfo()&quot;&gt;
   &lt;br /&gt;
  &lt;/form&gt;
 &lt;/body&gt;
&lt;/html&gt;
 
</pre>&nbsp;
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/154127#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jan 2008 19:37:59 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/154127</link>
        <guid>http://xrb2008.javaeye.com/blog/154127</guid>
      </item>
      <item>
        <title>javascript字符串操作用法</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/154123" style="color:red;">http://xrb2008.javaeye.com/blog/154123</a>&nbsp;
          发表时间: 2008年01月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          与VBscript中的字符串函数相对应，javascript为String对象提供了许多方法，而字符串变量可以不用附加说明就使用这些方法。有几个VB函数在JS中没有对象的方法可实现，但JS中也有一些高级的方法可以更复杂的文本处理工作，这将在以后再介绍。在本文中，我们来完成上文“VBscript 中的字符串函数”中的相同的目标任务。<br /><br />目标任务1  演示子字符串的截取，字符串的截空，子串的定位等。<br /><br />关键字 length, substr, slice, indexOf, toUppertoCase,toLowerCase<br /><br />代码<br /><br />var Mystr, Myword,Mypos, BR;<br />Mystr = "The built-in objects are special because they are built into ASP pages and do not need to be created before you can use them in scripts.";<br />BR = "&lt;p>";<br />document.write( "Mystr=" +"\"" + Mystr + "\"" +BR);<br />document.write("字符串Mystr的长度是" + Mystr.length + BR);<br />document.write("7位左子串是" + Mystr.slice(0,7) +BR);<br />document.write("8位右子串是" + Mystr.slice(136-8) +BR);<br />document.write("从第5位开始的12个字符是" +Mystr.substr(5-1,12)+BR);<br />Myword = " hello ";<br />document.write( Myword);<br />document.write("这个字符串的长度是" + Myword.length +BR);<br />document.write("在javascript中没有截去前导空格或后部空格的方法！" +BR);<br />Myword = "OBJECT";<br />document.write ("The Myword =" + "\""+Myword+"\"");<br />Mypos = Mystr.indexOf(Myword);<br />document.write (BR);<br />if (Mypos==-1)<br />//如果没有找到子字符串，则返回 -1。<br />document.write(Myword +"不是Mystr子串")<br />else<br />document.write(Myword + "是Mystr的子串，第一个开始于" + Mypos);<br />document.write (BR);<br />Myword = Myword.toLowerCase();<br />Mypos =Mystr.indexOf(Myword);<br />if (Mypos==-1)<br />document.write(Myword + "不是Mystr的子串"+BR)<br />else<br />document.write(Myword + "是Mystr的子串，第一个开始位置是" + Mypos);<br /><br />观看代码的运行结果<br /><br />代码注释<br /><br />因为字符串函数是以字符串对象的方法（方法是对象内部的函数）形式出现的，它的一般格式是<br />    字符串变量名.方法名（参数表）<br />取子串不分左中右，有一个统一的方法substr()，其功能是返回一个从指定位置开始的指定长度的子字符串。语法：<br />    stringvar.substr(start [, length ])<br />如果 length 为0或负数，将返回一个空字符串。如果没有指定该参数，则子字符串将延续到最后。<br />要实现VB中的right(stringvar,n)，可用下列语句：<br />    stringvar.substr(stringvar.length - n); <br /><br />javascript还提供了一种slice方法也可以实现上述任务。其功能是返回字符串的片段。语法：<br />    stringObj.slice(start, [end])<br />所不同的是，end表示结束位置而不时长度。如果 end =-1 或省略，就一直提取到结尾。 <br /><br />javascript中没有与截空格函数tirm, Ltirm等对应的方法。 <br /><br />大小写转换方法有toUppertoCase()和toLowerCase()。 <br /><br />对应与Instr()的判断子串的方法是indexOf，语法如下：<br />   strVariable.indexOf(substring, startindex)<br />功能是返回 String 对象内第一次出现子字符串的位置。startindex如果省略，则从字符串的开始处查找。不同之处是如果没有找到子字符串，则返回-1而不是返回0。 <br /><br />另外，还有一个lastIndexOf方法，功能是返回最后一个出现的子字符串位置。在VBscript中也有InstrRev()与之对于。<br /><br /><br />--------------------------------------------------------------------------------<br /><br />目标任务2  演示用spilt函数分割字符串<br /><br />关键字  split<br /><br />代码<br /><br />var Mystr, MyString ,BR, num;<br />Mystr = "The built-in objects are special because they are built into ASP pages and do not need to be created before you can use them in scripts.";<br />BR = "&lt;BR>";<br />MyString = Mystr.split(" ");<br />for (str1 in MyString){<br />document.write ("MyString[" + str1 +"]=");<br />document.write (MyString[str1]+ BR);<br />}<br /><br />代码注释<br /><br />javascript中也有split方法，功能是按照给定的分割符切割字符串，返回一个数组。语法更为简单：<br />    数组 = 字符串名.split(分割符） <br />观看 Sdemo1<br /><br /><br />--------------------------------------------------------------------------------<br /><br />目标任务3  演示字符串逆转函数strReverse<br /><br />在javascript中没有相应的方法逆转字符串。<br /><br />目标任务4  演示字符串的替换和比较<br /><br />关键字 replace<br /><br />代码<br /><br />var oldstr, newstr, textall;<br />oldstr = "Hello";<br />textall= "---Hello World ---";<br />newstr = oldstr.toUpperCase();<br />alert ("原始文本是：\n\r" +textall);<br />alert ("替换后变为：\n\r" + textall.replace(oldstr,newstr));<br /><br />单击按钮上一代码<br /><br />代码注释<br /><br />replace方法在文本中替换子串，语法与VB中一样：<br />        stringObj.replace(待查子串， 替换子串)<br /><br />没有与strcomp(), string()相应的方法。
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/154123#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jan 2008 19:12:06 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/154123</link>
        <guid>http://xrb2008.javaeye.com/blog/154123</guid>
      </item>
      <item>
        <title>my97日期控件3.0.1</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/153663" style="color:red;">http://xrb2008.javaeye.com/blog/153663</a>&nbsp;
          发表时间: 2008年01月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          js日期控件
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/153663#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 07 Jan 2008 14:34:29 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/153663</link>
        <guid>http://xrb2008.javaeye.com/blog/153663</guid>
      </item>
      <item>
        <title>Nutch0.9配置笔记</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/153081" style="color:red;">http://xrb2008.javaeye.com/blog/153081</a>&nbsp;
          发表时间: 2008年01月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          配置环境：Debian 4 (kernel 2.4)<br /><br />配置软件：<br />1,  Java jdk-1.5<br />1,1 下载安装<br />apt-get install sun-java5-jdk<br /><br />1,2 修改环境变量<br />vi /etc/profile<br />在末尾加上<br /><br /><br />QUOTE: <br />JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun-1.5.0.10<br />CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar<br />PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin<br /><br />export PATH<br />export JAVA_HOME<br />export CLASSPATH <br /><br />1,3 测试<br />java -version<br /><br />2,  tomcat-5.5<br />2,1 下载<br />from: http://tomcat.apache.org/<br />wget http://mirror.olnevhost.net/pub/ ... omcat-5.5.23.tar.gz<br /><br />2,2 在/opt目录下解压（顺便哪都行，放到/opt下比较整齐）<br />安装目录：/opt/tomcat5.5<br /><br />2,3 修改配置 <br />vi conf/server.xml<br /><br /><br />QUOTE: <br />  &lt;!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --><br />    &lt;Connector port="8080" maxHttpHeaderSize="8192"<br />            maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />               enableLookups="false" redirectPort="8443" acceptCount="100"<br />               c disableUploadTimeout="true"<br />               URIEncoding="UTF-8" useBodyEncodingForURI="true" />    <br /><br />默认服务端口为8080，若有冲突（如Apache），则可通过此配置文件更改端口（蓝色）<br />如果配置后nutch出现中文乱码问题，则增加编码配置（红色）<br /><br />2,4 启动服务<br />/opt/tomcat5.5/bin/startup.sh<br /><br />2,5 题外话<br />Debian下可通过 apt-get install tomcat5.5 来安装，<br />默认安装后路径为 /usr/share/tomcat5.5<br />并且增加到服务 /etc/init.d/tomcat5.5<br />注意，此时webapps目录并不在安装路径，而在/var/lib/tomcat5.5/webapps/<br />初始时该目录并无内容，所以访问时会出现 http 400 错误的请求，只需在该路径放置web应用就可。<br />（在使用这种方式安装tomcat后，nutch老是没法运行，改成上面的安装就可以，不知是什么问题）<br /><br />3,  nutch-0.9<br />3,1 下载 http://lucene.apache.org/nutch/<br /><br />3,2  解压后，建立目录，建 urls/nutch.txt文件，指定爬取列表<br />mkdir urls<br />vi urls/nutch.txt<br />写入要爬取的网站，这里实验南开bbs<br /><br /><br />QUOTE: <br />http://bbs.nankai.edu.cn <br /><br />3,3  指定爬虫规则<br />vi conf/crawl-urlfilter.txt<br /><br /><br />QUOTE: <br /># accept hosts in MY.DOMAIN.NAME<br />#+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/ <br /><br />把这里改成你要的域名<br />如 +^http://bbs.nankai.edu.cn/<br /><br />如果爬取网站的url含有以下过滤字符，如 ? 和 = ，而你又需要这些访问，可以更改过滤表<br /><br /><br />QUOTE: <br /># skip URLs containing certain characters as probable queries, etc.<br />-[?*!@=] <br /><br />改为<br />-[*!@]<br /><br />3,4 修改 conf/nutch-site.xml<br /><br /><br />QUOTE: <br />&lt;configuration><br />        &lt;property><br />                &lt;name>http.agent.name&lt;/name><br />                &lt;value>HD nutch agent&lt;/value><br />        &lt;/property><br />        &lt;property><br />                &lt;name>http.agent.version&lt;/name><br />                &lt;value>1.0&lt;/value><br />        &lt;/property><br />&lt;/configuration> <br /><br />如果没有配置此agent，爬取时会出现 Agent name not configured! 的错误。<br /><br />3.5 开始爬取<br />可以指定不同的抓去深度，线程数，<br />bin/nutch crawl urls -dir NKBBS -depth 50 -threads 5 -topN 1000<br />爬取索引完成后，结果生成在设定的目录中，这里是NKBBS<br /><br />3,6 部署web前端<br />将 nutch-0.9.war 拷贝到webapps目录下<br />cp nutch-0.9.war /opt/tomcat5.5/webapps/<br />通过浏览器访问 http://localhost:8080/nutch-0.9/ 后，war包自解压。<br /><br />3,7 修改nutch的web配置<br />vi /opt/tomcat5.5/webapps/nutch-0.9/WEB-INF/classes/nutch-site.xml<br />将内容更改为索引生成的目录。<br /><br /><br />QUOTE: <br />&lt;nutch-conf><br />        &lt;property><br />                &lt;name>searcher.dir&lt;/name><br />                &lt;value>/home/northtree/SearchEngine/nutch-0.9/NKBBS/&lt;/value><br />        &lt;/property><br />&lt;/nutch-conf>
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/153081#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jan 2008 13:24:05 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/153081</link>
        <guid>http://xrb2008.javaeye.com/blog/153081</guid>
      </item>
      <item>
        <title>40种网站设计常用技巧 </title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/153013" style="color:red;">http://xrb2008.javaeye.com/blog/153013</a>&nbsp;
          发表时间: 2008年01月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键<br />&lt;table border oncontextmenu=return(false)>&lt;td>no&lt;/table> 可用于Table<br /><br />2. &lt;body onselectstart="return false"> 取消选取、防止复制<br /><br />3. onpaste="return false" 不准粘贴<br /><br />4. oncopy="return false;" oncut="return false;" 防止复制<br /><br />5. &lt;link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标<br /><br />6. &lt;link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标<br /><br />7. &lt;input style="ime-mode:disabled"> 关闭输入法<br /><br />8. 永远都会带着框架<br />&lt;script language="JavaScript">&lt;!--<br />if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页<br />// -->&lt;/script><br /><br />9. 防止被人frame<br />&lt;SCRIPT LANGUAGE=JAVASCRIPT>&lt;!-- <br />if (top.location != self.location)top.location=self.location;<br />// -->&lt;/SCRIPT><br /><br />10. 网页将不能被另存为<br />&lt;noscript>&lt;iframe src="/blog/*.html>";&lt;/iframe>&lt;/noscript> <br /><br />11. &lt;input type=button value=查看网页源代码 <br />onclick="window.location = "view-source:"+ "http://www.williamlong.info""><br /><br />12.删除时确认<br />&lt;a href="javascript:if(confirm("确实要删除吗?"))location="boos.asp?&areyou=删除&page=1"">删除&lt;/a> <br /><br />13. 取得控件的绝对位置<br />//Javascript<br />&lt;script language="Javascript"><br />function getIE(e){<br />var t=e.offsetTop;<br />var l=e.offsetLeft;<br />while(e=e.offsetParent)<br />alert("top="+t+"/nleft="+l);<br />}<br />&lt;/script><br /><br />//VBScript<br />&lt;script language="VBScript">&lt;!--<br />function getIE()<br />dim t,l,a,b<br />set a=document.all.img1<br />t=document.all.img1.offsetTop<br />l=document.all.img1.offsetLeft<br />while a.tagName&lt;>"BODY"<br />set a = a.offsetParent<br />t=t+a.offsetTop<br />l=l+a.offsetLeft<br />wend<br />msgbox "top="&t&chr(13)&"left="&l,64,"得到控件的位置"<br />end function<br />-->&lt;/script><br /><br />14. 光标是停在文本框文字的最后<br />&lt;script language="javascript"><br />function cc()<br />{<br />var e = event.srcElement;<br />var r =e.createTextRange();<br />r.moveStart("character",e.value.length);<br />r.collapse(true);<br />r.select();<br />}<br />&lt;/script><br />&lt;input type=text name=text1 value="123" onfocus="cc()"><br /><br />15. 判断上一页的来源<br />javascript:<br />document.referrer<br /><br /><br /><br />  <br />  shenglijay(探索者) ( ) 信誉：100    Blog  2006-12-20 16:45:02  得分: 0  <br /> <br /> <br />   <br />16. 最小化、最大化、关闭窗口<br />&lt;object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> <br />&lt;param name="Command" value="Minimize">&lt;/object><br />&lt;object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> <br />&lt;param name="Command" value="Maximize">&lt;/object><br />&lt;OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><br />&lt;PARAM NAME="Command" VALUE="Close">&lt;/OBJECT><br />&lt;input type=button value=最小化 onclick=hh1.Click()><br />&lt;input type=button value=最大化 onclick=hh2.Click()><br />&lt;input type=button value=关闭 onclick=hh3.Click()><br />本例适用于IE<br /><br />17.屏蔽功能键Shift,Alt,Ctrl<br />&lt;script><br />function look(){ <br />if(event.shiftKey) <br />alert("禁止按Shift键!"); //可以换成ALT　CTRL<br />} <br />document.onkeydown=look; <br />&lt;/script><br /><br />18. 网页不会被缓存<br />&lt;META HTTP-EQUIV="pragma" CONTENT="no-cache"><br />&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"><br />&lt;META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"><br />或者&lt;META HTTP-EQUIV="expires" CONTENT="0"><br /><br />19.怎样让表单没有凹凸感？<br />&lt;input type=text style="border:1 solid #000000"> <br />或<br />&lt;input type=text style="border-left:none; border-right:none; border-top:none; border-bottom: <br /><br />1 solid #000000">&lt;/textarea><br /><br />20.&lt;div>&lt;span>&&lt;layer>的区别？ <br />&lt;div>(division)用来定义大段的页面元素，会产生转行 <br />&lt;span>用来定义同一行内的元素，跟&lt;div>的唯一区别是不产生转行 <br />&lt;layer>是ns的标记，ie不支持，相当于&lt;div><br /><br />21.让弹出窗口总是在最上面:<br />&lt;body onblur="this.focus();"><br /><br />22.不要滚动条? <br />让竖条没有: <br />&lt;body style="overflow:scroll;overflow-y:hidden"> <br />&lt;/body> <br />让横条没有: <br />&lt;body style="overflow:scroll;overflow-x:hidden"> <br />&lt;/body> <br />两个都去掉？更简单了 <br />&lt;body scroll="no"> <br />&lt;/body> <br /><br />23.怎样去掉图片链接点击后，图片周围的虚线？<br />&lt;a href="#" onFocus="this.blur()">&lt;img src="/blog/logo.jpg" border=0>&lt;/a><br /><br />24.电子邮件处理提交表单<br />&lt;form name="form1" method="post" action="mailto:****@***.com" enctype="text/plain"> <br />&lt;input type=submit><br />&lt;/form><br /><br />25.在打开的子窗口刷新父窗口的代码里如何写？<br />window.opener.location.reload()<br /><br />26.如何设定打开页面的大小<br />&lt;body onload="top.resizeTo(300,200);"><br />打开页面的位置&lt;body onload="top.moveBy(300,200);"><br /><br />27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动 <br />&lt;STYLE> <br />body <br />{background-image:url(/blog/logo.gif); background-repeat:no-repeat; <br />background-position:center;background-attachment: fixed} <br />&lt;/STYLE> <br /><br />28. 检查一段字符串是否全由数字组成<br />&lt;script language="Javascript">&lt;!--<br />function checkNum(str){return str.match(//D/)==null}<br />alert(checkNum("1232142141"))<br />alert(checkNum("123214214a1"))<br />// -->&lt;/script><br /><br />29. 获得一个窗口的大小<br />document.body.clientWidth; document.body.clientHeight<br /><br />30. 怎么判断是否是字符<br />if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");<br />else alert("全是字符");<br /><br />31.TEXTAREA自适应文字行数的多少<br />&lt;textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight"><br />&lt;/textarea><br /><br />32. 日期减去天数等于第二个日期<br />&lt;script language=Javascript><br />function cc(dd,dadd)<br />{<br />//可以加上错误处理<br />var a = new Date(dd)<br />a = a.valueOf()<br />a = a - dadd * 24 * 60 * 60 * 1000<br />a = new Date(a)<br />alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")<br />}<br />cc("12/23/2002",2)<br />&lt;/script><br /><br />33. 选择了哪一个Radio<br />&lt;HTML>&lt;script language="vbscript"><br />function checkme()<br />for each ob in radio1<br />if ob.checked then window.alert ob.value<br />next<br />end function<br />&lt;/script>&lt;BODY><br />&lt;INPUT name="radio1" type="radio" value="style" checked>Style<br />&lt;INPUT name="radio1" type="radio" value="barcode">Barcode<br />&lt;INPUT type="button" value="check" onclick="checkme()"><br />&lt;/BODY>&lt;/HTML><br /><br />34.脚本永不出错<br />&lt;SCRIPT LANGUAGE="JavaScript"> <br />&lt;!-- Hide <br />function killErrors() { <br />return true; <br />} <br />window.onerror = killErrors; <br />// --> <br />&lt;/SCRIPT><br /><br />35.ENTER键可以让光标移到下一个输入框<br />&lt;input onkeydown="if(event.keyCode==13)event.keyCode=9"><br /><br /><br /><br />  <br /> <br />Top  <br /> shenglijay(探索者) ( ) 信誉：100    Blog  2006-12-20 16:45:14  得分: 0  <br /> <br /> <br />   <br />36. 检测某个网站的链接速度：<br />把如下代码加入&lt;body>区域中:<br />&lt;script language=Javascript><br />tim=1<br />setInterval("tim++",100)<br />b=1<br />var autourl=new Array()<br />autourl[1]="www.njcatv.net"<br />autourl[2]="javacool.3322.net"<br />autourl[3]="www.sina.com.cn"<br />autourl[4]="www.nuaa.edu.cn"<br />autourl[5]="www.cctv.com"<br />function butt(){<br />document.write("&lt;form name=autof>")<br />for(var i=1;i&lt;autourl.length;i++)<br />document.write("&lt;input type=text name=txt"+i+" size=10 value="/blog/测试中......>" =》&lt;input type=text <br />name=url"+i+" size=40> =》&lt;input type=button value=GO <br /><br />onclick=window.open(this.form.url"+i+".value)>&lt;br/>")<br />document.write("&lt;input type=submit value=刷新>&lt;/form>")<br />}<br />butt()<br />function auto(url)<br />else<br /><br />b++<br />}<br />function run(){for(var i=1;i&lt;autourl.length;i++)document.write("&lt;img src=http://"+autourl+"/"+Math.random()+" width=1 height=1 <br /><br />onerror=auto("http://"+autourl+"")>")}<br />run()&lt;/script><br /><br />37. 各种样式的光标<br />auto ：标准光标<br />default ：标准箭头<br />hand ：手形光标<br />wait ：等待光标<br />text ：I形光标<br />vertical-text ：水平I形光标<br />no-drop ：不可拖动光标<br />not-allowed ：无效光标<br />help ：?帮助光标<br />all-scroll ：三角方向标<br />move ：移动标<br />crosshair ：十字标<br />e-resize<br />n-resize<br />nw-resize<br />w-resize<br />s-resize<br />se-resize<br />sw-resize<br /><br />38.页面进入和退出的特效<br />进入页面&lt;meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)"><br />推出页面&lt;meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">  <br />这个是页面被载入和调出时的一些特效。duration表示特效的持续时间，以秒为单位。transition表示使用哪种特效，取值为1-23:<br />　　0 矩形缩小 <br />　　1 矩形扩大 <br />　　2 圆形缩小<br />　　3 圆形扩大 <br />　　4 下到上刷新 <br />　　5 上到下刷新<br />　　6 左到右刷新 <br />　　7 右到左刷新 <br />　　8 竖百叶窗<br />　　9 横百叶窗 <br />　　10 错位横百叶窗 <br />　　11 错位竖百叶窗<br />　　12 点扩散 <br />　　13 左右到中间刷新 <br />　　14 中间到左右刷新<br />　　15 中间到上下<br />　　16 上下到中间 <br />　　17 右下到左上<br />　　18 右上到左下 <br />　　19 左上到右下 <br />　　20 左下到右上<br />　　21 横条 <br />　　22 竖条 <br />　　23 以上22种随机选择一种<br /><br />39.在规定时间内跳转<br />&lt;META http-equiv=V="REFRESH" content="5;URL=http://www.williamlong.info"> <br /><br />40.网页是否被检索<br />&lt;meta name="ROBOTS" content="属性值"><br />　　其中属性值有以下一些:<br />　　属性值为"all": 文件将被检索，且页上链接可被查询；<br />　　属性值为"none": 文件不被检索，而且不查询页上的链接；<br />　　属性值为"index": 文件将被检索；<br />　　属性值为"follow": 查询页上的链接；<br />　　属性值为"noindex": 文件不检索，但可被查询链接；<br />　　属性值为"nofollow": 文件不被检索，但可查询页上的链接。<br /><br />最大化窗口？<br />&lt;script language="JavaScript"><br />&lt;!--<br />self.moveTo(0,0)<br />self.resizeTo(screen.availWidth,screen.availHeight)<br />//--><br />&lt;/script><br /><br /> <br /><br /><br />解决问题：由于层与下拉框之间的优先级是：下拉框 > 层，因此在显示的时候，会因为优先级的次序而会出现如上问题。（如果几个元素都是层的话，我们可以通过层的 z-index 属性来设置）解决办法就是：给层中放一个优先级比下拉框更高的元素（iframe），从而解决此问题！具体解决代码如下：<br /><br />&lt;div id="menu" style="position:absolute; visibility:hidden; top:20px; left:20px; width:100px; height:200px; background-color:#6699cc;"><br />&lt;table><br />  &lt;tr>&lt;td>item 1&lt;/td>&lt;/tr><br />  &lt;tr>&lt;td>item 2&lt;/td>&lt;/tr><br />  &lt;tr>&lt;td>item 3&lt;/td>&lt;/tr><br />  &lt;tr>&lt;td>item 4&lt;/td>&lt;/tr><br />  &lt;tr>&lt;td>item 5&lt;/td>&lt;/tr><br />  &lt;/table><br />  &lt;iframe src="/blog/javascript:false" style="position:absolute; visibility:inherit; top:0px; left:0px; width:100px; height:200px; z-index:-1; filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';">&lt;/iframe><br />&lt;/div><br /><br />&lt;a href="#" onclick="document.getElementById('menu').style.visibility='visible'">menu&lt;/a><br /><br />&lt;form><br />  &lt;select>&lt;option>A form selection list&lt;/option>&lt;/select><br />&lt;/form><br /><br />输入框也可以做的很漂亮了<br />&lt;div align="center">&lt;input type="hidden" name="hao" value="yes"><br />              外向数：&lt;input <br />      name=answer <br />      style="color: rgb(255,0,0); border-left: medium none; border-right: medium none; border-top: medium none; border-bottom: 1px solid rgb(192,192,192)"><br />            　没回答的题数：&lt;input <br />      name=unanswer id="unanswer" <br />      style="color: rgb(255,0,0); border-left: medium none; border-right: medium none; border-top: medium none; border-bottom: 1px solid rgb(192,192,192)"><br />            &lt;br/><br />            总得分:<br />            &lt;input <br />      name=score id="score" <br />      style="color: rgb(255,0,0); border-left: medium none; border-right: medium none; border-top: medium none; border-bottom: 1px solid rgb(192,192,192)"><br />            　结　　　　论:<br />            &lt;input <br />      name=xgjg id="xgjg" <br />      style="color: rgb(255,0,0); border-left: medium none; border-right: medium none; border-top: medium none; border-bottom: 1px solid rgb(192,192,192)"><br />            &lt;br/><br />            &lt;br/> <br />            <br />            &lt;input onClick=processForm(this.form) style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt" type=button value=查看结果 name="button"> <br />             &lt;input type="reset" name="Submit" value="重做"><br />            &lt;/div><br />注意：修改&lt;body>为&lt;body onload="max.Click()">即为打开最大<br /><br />化窗口，而如果改为&lt;body onload="min.Click()">就变为窗口一打开就最小化<br /><br />&lt;object id="min" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><br />            &lt;param name="Command" value="Minimize"><br />          &lt;/object> &lt;object id="max" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><br />            &lt;param name="Command" value="Maximize"><br />          &lt;/object><br />&lt;/body><br /><br />页面自动刷新（说明）<br /><br />当你做网页时，是不是有的时候想让你的网页自动不停刷新，或者过一段时间自动跳转到另外一个你自己设定的页面？其实实现这个效果非常地简单，而且这个效果甚至不能称之为特效。你只要把如下代码加入你的网页中就可以了。<br /><br />1，页面自动刷新：把如下代码加入&lt;head>区域中&lt;meta http-equiv="refresh" content="20">,其中20指每隔20秒刷新一次页面.<br /><br />2，页面自动跳转：把如下代码加入&lt;head>区域中&lt;meta http-equiv="refresh" content="20;url=http://www.williamlong.info">,其中20指隔20秒后跳转到http://www.williamlong.info页面。 <br /><br />页面自动关闭<br /><br />5000是指时间&lt;body onLoad="setTimeout(window.close, 5000)"> <br /><br />弹出窗口自动关闭 <br /><br />10秒后弹出窗口自动关闭<br /><br />注意：在新的tan.htm的body中要加 &lt;onLoad="closeit()"><br />head<br /><br />&lt;script language="JavaScript"><br /><br />&lt;!--<br /><br />var gt = unescape('%3e');<br /><br />var popup = null;<br /><br />var over = "Launch Pop-up Navigator";<br /><br />popup = window.open('', 'popupnav', 'width=225,height=235,resizable=1,scrollbars=auto');<br /><br />if (popup != null) {<br /><br />if (popup.opener == null) {<br /><br />popup.opener = self; <br /><br />}<br /><br />popup.location.href = 'tan.htm';<br /><br />}<br /><br />// --><br /><br />&lt;/script><br />&lt;body>注意：这段代码是在新建文件中的<br />&lt;script language="JavaScript"><br /><br /> function closeit() <br /><br /> &lt;/script><br /><br />这个可不是&lt;iframe>(引用）呀。是直接调用的。以下代码加入&lt;body>区域<br /><br />&lt;object type="text/x-scriptlet" width="800"  height="1000" data="../index.htm"><br />&lt;/object>
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/153013#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jan 2008 09:54:41 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/153013</link>
        <guid>http://xrb2008.javaeye.com/blog/153013</guid>
      </item>
      <item>
        <title>用javascript屏蔽功能键</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/153008" style="color:red;">http://xrb2008.javaeye.com/blog/153008</a>&nbsp;
          发表时间: 2008年01月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.屏蔽功能类<br /><br />1.1 屏蔽键盘所有键<br />&lt;script language="javascript"><br />&lt;!--<br />function document.onkeydown(){<br />event.keyCode = 0;<br />event.returnvalue = false;<br />}<br />--><br />&lt;/script><br /><br />1.2 屏蔽鼠标右键<br /><br />在body标签里加上oncontextmenu=self.event.returnvalue=false<br /><br />或者<br /><br />&lt;script language="javascript"><br />&lt;!--<br />function document.oncontextmenu() <br />{ <br />return false; <br />} <br />--><br />&lt;/script><br /><br />function nocontextmenu()<br />{ <br />if(document.all) {<br />event.cancelBubble=true;<br />event.returnvalue=false; <br />return false; <br />}<br />}<br /><br />或者<br /><br />&lt;body onmousedown="rclick()" oncontextmenu= "nocontextmenu()"><br /><br />&lt;script language="javascript"><br />&lt;!--<br />function rclick()<br />{<br />if(document.all) {<br />if (event.button == 2){<br />event.returnvalue=false;<br />}<br />}<br />}<br />--><br />&lt;/script><br /><br /><br />1.3 屏蔽 Ctrl+N、Shift+F10、F5刷新、退格键<br /><br />&lt;script language="javascript"><br />&lt;!--<br />//屏蔽鼠标右键、Ctrl+N、Shift+F10、F5刷新、退格键<br />function window.onhelp(){return false} //屏蔽F1帮助<br />function KeyDown(){<br />if ((window.event.altKey)&&<br />((window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ←<br />(window.event.keyCode==39))){ //屏蔽 Alt+ 方向键 →<br />alert("不准你使用ALT+方向键前进或后退网页！");<br />event.returnvalue=false;<br />}<br /><br />/* 注：这还不是真正地屏蔽 Alt+ 方向键，<br />因为 Alt+ 方向键弹出警告框时，按住 Alt 键不放，<br />用鼠标点掉警告框，这种屏蔽方法就失效了。以后若<br />有哪位高手有真正屏蔽 Alt 键的方法，请告知。*/<br /><br />if ((event.keyCode ==<img src="/images/smiles/icon_cool.gif"/>&& <br />(event.srcElement.type != "text" && <br />event.srcElement.type != "textarea" && <br />event.srcElement.type != "password") || //屏蔽退格删除键 <br />(event.keyCode ==116)|| //屏蔽 F5 刷新键<br />(event.ctrlKey && event.keyCode==82)){ //Ctrl + R<br />event.keyCode=0;<br />event.returnvalue=false;<br />}<br />if ((event.ctrlKey)&&(event.keyCode==78)) //屏蔽 Ctrl+n<br />event.returnvalue=false;<br />if ((event.shiftKey)&&(event.keyCode==121)) //屏蔽 shift+F10<br />event.returnvalue=false;<br />if (window.event.srcElement.tagName == "A" && window.event.shiftKey) <br />window.event.returnvalue = false; //屏蔽 shift 加鼠标左键新开一网页<br />if ((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4<br />window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");<br />return false;}<br />}<br />/* 另外可以用 window.open 的方法屏蔽 IE 的所有菜单<br />第一种方法：<br />window.open("你的.htm", "","toolbar=no,location=no,directories= no,menubar=no,scrollbars=no,resizable=yes,status=no,top=0,left=0")<br />第二种方法是打开一个全屏的页面：<br />window.open("你的.asp", "", "fullscreen=yes")<br />*/<br />//--><br />&lt;/script><br /><br />1.4屏蔽浏览器右上角“最小化”“最大化”“关闭”键<br /><br />&lt;script language=javascript><br />function window.onbeforeunload()<br />{<br />if(event.clientX>document.body.clientWidth&&event.clientY&lt;0||event.altKey)<br />{<br />window.event.returnvalue = "";<br />}<br />}<br />&lt;/script><br /><br />或者使用全屏打开页面<br /><br />&lt;script language="javascript"><br />&lt;!--<br />window.open(www.32pic.com,"32pic","fullscreen=3,height=100, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no");<br />--><br />&lt;/script><br /><br />注：在body标签里加上onbeforeunload="javascript:return false"（使不能关闭窗口）<br /><br />1.5屏蔽F5键<br /><br />&lt;script language="javascript"><br />&lt;!--<br />function document.onkeydown() <br />{ <br />if ( event.keyCode==116) <br />{ <br />event.keyCode = 0; <br />event.cancelBubble = true; <br />return false; <br />}<br />}<br />--><br />&lt;/script><br /><br />1.6屏蔽IE后退按钮<br /><br />在你链接的时候用 &lt;a href="javascript:location.replace(url)"><br /><br />1.7屏蔽主窗口滚动条<br /><br />在body标签里加上 style="overflow-y:hidden"<br /><br />1.8 屏蔽拷屏,不断地清空剪贴板<br /><br />在body标签里加上onload="setInterval('clipboardData.setData(\'Text\',\'\')',100)"<br /><br />1.9 屏蔽网站的打印功能<br /><br />&lt;style><br />@media print {<br />* { display: none }<br />}<br />&lt;/style><br /><br />1.10 屏蔽IE6.0 图片上自动出现的保存图标<br /><br />方法一：<br />&lt;META HTTP-EQUIV="imagetoolbar" CONTENT="no"><br />方法二：<br />&lt;img galleryimg="no"><br /><br />1.11 屏蔽页中所有的script<br /><br />&lt;noscrript>&lt;/noscript><br /><br /><br />2.表单提交验证类<br /><br /><br />2.1 表单项不能为空<br /><br />&lt;script language="javascript"><br />&lt;!--<br />function CheckForm()<br />{<br />if (document.form.name.value.length == 0) {<br />alert("请输入您姓名!");<br />document.form.name.focus();<br />return false;<br />}<br />return true;<br />}<br />--><br />&lt;/script><br /><br />2.2 比较两个表单项的值是否相同<br /><br />&lt;script language="javascript"><br />&lt;!--<br />function CheckForm()<br />if (document.form.PWD.value != document.form.PWD_Again.value) {<br />alert("您两次输入的密码不一样！请重新输入.");<br />document.ADDUser.PWD.focus();<br />return false;<br />}<br />return true;<br />}<br />--><br />&lt;/script><br /><br />2.3 表单项只能为数字和"_",用于电话/银行帐号验证上,可扩展到域名注册等<br /><br />&lt;script language="javascript"><br />&lt;!--<br />function isNumber(String)<br />{ <br />var Letters = "1234567890-"; //可以自己增加可输入值<br />var i;<br />var c;<br />if(String.charAt( 0 )=='-')<br />return false;<br />if( String.charAt( String.length - 1 ) == '-' )<br />return false;<br />for( i = 0; i &lt; String.length; i ++ )<br />{<br />c = String.charAt( i );<br />if (Letters.indexOf( c ) &lt; 0)<br />return false;<br />}<br />return true;<br />}<br />function CheckForm()<br />{<br />if(! isNumber(document.form.TEL.value)) {<br />alert("您的电话号码不合法！");<br />document.form.TEL.focus();<br />return false;<br />}<br />return true;<br />}<br />--><br />&lt;/script><br /><br /><br />2.4 表单项输入数值/长度限定<br /><br />&lt;script language="javascript"><br />&lt;!--<br />function CheckForm() <br />{<br />if (document.form.count.value > 100 || document.form.count.value &lt; 1)<br />{<br />alert("输入数值不能小于零大于100!");<br />document.form.count.focus();<br />return false;<br />}<br />if (document.form.MESSAGE.value.length&lt;10)<br />{<br />alert("输入文字小于10!");<br />document.form.MESSAGE.focus();<br />return false;<br />}<br />return true;<br />}<br />//--><br />&lt;/script><br /><br />2.5 中文/英文/数字/邮件地址合法性判断<br /><br />&lt;SCRIPT LANGUAGE="javascript"><br />&lt;!--<br /><br />function isEnglish(name) //英文值检测<br />{<br />if(name.length == 0)<br />return false;<br />for(i = 0; i &lt; name.length; i++) {<br />if(name.charCodeAt(i) > 128)<br />return false;<br />}<br />return true;<br />}<br /><br />function isChinese(name) //中文值检测<br />{<br />if(name.length == 0)<br />return false;<br />for(i = 0; i &lt; name.length; i++) {<br />if(name.charCodeAt(i) > 128)<br />return true;<br />}<br />return false;<br />}<br /><br />function isMail(name) // E-mail值检测<br />{<br />if(! isEnglish(name))<br />return false;<br />i = name.indexOf("@");<br />j = name.lastIndexOf("@");<br />if(i == -1)<br />return false;<br />if(i != j)<br />return false;<br />if(i == name.length)<br />return false;<br />return true;<br />}<br /><br />function isNumber(name) //数值检测<br />{<br />if(name.length == 0)<br />return false;<br />for(i = 0; i &lt; name.length; i++) {<br />if(name.charAt(i) &lt; "0" || name.charAt(i) > "9")<br />return false;<br />}<br />return true;<br />}<br /><br />function CheckForm()<br />{<br />if(! isMail(form.Email.value)) {<br />alert("您的电子邮件不合法！");<br />form.Email.focus();<br />return false;<br />}<br />if(! isEnglish(form.name.value)) {<br />alert("英文名不合法！");<br />form.name.focus();<br />return false;<br />}<br />if(! isChinese(form.cnname.value)) {<br />alert("中文名不合法！");<br />form.cnname.focus();<br />return false;<br />}<br />if(! isNumber(form.PublicZipCode.value)) {<br />alert("邮政编码不合法！");<br />form.PublicZipCode.focus();<br />return false;<br />}<br />return true;<br />}<br />//--><br />&lt;/SCRIPT><br /><br />2.6 限定表单项不能输入的字符<br /><br />&lt;script language="javascript"><br />&lt;!--<br /><br />function contain(str,charset)// 字符串包含测试函数<br />{<br />var i;<br />for(i=0;i&lt;charset.length;i++)<br />if(str.indexOf(charset.charAt(i))>=0)<br />return true;<br />return false;<br />}<br /><br />function CheckForm()<br />{<br />if ((contain(document.form.NAME.value, "%\(\)>&lt;")) || (contain(document.form.MESSAGE.value, "%\(\)>&lt;")))<br />{<br />alert("输入了非法字符");<br />document.form.NAME.focus();<br />return false;<br />}<br />return true;<br />}<br />//--><br />&lt;/script>
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/153008#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jan 2008 09:46:41 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/153008</link>
        <guid>http://xrb2008.javaeye.com/blog/153008</guid>
      </item>
      <item>
        <title>Struts中Validator验证框架的使用 </title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/153007" style="color:red;">http://xrb2008.javaeye.com/blog/153007</a>&nbsp;
          发表时间: 2008年01月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          费时Ｎ天，查了Ｎ多资料，终于搞定了．<br /><br /> struts中的validator验证，是实现表单的服务器端验证或者客户端验证的．具体应用：<br /><br />１．首先搭起struts框架，我是用myeclipse自带的插件生成的．（或者其他方法．．）<br /><br />２．建完之后，如果没有validation.xml和validator-rules.xml这两个文件，请自己加到webinf中．网上去搜一下．<br /><br />３．在struts-config.xml中加上<br /><br />&lt;plug-in className="org.apache.struts.validator.ValidatorPlugIn"><br />    &lt;set-property property="pathnames"<br />                   value="/WEB-INF/conf/validator-rules.xml,<br />                           /WEB-INF/conf/validation.xml"/><br /><br /> &lt;/plug-in><br /><br />4.建立jsp页面，from ,和action<br /><br />要使用Struts的Validator框架进行自动校验的Form Bean不能继承自普通的ActionForm,必须继承自ValidatorForm或者ValidatorActionForm.<br /><br />ValidatorForm根据struts-config.xml文件中的action的name属性为当前form的调用相应的验证器，因此在validator-rules.xml中的&lt;form-bean>元素的名称属性(name)应该与&lt;action>的name属性值相匹配。<br /><br />ValidatorActionForm使用struts-config.xml中action的path属性，所以path属性的值相应的应该与validator.xml中的Form的name属性匹配。 <br />Struts-config.xml文件的配置<br /><br />要使用Validator框架的自动校验机制,还必须在Struts-config.xml文件中作相应的配置.除了前面已经说明了的配置Validator Plugin意外,还需要对需要校验的form的action进行配置.主要有两个地方需要配置,一个是&lt;action>的input属性,一个是&lt;action>的validate属性.input属性必须指定包含校验Form的jsp页面的路径,以便Struts的校验框架校验失败的时候可以重新导向到原来的页面让用户重新输入.validator属性是一个boolean类型的属性,必须设置为true struts才会启动自动校验机制. <br /><br />5.在struts-config.xml里把自己的ActionForm进行配置<br /><br />    &lt;form-bean      name="testForm"<br />        type="org.apache.struts.validator.DynaValidatorForm"><br />       &lt;form-property name="username" type="java.lang.String"/> <br />       &lt;form-property name="userpass" type="java.lang.String"/> <br />           &lt;/form-bean><br />主要就是表单字段<br /><br />6.在validator.xml中配置<br /><br />&lt;formset><br /><br />           &lt;form name="loginForm"> <br /><br />            &lt;field<br /><br />                property="username"<br /><br />                depends="required"><br /><br />                    &lt;arg key="login.user"/><br />                   <br />         <br />            &lt;/field><br /><br />     <br />        &lt;field property="userpass"<br />               depends="required,maxlength"><br />          &lt;arg0 key="prompt.password" /><br />          &lt;arg1 key="${var:maxlength}" name="maxlength"<br />                resource="false" /><br />          &lt;var><br />            &lt;var-name>maxlength&lt;/var-name><br />            &lt;var-value>8&lt;/var-value><br />          &lt;/var><br />        &lt;/field><br /><br />        &lt;/form><br /><br />  &lt;/formset><br />这只是针对两个字段，多的话自己手工加上去，相应的 depends="required,maxlength"规则都在validator_rules.xml中.<br /><br />另外出错信息，你要加到ApplicationResources.properties文件中<br /><br />6.然后在jsp页面中接到form中抛出的异常<br /><br />&lt;html> <br /> &lt;head><br />  &lt;title>JSP for loginForm form&lt;/title><br /> &lt;/head><br /> <br /> &lt;body><br /> &lt;html:errors/>－－－－显示错误<br />  &lt;html:form action="/login.do" ＞<br />   username : &lt;html:text property="username"/>&lt;br/><br />   userpass : &lt;html:text property="userpass"/>&lt;br/><br />   &lt;html:submit/>&lt;html:cancel/><br />  &lt;/html:form><br />  &lt;/body><br />&lt;/html><br />这样的验证是服务器端验证，想实现javascript验证，即弹出对话框形式<br /><br /> 最后加上&lt;html:javascript formName="loginForm" staticJavascript="true"/><br /><br />加上： &lt;html:form action="/login.do" onsubmit="return validateLoginForm(this);"><br />．
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/153007#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jan 2008 09:45:34 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/153007</link>
        <guid>http://xrb2008.javaeye.com/blog/153007</guid>
      </item>
      <item>
        <title>Eclipse中创建hibernate过程中的主键映射 </title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/153006" style="color:red;">http://xrb2008.javaeye.com/blog/153006</a>&nbsp;
          发表时间: 2008年01月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          hibernate中.hbm.xml 中ID的产生<br />ID的产生<br />&lt;generator class="assigned"/><br /> <br />Hibernate提供了很多内置的实现。下面是一些内置生成器的快捷名字： <br />increment（递增） <br />用于为long, short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。 <br /><br />identity <br />对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。返回的标识符是long, short 或者int类型的。 <br /><br />sequence （序列） <br />在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列（sequence)，而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。 <br /><br />hilo （高低位） <br />使用一个高/低位算法来高效的生成long, short或者 int类型的标识符。给定一个表和字段（默认分别是是hibernate_unique_key 和next_hi）作为高位值得来源。高/低位算法生成的标识符只在一个特定的数据库中是唯一的。在使用JTA获得的连接或者用户自行提供的连接中，不要使用这种生成器。 <br /><br />seqhilo（使用序列的高低位） <br />使用一个高/低位算法来高效的生成long, short或者 int类型的标识符，给定一个数据库序列（sequence)的名字。 <br /><br />uuid.hex <br />用一个128-bit的UUID算法生成字符串类型的标识符。在一个网络中唯一（使用了IP地址）。UUID被编码为一个32位16进制数字的字符串。 <br /><br />uuid.string <br />使用同样的UUID算法。UUID被编码为一个16个字符长的任意ASCII字符组成的字符串。不能使用在PostgreSQL数据库中 <br /><br />native（本地） <br />根据底层数据库的能力选择identity, sequence 或者hilo中的一个。 <br /><br />assigned（程序设置） <br />让应用程序在save()之前为对象分配一个标示符。 <br /><br />foreign（外部引用） <br />使用另外一个相关联的对象的标识符。和&lt;one-to-one>联合一起使用。 <br /><br />通常来说表映射的主键都是自增长的.即一般会选identity .当然也有复合主键什么的.
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/153006#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jan 2008 09:44:37 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/153006</link>
        <guid>http://xrb2008.javaeye.com/blog/153006</guid>
      </item>
      <item>
        <title>getHibernateTemplate()中获取hibernateSession方法</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/152836" style="color:red;">http://xrb2008.javaeye.com/blog/152836</a>&nbsp;
          发表时间: 2008年01月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">方法如下：</pre><pre name="code" class="java">public List getList(){   
        return (List ) getHibernateTemplate().execute(   
                new HibernateCallback() {   
                    public List doInHibernate(final Session s)   
                            throws HibernateException, SQLException {   
  
StringBuffer sb = new StringBuffer();   
Query query = s.createSQLQuery(sb.toString());//&lt;STRONG&gt;执行普通sql&lt;/STRONG&gt;   
Query query = s.createQuery(sb.toString());//   &lt;STRONG&gt;执行hql &lt;/STRONG&gt;   
List list = query.list();   
return list ;   
                    }   
                });            
    }  
</pre>&nbsp;自己获取session处理。 <br />获取session的两种方式:this.getSession();和this.getHibernateTemplate().getSessionFactory().openSession(); <br />获取session以后再createQuery操作就一样了。但是这种做法，是需要自己去手动关闭session的。所以你需要配置openSessioninview
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/152836#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Jan 2008 15:45:01 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/152836</link>
        <guid>http://xrb2008.javaeye.com/blog/152836</guid>
      </item>
      <item>
        <title>java.io.EOFException解决</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/152834" style="color:red;">http://xrb2008.javaeye.com/blog/152834</a>&nbsp;
          发表时间: 2008年01月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Tomcat：<br />IOException while loading persisted sessions: java.io.EOFException解决<br /><br />严重: IOException while loading persisted sessions: java.io.EOFException<br />严重: Exception loading sessions from persistent storage<br /><br />原因是tomcat对硬盘的session读取失败，彻底解决办法一下：将work下面的文件清空，主要是*.ser文件，或者只是删除掉session.ser即可以解决。
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/152834#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Jan 2008 15:38:32 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/152834</link>
        <guid>http://xrb2008.javaeye.com/blog/152834</guid>
      </item>
      <item>
        <title>请教hibernate多表查询分页的问题！</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/146697" style="color:red;">http://xrb2008.javaeye.com/blog/146697</a>&nbsp;
          发表时间: 2007年12月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          现在我的问题是，我有A,B,C,D四张表。<br />四个表的结构都是一样的。现在我需要根据用户输入的关键字进行多表查询。并分页。<br />我用的sql语句为：from A where key=&a union from b where key=&a大概这样。<br /><br />然后用query q=session.createQuery(sql);<br />         q.setFirstResult((curPage-1) * this.rowsPerPage);<br />    	q.setMaxResults(this.rowsPerPage);<br /><br />这样只能查出9条记录。而且我看控制台打出的sql语句只查了一个表的。我每页定的是10条。但结果应该是14条。<br />我想问一下，我sql语句肯定写的不对。哪位做过。麻烦告诉一下，谢了。
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/146697#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 07 Dec 2007 15:47:46 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/146697</link>
        <guid>http://xrb2008.javaeye.com/blog/146697</guid>
      </item>
      <item>
        <title>DWR（表查询显示）</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/143995" style="color:red;">http://xrb2008.javaeye.com/blog/143995</a>&nbsp;
          发表时间: 2007年11月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>弄了几天DWR，终于大概摸到点头绪。现将我用DWR做出来的对数据库表的查询显示代码与大家分享。</p><p>功能比较简单，就是对一个表的查询显示。</p><p>开发工具：myeclipse+tomcat+sqlserver.（其实什么开发工具没区别）</p><p>针对对象：DWR初学者</p><p>下面是代码：</p><p>1/ web.xml配置</p><div class="code_title"><div class="code_title"><span><span><span></span></span></span></div></div><span><span><div class="code_title">java 代码</div><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span>&nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;dwr-invoker &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;<span class="keyword">class</span><span>&gt;org.directwebremoting.servlet.DwrServlet<span class="keyword">class</span><span>&gt; &nbsp;&nbsp;</span> </span></span></li><li><span>&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;dwr-invoker &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;/dwr/* &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;</span> </li></ol></div><p>这个比较简单，需要将DWR在web.xml声明下，便于程序启动时加载。</p><p>2/ dwr.xml配置</p><div class="code_title"><span><span><span><strong><span style="font-family: Arial"><span style="font-family: Arial"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <div class="code_title">java 代码</div><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span>&lt;allow&gt; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;create&nbsp;javascript=</span><span class="string">&quot;show&quot;</span><span>&nbsp;creator=</span><span class="string">&quot;new&quot;</span><span>&gt; &nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;param&nbsp;name=</span><span class="string">&quot;class&quot;</span><span>&nbsp;value=</span><span class="string">&quot;com.ice.test.AjaxShow&quot;</span><span>&gt;&lt;/param&gt; &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&lt;/create&gt; &nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&lt;convert&nbsp;match=</span><span class="string">&quot;com.ice.test.EntityBean&quot;</span><span>&nbsp;converter=</span><span class="string">&quot;bean&quot;</span><span>&gt;&lt;/convert&gt; &nbsp;&nbsp;</span></li><li><span>&nbsp;&lt;/allow&gt;&nbsp;&nbsp;</span></li></ol></div><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; </span></span></strong></span></span></span></div><span><span><span><p>&quot;show&quot; 是针对下面的class类自动生成的JS文件名。这个可以自己随便定义。class类引入你要调用的类。</p><p><strong>&ldquo;convert match ='.......'&nbsp; &rdquo;</strong>这块是声明你上面类中用到的javabean。这样写，主要是考虑到在页面中取数据方便。</p><p>3/ AjaxShow类</p><div class="code_title">java 代码</div><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;AjaxShow&nbsp;{ &nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;List&nbsp;showInfo(){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dboper&nbsp;db=</span><span class="keyword">new</span><span>&nbsp;Dboper(); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;db.selectDate(); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li><span>} &nbsp;&nbsp;</span> </li></ol></div>这块比较简单，就是查询数据库，将数据封装到list中返回。并且list中的数据是封装在一个javabean中的。 <div class="code_title">java 代码</div><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt&nbsp;=&nbsp;conn.createStatement(); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs&nbsp;=&nbsp;stmt.executeQuery(sql); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>&nbsp;(rs.next())&nbsp;{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EntityBean&nbsp;bean&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;EntityBean(); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bean.setId(rs.getInt(</span><span class="number">1</span><span>)&nbsp;+&nbsp;</span><span class="string">&quot;&quot;</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bean.setTitle(rs.getString(</span><span class="number">2</span><span>)); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(bean); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block </span><span>&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </li></ol></div><p>好了，现在后台已经写完。就是返回一个list.</p><p>看下前台页面。</p><p>4/show.jsp</p><p><span style="font-family: Arial"><br />&nbsp; <br />&nbsp; <!-- 加载JS文件，其中engine.js是DWR自带的，show.js是程序自动生成的，与dwr.xml文件相对应 --><br />&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;<br />&nbsp;<!-- 页面启动时加载init()函数 --><br />&nbsp;&nbsp; <table id="table1" border="0"><!-- 表格一共就两列，id和书名 --><tbody><tr><td>bookId</td><td>bookName</td></tr></tbody></table><br />&nbsp;<br />&nbsp;</span></p><div class="code_title"><span><span>好了，到这运行下应该没问题了。详写附件中程序 。。。</span></span></div></span></span></span></span></span>
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/143995#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 27 Nov 2007 15:46:10 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/143995</link>
        <guid>http://xrb2008.javaeye.com/blog/143995</guid>
      </item>
      <item>
        <title>DWR简介</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/143596" style="color:red;">http://xrb2008.javaeye.com/blog/143596</a>&nbsp;
          发表时间: 2007年11月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p style="TEXT-INDENT: 20pt"><span>DWR</span><span>（</span><span>Direct Web Remoting</span><span>）是一个开源的类库，可以帮助开发人员开发包含</span><span>Ajax</span><span>技术的网站。它可以允许在浏览器里的代码使用运行在</span><span>Web</span><span>服务器上的</span><span>Java</span><span>函数，就像</span></p>
<p><span style="FONT-SIZE: 10pt"><br clear="all" style="PAGE-BREAK-BEFORE: always" />
</span></p>
<p style="TEXT-INDENT: 20pt"><span>它在浏览器里一样。</span><span>DWR</span><span>包含两个主要的部分，其一是运行在浏览器客户端的</span><span>Javascript</span><span>，这部分被用来与服务器通信，并更新页面内容；其二是运行在服务器端的</span><span>Java Servlet</span><span>，这部分被用来处理请求并将响应结果发送给浏览器。</span></p>
<p style="TEXT-INDENT: 20pt"><span>DWR</span><span>采取了一种动态生成基于</span><span>Java</span><span>类的</span><span>Javascript</span><span>代码的新方法来实现和处理</span><span>Ajax</span><span>。这样</span><span>Web</span><span>开发人员就可以在</span><span>Javascript</span><span>里像使用浏览器的本地代码一样使用</span><span>Java</span><span>代码，而实际上这些</span><span>Java</span><span>代码是运行在服务器端并且可以自由访问</span><span>Web </span><span>服务器资源的。出于安全的考虑，</span><span>Web</span><span>开发者必须适当地配置，决定哪些</span><span>Java</span><span>类可以安全地被外部使用。</span></p>
<p style="TEXT-INDENT: 20pt"><span>这个从</span><span>Java</span><span>到</span><span>Javascript</span><span>的远程功能方法给</span><span>DWR</span><span>的用户带来了非常像传统的</span><span>RPC</span><span>机制，就像</span><span>RMI</span><span>或者</span><span>SOAP</span><span>一样，而且拥有无插件运行在</span><span>Web</span><span>上的优势。</span></p>
<p style="TEXT-INDENT: 19.2pt"><span style="LETTER-SPACING: -0.2pt">DWR</span><span style="LETTER-SPACING: -0.2pt">认为浏览器</span><span style="LETTER-SPACING: -0.2pt">/</span><span style="LETTER-SPACING: -0.2pt">服务器协议没有那么重要，其更倾向于保证编程界面的简单自然。对此最大的挑战就是把</span><span style="LETTER-SPACING: -0.2pt">Ajax</span><span style="LETTER-SPACING: -0.2pt">的异步特性和正常</span><span style="LETTER-SPACING: -0.2pt">Java</span><span style="LETTER-SPACING: -0.2pt">方法调用的同步特性相结合。在异步模式下，结果数据在开始调用之后的一段时间之后才可以访问。</span><span style="LETTER-SPACING: -0.2pt">DWR</span><span style="LETTER-SPACING: -0.2pt">解决了这个问题，允许</span><span style="LETTER-SPACING: -0.2pt">Web</span><span style="LETTER-SPACING: -0.2pt">开发人员使用一个特殊的方法参数来指定一个函数，以便在数据返回后回调此函</span><span style="LETTER-SPACING: -0.1pt">数。</span></p>
<p style="TEXT-INDENT: 20pt"><span>图</span><span>11-1</span><span>来自</span><span>DWR</span><span>的官方文档，展示了</span><span>DWR</span><span>如何利用一些类似</span><span>Javascript</span><span>的</span><span>onClick</span><span>等事件的结果来改变一个下拉列表框的内容。这个事件处理器调用一个</span><span>DWR</span><span>生成的</span><span>Javascript</span><span>函数，它和服务器端的</span><span>Java</span><span>函数是匹配的。</span><span>DWR</span><span>接着处理了</span><span>Java</span><span>和</span><span>Javascript</span><span>之间的所有远程信息，包括转换所有的参数和返回需要的值。接着</span><span>DWR</span><span>执行了相应的回调函数（</span><span>populateList</span><span>）。这个例子演示了如何使用</span><span>DWR</span><span>功能函数来改变网页内容。</span></p>
<p align="center" style="MARGIN-TOP: 7.2pt"><span><img src="http://book.csdn.net/bookfiles/159/11/image001.jpg" height="202" alt="" width="363" /></span></p>
<p align="center" style="MARGIN: 3.6pt 0cm 7.2pt"><span>图</span><span>11-1&nbsp;&nbsp; DWR</span><span>交互过程</span></p>
<p style="TEXT-INDENT: 20pt"><span>使用</span><span>DWR</span><span>可以有效地从应用程序代码中把</span><span>Ajax</span><span>的全部请求</span><span>-</span><span>响应循环消除掉。这意味着，客户端代码再也不需要直接处理</span><span>XMLHttpRequest</span><span>对象或者服务器的响应，不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成</span><span>XML</span><span>，甚至不再需要编写</span><span>servlet</span><span>代码把</span><span>Ajax</span><span>请求调整成对</span><span>Java</span><span>对象的调用。</span></p>
<p style="TEXT-INDENT: 20pt"><span>DWR</span><span>是作为</span><span>Web</span><span>应用程序中的</span><span>servlet</span><span>部署的。可以把它看做一个黑盒子，这个</span><span>servlet</span><span>有两个主要作用：首先，对于公开的每个类，</span><span>DWR</span><span>动态地生成包含在</span><span>Web</span><span>页面中的</span><span>Javascript</span><span>。生成的</span><span>Javascript</span><span>包含存根函数，代表</span><span>Java</span><span>类上的对应方法并在幕后执行</span><span>XML HttpRequest</span><span>。这些请求被发送给</span><span>DWR</span><span>，这时它的第二个作用就是把请求翻译成服务器端</span><span>Java</span><span>对象上的方法调用，并把方法的返回值放在</span><span>servlet</span><span>响应中发送回客户端，编码成</span><span>Javascript</span><span>。</span><span>DWR</span><span>还提供了帮助执行常见的用户界面任务的</span><span>Javascript</span><span>工具函数。</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/143596#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 26 Nov 2007 13:04:22 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/143596</link>
        <guid>http://xrb2008.javaeye.com/blog/143596</guid>
      </item>
      <item>
        <title>ajax分页</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/131680" style="color:red;">http://xrb2008.javaeye.com/blog/131680</a>&nbsp;
          发表时间: 2007年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>例子备份.感兴趣的朋友，可下来看看。</p>
<p>eclipse+tomcat5.5+servlet+jsp+JDOM解析</p>
<p>FeYeDemo.rar为源代码</p>
          <br/>
          <span style="color:red;">
            <a href="http://xrb2008.javaeye.com/blog/131680#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 13 Oct 2007 16:40:51 +0800</pubDate>
        <link>http://xrb2008.javaeye.com/blog/131680</link>
        <guid>http://xrb2008.javaeye.com/blog/131680</guid>
      </item>
      <item>
        <title>struts2概述(转)</title>
        <author>xrb2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xrb2008.javaeye.com">xrb2008</a>&nbsp;
          链接：<a href="http://xrb2008.javaeye.com/blog/127776" style="color:red;">http://xrb2008.javaeye.com/blog/127776</a>&nbsp;
          发表时间: 2007年09月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>一．Struts2概述<br />
</strong>众所周知，Struts2是以Webwork2作为基础发展出来，WebWork是一个强大的基于Web的MVC框架, 它构建在一个命令模式框架XWork之上。<br />
WebWork真正的优势在于它强调简洁和协作能力的根本理念. 使用WebWork将有助于最小化代码并允许开发人员更多的关注业务逻辑和建模而不是诸如编写Servlet之类的事情。<br />
Struts2和webwork2基本上一样的，核心基本没改，部分包名进行了修改。Struts2对webwork的改进之处如下：<br />
1．&nbsp; webwork.properties文件中变量现在可以配置在下列文件：<br />
&nbsp;&nbsp; struts-default.xml<br />
&nbsp;&nbsp;&nbsp; struts-plugin.xml(在每个plugin的jar包中)<br />
&nbsp;&nbsp;&nbsp; struts.xml(用constant元素)<br />
&nbsp;&nbsp;&nbsp; struts.properties(没有默认文件,可选,与webwork.properties文件相似,每个项目可以有这个文件)W<br />
&nbsp;&nbsp;&nbsp; web.xml<br />
2．Struts2的配置文件加入了对通配符的支持。<br />
<div id="ParagraphCount" style="DISPLAY: none">
<div><font size="2"><strong>二．Struts1</strong><strong>与Struts2</strong><strong>的对比</strong></font></div>
<div><font size="2"><span>&nbsp; </span>根据Struts2开发组的文章可以得知，Struts2与Struts1的不同之处如下表所示：<br />
</font></div>
<table cellspacing="0" border="1" cellpadding="0" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse">
    <tbody>
        <tr>
            <td valign="top" width="127" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 95.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div align="center"><font size="2">不同点</font></div>
            </td>
            <td valign="top" width="252" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 188.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div align="center"><font size="2">Struts1</font></div>
            </td>
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 142.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div align="center"><font size="2">Struts2</font></div>
            </td>
        </tr>
        <tr>
            <td valign="top" width="127" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 95.4pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">Action 类</font></div>
            </td>
            <td valign="top" width="252" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 188.65pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。</font></div>
            </td>
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 142.05pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">Action类可以实现一个Action接口，也可实现其他接口，使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的，任何有execute标识的POJO对象都可以用作Struts2的Action对象。</font></div>
            </td>
        </tr>
        <tr>
            <td valign="top" width="127" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 95.4pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">线程模式</font></div>
            </td>
            <td valign="top" width="252" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 188.65pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">Action是单例模式并且必须是线程安全的，因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事，并且要在开发时特别小心。Action资源必须是线程安全的或同步的。</font></div>
            </td>
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 142.05pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">Action对象为每一个请求产生一个实例，因此没有线程安全问题。（实际上，servlet容器给每个请求产生许多可丢弃的对象，并且不会导致性能和垃圾回收问题）</font></div>
            </td>
        </tr>
        <tr>
            <td valign="top" width="127" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 95.4pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">Servlet 依赖</font></div>
            </td>
            <td valign="top" width="252" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 188.65pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。</font></div>
            </td>
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 142.05pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">Action不依赖于容器，允许Action脱离容器单独被测试。如果需要，Struts2 Action仍然可以访问初始的request和response。但是，其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。</font></div>
            </td>
        </tr>
        <tr>
            <td valign="top" width="127" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 95.4pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">可测性</font></div>
            </td>
            <td valign="top" width="252" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 188.65pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">Action的一个主要问题是execute方法暴露了servlet API（这使得测试要依赖于容器）。一个第三方扩展－－Struts TestCase－－提供了一套Struts1的模拟对象（来进行测试）。</font></div>
            </td>
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 142.05pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">Action可以通过初始化、设置属性、调用方法来测试，&ldquo;依赖注入&rdquo;支持也使测试更容易。</font></div>
            </td>
        </tr>
        <tr>
            <td valign="top" width="127" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 95.4pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">捕获输入</font></div>
            </td>
            <td valign="top" width="252" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 188.65pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm，开发者经 常创建多余的类捕获输入。动态Bean（DynaBeans）可以作为创建传统ActionForm的选择，但是，开发者可能是在重新描述(创建)已经存 在的JavaBean（仍然会导致有冗余的javabean）。</font></div>
            </td>
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 142.05pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">直接使用Action属性作为输入属性，消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型，包括业务对象，能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。</font></div>
            </td>
        </tr>
        <tr>
            <td valign="top" width="127" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 95.4pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">表达式语言</font></div>
            </td>
            <td valign="top" width="252" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 188.65pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">整合了JSTL，因此使用JSTL EL。这种EL有基本对象图遍历，但是对集合和索引属性的支持很弱。</font></div>
            </td>
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 142.05pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">可以使用JSTL，但是也支持一个更强大和灵活的表达式语言－－&quot;Object Graph Notation Language&quot; (OGNL).</font></div>
            </td>
        </tr>
        <tr>
            <td valign="top" width="127" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 95.4pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent">
            <div><font size="2">绑定值到页面（view）</font></div>
            </td>
 