杜波 さんのプロフィール共享空间ブログリスト ツール ヘルプ

杜波

職業
所在地
由于未能在正确的时间、正确的地点做正确的事情,我们已经错过了人生最具意义的起点。

共享空间

11月22日

比尔·盖茨给职场新人的10句话

1.人生是不公平的,习惯去接受它吧。

2.这个世界不会在乎你的自尊,这个世界期望你先做出成绩,再去强调自己的感受。

3.你不会一离开学校就有百万年薪,你不会马上就是拥有移动电话的副总裁,两者你都必须靠努力赚来。

4.如果你觉得你的老板很凶,等你当了老板就知道了,老板是没有工作任期保障的。

5.在速食店煎个汉堡并不是作贱自己,你的祖父母对煎汉堡有完全不同的定义。

6.如果你一事无成,不是你父母的错,所以不要只会对自己犯的错发牢骚,从错误中去学习。

7.在你出生前,你的父母并不像现在这般无趣,他们变成这样是因为忙着付你的开销,洗你的衣服,听你吹嘘自己有多了不起,所以在你拯救被父母这代人破坏的热带雨林前,先整理一下自己的房间吧。

8.在学校里可能有赢家和输家,在人生中却还言之过早,学校可能会不断给你机会找到正确的答案,真实人生中却完全不是这么回事。

9.人生不是学期制,人生没有寒假,没有哪个雇主有兴趣协助你寻找自我,请用自己的空暇做这件事吧。

10.电视上演的并不是真实的人生,真实人生中每个人都要离开咖啡厅去上班。

11月5日

一个非常非常简单的AJAX程序

date.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.Timestamp"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'date.jsp' starting page</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
 
  <body>
   <%
    Date date = new Date();
  Timestamp ts = new Timestamp(date.getTime());
  String result = ts.toString().substring(0,19);
  out.write(result,0,result.length());
   %>
  </body>
</html>
ajax.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>">
  <title>My JSP 'ajax.jsp' starting page</title>
  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
  <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  <script type="text/javascript">
   function makeRequest(){
    http_request = false;
    if (window.XMLHttpRequest) {
     http_request = new XMLHttpRequest();
     if (http_request.overrideMimeType){
      http_request.overrideMimeType('text/xml');
     }
    }else if (window.ActiveXObject) {
     try{
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
     }catch (e) {
      try {
       http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e){
      }
     }
    }
    http_request.onreadystatechange = init;
     http_request.open('GET',"date.jsp",true);
     http_request.setRequestHeader("If-Modified-Since","0");
     http_request.send(null);
     setTimeout("makeRequest()", 600);
   }
   function init(){
    if (http_request.readyState == 4) {
     if (http_request.status == 0 || http_request.status == 200) {
       var result = http_request.responseText;
       if(result==""){
         result = "系统时间获取失败";
       }
       document.getElementById ("sysTimeShow").innerHTML="系统时间:"+result;
     } else {//http_request.status != 200
       alert("请求失败!");
     }
    }
   }
 </script>
 </head>
 <body onload="makeRequest()">
  <center>
   <div id="sysTimeShow"></div>
  </center>
 </body>
</html>

 

Hibernate建立一对多双向关联

Customer.hbm.xml
    <hibernate-mapping>
       <class name="mypack. Customer" table="CUSTOMERS">
           <id id="id" type="long" column="ID">
               <generator class="increment"/>
           </id>
           <property name="name" type="string">
                <column name="NAME" length="15 />
           </property>
           <set
                name="order"
                cascade="save-update"
                >
            <key column="CUSTOMER_ID"/>
            <one-to-many class="mypack.Order"/>
           </set>
       </class>
   </hibernate-mapping>
Order.hbm.xml
   <hibernate-mapping>
        <class name="mypack.Order" table="ORDERS">
            <id name="id" type="long" column="ID">
                <generator class="increment" />
            </id>
            <property name="orderNumber" type="string">
                 <colunm name="ORDER_NUMBER" length="15" />
            </property>
            <many-to-one
                  name="customer"
                  column="CUSTOMER_ID"
                  class="mypack.Customer"
                  not-null="true"
                  >
        </class>
   </hibernate-mapping>
10月28日

利用反射机制和prototype实现继承

function class1(){
}
class1.prototype={
         method:function(){
                 alert("javascript!");
         },
         method2:function(){
                 alert("java!");
         }
}
function class2(){
 
}
class2.prototype.method=function(){
         alert("candy!");
}
Function.prototype.inherit = function(bassClass){
         for(var p in bassClass.prototype){
                 this.prototype[p] = bassClass.prototype[p];
         }
}
var obj1 = new class1();
var obj2 = new class2();
class2.inherit(class1);
obj1.method();
obj2.method();
obj1.method2();
obj2.method2();
10月15日

Java/JSP中文乱码问题解决心得

一、Java中文问题的由来 

Java
的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,JavaJSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。

首先Java(包括JSP)源文件中很可能包含有中文,而JavaJSP源文件的保存方式是基于字节流的,如果JavaJSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312编译;对于JSP,在文件头加上<%@ page contentType="text/html;charset=GBK"%><%@ page contentType="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。

本文要重点讨论的是第二类乱码,即Java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,Java程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换,具体情况如下:

从页面form提交数据到java程序 byte>char
java程序到页面显示 char?>byte

从数据库到java程序 byte?>char
java程序到数据库 char?>byte

从文件到java程序 byte>char
java程序到文件 char>byte

从流到java程序 byte>char
java程序到流 char>byte

如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。

二、解决方法 

前面已经提到了Java程序与其他媒介交互时字符和字节的转换过程,如果这些转换过程中容易产生乱码。解决这些乱码问题的关键在于确保转换时使用的编码方式与字节原有的编码方式保持一致,下面分别论述(JavaJSP自身产生的乱码请参看第一部分)。

1
JSP与页面参数之间的乱码 
JSP
获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setCharacterEncoding("GBK")request.setCharacterEncoding("gb2312")
如果在JSP将变量输出到页面时出现了乱码,可以通过设置response.setContentType("text/html;charset=GBK")response.setContentType("text/html;charset=gb2312")解决。
如果不想在每个文件里都写这样两句话,更简洁的办法是使用Servlet规范中的过虑器指定编码,过滤器的在web.xml中的典型配置和主要代码如下:
web.xml:

<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>net.vschool.web.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

CharacterEncodingFilter.java:

public class CharacterEncodingFilter implements Filter 
{

protected String encoding = null; 

public void init(FilterConfig filterConfig) throws ServletException 
{
this.encoding = filterConfig.getInitParameter("encoding");
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
{
request.setCharacterEncoding(encoding);
response.setContentType("text/html;charset="+encoding);
chain.doFilter(request, response);
}

}


2
Java与数据库之间的乱码 
大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如MicrosoftSQLServer驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如如mmmysql驱动:jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK

3
Java与文件/流之间的乱码 
Java
读写文件最常用的类是FileInputStream/FileOutputStreamFileReader/FileWriter。其中FileInputStreamFileOutputStream是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReaderFileWriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。在这种情况下,建议使用FileReaderFileWriter的父类:InputStreamReader/OutputStreamWriter,它们也是基于字符的,但在构造函数中可以指定编码类型:InputStreamReader(InputStream in, Charset cs) OutputStreamWriter(OutputStream out, Charset cs) 

4
、其他 
上面提到的方法应该能解决大部分乱码问题,如果在其他地方还出现乱码,可能需要手动修改代码。解决Java乱码问题的关键在于在字节与字符的转换过程中,你必须知道原来字节或转换后的字节的编码方式,转换时采用的编码必须与这个编码方式保持一致。我们以前使用Resin服务器,使用smartUpload组件上传文件,上传文件同时传递的中文参数获取没有乱码问题。当在Linux中把Resin设置成服务后,上传文件同时的中文参数获取出现了乱码。这个问题困扰了我们很久,后来我们分析smartUpload组件的源文件,因为文件上传采用的是字节流的方式,里面包含的参数名称和值也是字节流的方式传递的。smartUpload组件读取字节流后再将参数名称和值从字节流中解析出来,问题就出现在smartUpload将字节流转换成字符串时采用了系统默认的编码,而将Resin设置成服务后,系统默认的编码可能发生了改变,因此出现了乱码。后来,我们更改了smartUpload的源文件,增加了一个属性charsetsetCharset(String)方法,将upload()方法中提取参数语句:
String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1 );
改成了
String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1, charset );