<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[Greco&#39;s Knows-How]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[做技术但勿沉迷于技术！   My accounts of Skype is greco831203]]></description>
<link>http://hi.baidu.com/gaozhiyan</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[webxml文件]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/6f03ce36490db53b0b55a9a9.html]]></link>
        <description><![CDATA[
		
		<span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE web-app PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot; <br>
&quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">display-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Sample Application</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">display-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">This is a sample application</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">过滤器名，可以随便取，当web应用中有多个过滤器时不允许重名.</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">SampleFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">具体的过滤器的类的完整的包名+类名。注意：不能写错了。否则容器不能正确的实例化过滤器</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">mypack.SampleFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 参数名 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">initParam1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 参数值 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> Define the SampleFilter Mapping </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">过滤器名，注意要和上面的&lt;filter-name&gt;里的名字一样。</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">SampleFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 指定过滤器负责过滤的URL。这里指定了*.jsp表示在访问任何一个jsp页面时都会先使用mypack.SampleFilter过滤器进行过滤。如果写成login.jsp.则只有在访问login.jsp时才会调用该过滤器进行过滤。</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">*.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> Servlet名字，可以随便取，有多个Servlet时不允许重名</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">SampleServlet</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">指定实现这个Servlet的类。完整的包名+类名</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">mypack.SampleServlet</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">定义Servlet的初始化参数(包括参数名和参数值)一个&lt;servlet&gt;元素里可以有多个&lt;init-param&gt;元素。在Servlet类中通过ServletConfig类的来访问这些参数。 <br>
</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 参数名 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">initParam1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 参数值 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">指定当前Web应用启动时装载Servlet的次序。当这个数&gt;=0时，容器会按数值从小到大依次加载。如果数值&lt;0或没有指定，容器将载Web客户首次访问这个Servlet时加载。</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> Define the SampleServlet Mapping </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">必须和&lt;servlet&gt;里的&lt;servlet-name&gt;内容一样</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">SampleServlet</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">指定访问这个Servlet的URL。这里给出的是对于整个Web应用的相对URL路径。</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/sample</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">session-config</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">设定HttpSession的生命周期。这里以分钟计算。下面的设定指明Session在最长不活动时间为10分钟。过了这个时间，Servlet容器将它作为无效处理。注意这里和程序里指定的计数单位不同，程序里是以秒为单位。&lt;session-config&gt;只有&lt;session-timeout&gt;这个元素</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">session-timeout</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">10</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">session-timeout</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">session-config</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">&mdash;配置会话侦听器，class表示一个HttpSessionListener或HttpSessionActivationListener 或 HttpSessionAttributeListener或HttpSessionBindingListener的实现类。该节点允许多个 --</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.cn.SessionListenerImpl</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 在用户访问Web应用时,如果仅给出Web应用的根访问URL，没有指定具体的文件名，容器会调用&lt;weblcome-file-list&gt; 元素里指定的文件清单。&lt;welcome-file-list&gt;里允许有多个&lt;welcome-file&gt;元素，每个元素代表一个文件。容器会先找第一文文件件是否存在，如果存在这把这个文件返回个客户，不再进行其他文件的查找。如果不存在则找第二个文件，依次类推。如果所有文件都不存在，则跑出404错误</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">welcome-file-list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">login.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">index.htm</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">welcome-file-list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 设置Web应用引用的自定义标签库。下面的代码定义了一个/mytaglib标签库，它对应的TLD文件为/WEB-INF/mytaglib.tld </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">taglib</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">taglib-uri</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/mytaglib</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">taglib-uri</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">taglib-location</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/WEB-INF/mytaglib.tld</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">taglib-location</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">taglib</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 如果Web应用访问了由Servlet容器管理的某个JNDI Resource必须在这里声明对JNDI Resource的引用 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">resource-ref</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 对应用资源的说明 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">DB Connection</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 指定所引用资源的JNDI名字 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">res-ref-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">jdbc/sampleDb</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">res-ref-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 指定所引用资源的类名字 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">res-type</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">javax.sql.DataSource</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">res-type</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 指定管理所引用资源的Manager， 它有两个可选值：Container和Application.Container表示由容器来创建和管理Resource，Application表示由Web应用来管理和创建Resource </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">res-auth</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Container</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">res-auth</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">resource-ref</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">security-constraint</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">web-resource-collection</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 这个名字是必须的，由工具使用，别的地方不使用 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">web-resource-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">my application</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">web-resource-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 指定要受约束的资源，至少有一个。可以有多个. </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">uri-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">uri-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 描述了度可与URL模式指定的资源哪些方法是受约束的，如果没有&lt;http-method&gt;元素，表示任何角色的人都无法访问任何http的方法&nbsp;&nbsp; 。这里放置了GET方法，表示只有GET方法是受约束的。其他任何角色的人可以访问POST和其他的方法。但不能访问GET方法。</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">http-method</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">GET</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">http-method</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">web-resource-collection</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 如果没有&lt;auth-constraint&gt;表示所有角色都能访问GET方法，如果是&lt;auth-constraint/&gt;表示任何角色都不能访问GET方法 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">auth-constraint</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 可选的。表示哪些角色能够在指定的资源上调用受约束的方法。这里表示只有拥有Admin和Member角色的人能够访问GET方法 <br>
&lt;security-role&gt;&gt;里的&lt;role-name&gt;值一样 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">role-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Admin</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">role-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">role-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Member</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">role-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">auth-constraint</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">security-constraint</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 将指定的角色映射到web.xml里 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">security-role</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">The role that is required to log into the my Application <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 以下的角色和tomcat-users.xml里的&lt;tomcat-users&gt;里的&lt;role rolename=&quot;&quot;/&gt;里的rolename属性值对应 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">role-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Guest</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">role-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">role-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Admin</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">role-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">role-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Member</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">role-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">security-role</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 如果要想进行认证，必须有&lt;login-config&gt;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">login-config</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> 认证方式。有4种：BASIC:基本。 DIGEST:摘要。CLIENT-CERT:客户证书(能提供最高强度的认证)。FORM:表单 </span><span style="color: #008000">--&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">auth-method</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">FORM</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">auth-method</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">realm-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
Tomcat Servet Configuraton Form-Based Authentication Area <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">realm-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form-login-config</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form-login-page</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/login.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form-login-page</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form-error-page</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/error.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form-error-page</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form-login-config</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">login-config</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br>
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> </span> <a href="http://hi.baidu.com/gaozhiyan/blog/item/6f03ce36490db53b0b55a9a9.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/%BC%BC%CA%F5%5Fjava">技术_java</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/6f03ce36490db53b0b55a9a9.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月25日 星期三  下午 01:28</pubDate>
        <category><![CDATA[技术_java]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/6f03ce36490db53b0b55a9a9.html</guid>
</item>

<item>
        <title><![CDATA[JS 验证]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/dc1c4f093af212a52fddd4a6.html]]></link>
        <description><![CDATA[
		
		<font size="2">1:js 字符串长度限制、判断字符长度、js限制输入、限制不能输入、textarea 长度限制<br>
2.:js判断汉字、判断是否汉字 、只能输入汉字<br>
3:js判断是否输入英文、只能输入英文<br>
4:js只能输入数字,判断数字、验证数字、检测数字、判断是否为数字、只能输入数字<br>
5:只能输入英文字符和数字<br>
6: js email验证 、js 判断email 、信箱/邮箱格式验证<br>
7:js字符过滤,屏蔽关键字<br>
8:js密码验证、判断密码<br>
2.1: js 不为空、为空或不是对象 、判断为空、判断不为空<br>
2.2:比较两个表单项的值是否相同<br>
2.3:表单只能为数字和&quot;_&quot;,<br>
2.4:表单项输入数值/长度限定<br>
2.5:中文/英文/数字/邮件地址合法性判断<br>
2.6:限定表单项不能输入的字符<br>
2.7表单的自符控制<br>
2.8:form文本域的通用校验函数<br>
<br>
1. 长度限制<br>
&lt;script&gt;<br>
function test()<br>
{<br>
if(document.a.b.value.length&gt;50)<br>
{<br>
alert(&quot;不能超过50个字符！&quot;);<br>
document.a.b.focus();<br>
return false;<br>
}<br>
}<br>
&lt;/script&gt;<br>
&lt;form name=a onsubmit=&quot;return test()&quot;&gt;<br>
&lt;textarea name=&quot;b&quot; cols=&quot;40&quot; wrap=&quot;VIRTUAL&quot; rows=&quot;6&quot;&gt;&lt;/textarea&gt;<br>
&lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;check&quot;&gt;<br>
&lt;/form&gt;<br>
<br>
2. 只能是汉字<br>
&lt;input onkeyup=&quot;value=&quot;/oblog/value.replace(/[^\u4E00-\u9FA5]/g,'')&quot;&gt;<br>
<br>
3.&quot; 只能是英文<br>
&lt;script language=javascript&gt;<br>
function onlyEng()<br>
{<br>
if(!(event.keyCode&gt;=65&amp;&amp;event.keyCode&lt;=90))<br>
event.returnvalue=false;<br>
}<br>
&lt;/script&gt;<br>
<br>
&lt;input onkeydown=&quot;onlyEng();&quot;&gt;<br>
<br>
4. 只能是数字<br>
&lt;script language=javascript&gt;<br>
function onlyNum()<br>
{<br>
if(!((event.keyCode&gt;=48&amp;&amp;event.keyCode&lt;=57)||(event.keyCode&gt;=96&amp;&amp;event.keyCode&lt;=105)))<br>
//考虑小键盘上的数字键<br>
event.returnvalue=false;<br>
}<br>
&lt;/script&gt;<br>
<br>
&lt;input onkeydown=&quot;onlyNum();&quot;&gt;<br>
<br>
5. 只能是英文字符和数字<br>
&lt;input onkeyup=&quot;value=&quot;/oblog/value.replace(/[\W]/g,&quot;'') &quot;onbeforepaste=&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))&quot;&gt;<br>
<br>
6. 验证油箱格式<br>
&lt;SCRIPT LANGUAGE=javascript RUNAT=Server&gt;<br>
function isEmail(strEmail) {<br>
if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)<br>
return true;<br>
else<br>
alert(&quot;oh&quot;);<br>
}<br>
&lt;/SCRIPT&gt;<br>
&lt;input type=text onblur=isEmail(this.value)&gt;<br>
<br>
7. 屏蔽关键字(这里屏蔽***和****)<br>
&lt;script language=&quot;javascript1.2&quot;&gt;<br>
function test() {<br>
if((a.b.value.indexOf (&quot;***&quot;) == 0)||(a.b.value.indexOf (&quot;****&quot;) == 0)){<br>
alert(&quot;:)&quot;);<br>
a.b.focus();<br>
return false;}<br>
}<br>
&lt;/script&gt;<br>
&lt;form name=a onsubmit=&quot;return test()&quot;&gt;<br>
&lt;input type=text name=b&gt;<br>
&lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;check&quot;&gt;<br>
&lt;/form&gt;<br>
<br>
8. 两次输入密码是否相同<br>
&lt;FORM METHOD=POST ACTION=&quot;&quot;&gt;<br>
&lt;input type=&quot;password&quot; id=&quot;input1&quot;&gt;<br>
&lt;input type=&quot;password&quot; id=&quot;input2&quot;&gt;<br>
&lt;input type=&quot;button&quot; value=&quot;test&quot; onclick=&quot;check()&quot;&gt;<br>
&lt;/FORM&gt;<br>
&lt;script&gt;<br>
function check()<br>
{<br>
with(document.all){<br>
if(input1.value!=input2.value)<br>
{<br>
alert(&quot;false&quot;)<br>
input1.value = &quot;&quot;;<br>
input2.value = &quot;&quot;;<br>
}<br>
else document.forms[0].submit();<br>
}<br>
}<br>
&lt;/script&gt;<br>
够了吧 :)<br>
屏蔽右键 很酷<br>
oncontextmenu=&quot;return false&quot; ondragstart=&quot;return false&quot; onselectstart=&quot;return false&quot;<br>
加在body中<br>
<br>
<br>
二<br>
<br>
2.1 <wbr></wbr><wbr></wbr>表单项不能为空<br>
<br>
&lt;script <wbr></wbr><wbr></wbr>language=&quot;javascript&quot;&gt;<br>
&lt;!--<br>
function <wbr></wbr><wbr></wbr>CheckForm()<br>
{ <wbr></wbr><wbr></wbr><br>
if <wbr></wbr><wbr></wbr>(document.form.name.value.length <wbr></wbr><wbr></wbr>== <wbr></wbr><wbr></wbr>0) <wbr></wbr><wbr></wbr>{ <wbr></wbr><wbr></wbr><br>
alert(&quot;请输入您姓名!&quot;);<br>
document.form.name.focus();<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
return <wbr></wbr><wbr></wbr>true;<br>
}<br>
--&gt;<br>
&lt;/script&gt;<br>
<br>
2.2 <wbr></wbr><wbr></wbr>比较两个表单项的值是否相同<br>
<br>
&lt;script <wbr></wbr><wbr></wbr>language=&quot;javascript&quot;&gt;<br>
&lt;!--<br>
function <wbr></wbr><wbr></wbr>CheckForm()<br>
if <wbr></wbr><wbr></wbr>(document.form.PWD.value <wbr></wbr><wbr></wbr>!= <wbr></wbr><wbr></wbr>document.form.PWD_Again.value) <wbr></wbr><wbr></wbr>{ <wbr></wbr><wbr></wbr><br>
alert(&quot;您两次输入的密码不一样！请重新输入.&quot;);<br>
document.ADDUser.PWD.focus();<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
return <wbr></wbr><wbr></wbr>true;<br>
}<br>
--&gt;<br>
&lt;/script&gt;<br>
<br>
2.3 <wbr></wbr><wbr></wbr>表单项只能为数字和&quot;_&quot;,用于电话/银行帐号验证上,可扩展到域名注册等<br>
<br>
&lt;script <wbr></wbr><wbr></wbr>language=&quot;javascript&quot;&gt;<br>
&lt;!--<br>
function <wbr></wbr><wbr></wbr>isNumber(String)<br>
{ <wbr></wbr><wbr></wbr><br>
var <wbr></wbr><wbr></wbr>Letters <wbr></wbr><wbr></wbr>= <wbr></wbr><wbr></wbr>&quot;1234567890-&quot;; <wbr></wbr><wbr></wbr>//可以自己增加可输入值<br>
var <wbr></wbr><wbr></wbr>i;<br>
var <wbr></wbr><wbr></wbr>c;<br>
if(String.charAt( <wbr></wbr><wbr></wbr>0 <wbr></wbr><wbr></wbr>)=='-')<br>
return <wbr></wbr><wbr></wbr>false;<br>
if( <wbr></wbr><wbr></wbr>String.charAt( <wbr></wbr><wbr></wbr>String.length <wbr></wbr><wbr></wbr>- <wbr></wbr><wbr></wbr>1 <wbr></wbr><wbr></wbr>) <wbr></wbr><wbr></wbr>== <wbr></wbr><wbr></wbr>'-' <wbr></wbr><wbr></wbr>)<br>
return <wbr></wbr><wbr></wbr>false;<br>
for( <wbr></wbr><wbr></wbr>i <wbr></wbr><wbr></wbr>= <wbr></wbr><wbr></wbr>0; <wbr></wbr><wbr></wbr>i <wbr></wbr><wbr></wbr>&lt; <wbr></wbr><wbr></wbr>String.length; <wbr></wbr><wbr></wbr>i <wbr></wbr><wbr></wbr>++ <wbr></wbr><wbr></wbr>)<br>
{ <wbr></wbr><wbr></wbr><br>
c <wbr></wbr><wbr></wbr>= <wbr></wbr><wbr></wbr>String.charAt( <wbr></wbr><wbr></wbr>i <wbr></wbr><wbr></wbr>);<br>
if <wbr></wbr><wbr></wbr>(Letters.indexOf( <wbr></wbr><wbr></wbr>c <wbr></wbr><wbr></wbr>) <wbr></wbr><wbr></wbr>&lt; <wbr></wbr><wbr></wbr>0)<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
return <wbr></wbr><wbr></wbr>true;<br>
}<br>
function <wbr></wbr><wbr></wbr>CheckForm()<br>
{ <wbr></wbr><wbr></wbr><br>
if(! <wbr></wbr><wbr></wbr>isNumber(document.form.TEL.value)) <wbr></wbr><wbr></wbr>{ <wbr></wbr><wbr></wbr><br>
alert(&quot;您的电话号码不合法！&quot;);<br>
document.form.TEL.focus();<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
return <wbr></wbr><wbr></wbr>true;<br>
}<br>
--&gt;<br>
&lt;/script&gt;<br>
<br>
<br>
2.4 <wbr></wbr><wbr></wbr>表单项输入数值/长度限定<br>
<br>
&lt;script <wbr></wbr><wbr></wbr>language=&quot;javascript&quot;&gt;<br>
&lt;!--<br>
function <wbr></wbr><wbr></wbr>CheckForm() <wbr></wbr><wbr></wbr><br>
{ <wbr></wbr><wbr></wbr><br>
if <wbr></wbr><wbr></wbr>(document.form.count.value <wbr></wbr><wbr></wbr>&gt; <wbr></wbr><wbr></wbr>100 <wbr></wbr><wbr></wbr>|| <wbr></wbr><wbr></wbr>document.form.count.value <wbr></wbr><wbr></wbr>&lt; <wbr></wbr><wbr></wbr>1)<br>
{ <wbr></wbr><wbr></wbr><br>
alert(&quot;输入数值不能小于零大于100!&quot;);<br>
document.form.count.focus();<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
if <wbr></wbr><wbr></wbr>(document.form.MESSAGE.value.length&lt;10)<br>
{ <wbr></wbr><wbr></wbr><br>
alert(&quot;输入文字小于10!&quot;);<br>
document.form.MESSAGE.focus();<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
return <wbr></wbr><wbr></wbr>true;<br>
}<br>
//--&gt;<br>
&lt;/script&gt;<br>
<br>
2.5 <wbr></wbr><wbr></wbr>中文/英文/数字/邮件地址合法性判断<br>
<br>
&lt;SCRIPT <wbr></wbr><wbr></wbr>LANGUAGE=&quot;javascript&quot;&gt;<br>
&lt;!--<br>
<br>
function <wbr></wbr><wbr></wbr>isEnglish(name) <wbr></wbr><wbr></wbr>//英文值检测<br>
{ <wbr></wbr><wbr></wbr><br>
if(name.length <wbr></wbr><wbr></wbr>== <wbr></wbr><wbr></wbr>0)<br>
return <wbr></wbr><wbr></wbr>false;<br>
for(i <wbr></wbr><wbr></wbr>= <wbr></wbr><wbr></wbr>0; <wbr></wbr><wbr></wbr>i <wbr></wbr><wbr></wbr>&lt; <wbr></wbr><wbr></wbr>name.length; <wbr></wbr><wbr></wbr>i++) <wbr></wbr><wbr></wbr>{ <wbr></wbr><wbr></wbr><br>
if(name.charCodeAt(i) <wbr></wbr><wbr></wbr>&gt; <wbr></wbr><wbr></wbr>128)<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
return <wbr></wbr><wbr></wbr>true;<br>
}<br>
<br>
function <wbr></wbr><wbr></wbr>isChinese(name) <wbr></wbr><wbr></wbr>//中文值检测<br>
{ <wbr></wbr><wbr></wbr><br>
if(name.length <wbr></wbr><wbr></wbr>== <wbr></wbr><wbr></wbr>0)<br>
return <wbr></wbr><wbr></wbr>false;<br>
for(i <wbr></wbr><wbr></wbr>= <wbr></wbr><wbr></wbr>0; <wbr></wbr><wbr></wbr>i <wbr></wbr><wbr></wbr>&lt; <wbr></wbr><wbr></wbr>name.length; <wbr></wbr><wbr></wbr>i++) <wbr></wbr><wbr></wbr>{ <wbr></wbr><wbr></wbr><br>
if(name.charCodeAt(i) <wbr></wbr><wbr></wbr>&gt; <wbr></wbr><wbr></wbr>128)<br>
return <wbr></wbr><wbr></wbr>true;<br>
}<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
<br>
function <wbr></wbr><wbr></wbr>isMail(name) <wbr></wbr><wbr></wbr>// <wbr></wbr><wbr></wbr>E-mail值检测<br>
{ <wbr></wbr><wbr></wbr><br>
if(! <wbr></wbr><wbr></wbr>isEnglish(name))<br>
return <wbr></wbr><wbr></wbr>false;<br>
i <wbr></wbr><wbr></wbr>= <wbr></wbr><wbr></wbr>name.indexOf(&quot; <wbr></wbr><wbr></wbr>at <wbr></wbr><wbr></wbr>&quot;);<br>
j <wbr></wbr><wbr></wbr>= <wbr></wbr><wbr></wbr>name <wbr></wbr><wbr></wbr>dot <wbr></wbr><wbr></wbr>lastIndexOf(&quot; <wbr></wbr><wbr></wbr>at <wbr></wbr><wbr></wbr>&quot;);<br>
if(i <wbr></wbr><wbr></wbr>== <wbr></wbr><wbr></wbr>-1)<br>
return <wbr></wbr><wbr></wbr>false;<br>
if(i <wbr></wbr><wbr></wbr>!= <wbr></wbr><wbr></wbr>j)<br>
return <wbr></wbr><wbr></wbr>false;<br>
if(i <wbr></wbr><wbr></wbr>== <wbr></wbr><wbr></wbr>name <wbr></wbr><wbr></wbr>dot <wbr></wbr><wbr></wbr>length)<br>
return <wbr></wbr><wbr></wbr>false;<br>
return <wbr></wbr><wbr></wbr>true;<br>
}<br>
<br>
function <wbr></wbr><wbr></wbr>isNumber(name) <wbr></wbr><wbr></wbr>//数值检测<br>
{ <wbr></wbr><wbr></wbr><br>
if(name.length <wbr></wbr><wbr></wbr>== <wbr></wbr><wbr></wbr>0)<br>
return <wbr></wbr><wbr></wbr>false;<br>
for(i <wbr></wbr><wbr></wbr>= <wbr></wbr><wbr></wbr>0; <wbr></wbr><wbr></wbr>i <wbr></wbr><wbr></wbr>&lt; <wbr></wbr><wbr></wbr>name.length; <wbr></wbr><wbr></wbr>i++) <wbr></wbr><wbr></wbr>{ <wbr></wbr><wbr></wbr><br>
if(name.charAt(i) <wbr></wbr><wbr></wbr>&lt; <wbr></wbr><wbr></wbr>&quot;0&quot; <wbr></wbr><wbr></wbr>|| <wbr></wbr><wbr></wbr>name.charAt(i) <wbr></wbr><wbr></wbr>&gt; <wbr></wbr><wbr></wbr>&quot;9&quot;)<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
return <wbr></wbr><wbr></wbr>true;<br>
}<br>
<br>
function <wbr></wbr><wbr></wbr>CheckForm()<br>
{ <wbr></wbr><wbr></wbr><br>
if(! <wbr></wbr><wbr></wbr>isMail(form.Email.value)) <wbr></wbr><wbr></wbr>{ <wbr></wbr><wbr></wbr><br>
alert(&quot;您的电子邮件不合法！&quot;);<br>
form.Email.focus();<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
if(! <wbr></wbr><wbr></wbr>isEnglish(form.name.value)) <wbr></wbr><wbr></wbr>{ <wbr></wbr><wbr></wbr><br>
alert(&quot;英文名不合法！&quot;);<br>
form.name.focus();<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
if(! <wbr></wbr><wbr></wbr>isChinese(form.cnname.value)) <wbr></wbr><wbr></wbr>{ <wbr></wbr><wbr></wbr><br>
alert(&quot;中文名不合法！&quot;);<br>
form.cnname.focus();<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
if(! <wbr></wbr><wbr></wbr>isNumber(form.PublicZipCode.value)) <wbr></wbr><wbr></wbr>{ <wbr></wbr><wbr></wbr><br>
alert(&quot;邮政编码不合法！&quot;);<br>
form.PublicZipCode.focus();<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
return <wbr></wbr><wbr></wbr>true;<br>
}<br>
//--&gt;<br>
&lt;/SCRIPT&gt;<br>
<br>
2.6 <wbr></wbr><wbr></wbr>限定表单项不能输入的字符<br>
<br>
&lt;script <wbr></wbr><wbr></wbr>language=&quot;javascript&quot;&gt;<br>
&lt;!--<br>
<br>
function <wbr></wbr><wbr></wbr>contain(str,charset)// <wbr></wbr><wbr></wbr>字符串包含测试函数<br>
{ <wbr></wbr><wbr></wbr><br>
var <wbr></wbr><wbr></wbr>i;<br>
for(i=0;i&lt;charset.length;i++)<br>
if(str.indexOf(charset.charAt(i))&gt;=0)<br>
return <wbr></wbr><wbr></wbr>true;<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
<br>
function <wbr></wbr><wbr></wbr>CheckForm()<br>
{ <wbr></wbr><wbr></wbr><br>
if <wbr></wbr><wbr></wbr>((contain(document.form.NAME.value, <wbr></wbr><wbr></wbr>&quot;%\(\)&gt;&lt;&quot;)) <wbr></wbr><wbr></wbr>|| <wbr></wbr><wbr></wbr>(contain(document.form.MESSAGE.value, <wbr></wbr><wbr></wbr>&quot;%\(\)&gt;&lt;&quot;)))<br>
{ <wbr></wbr><wbr></wbr><br>
alert(&quot;输入了非法字符&quot;);<br>
document.form.NAME.focus();<br>
return <wbr></wbr><wbr></wbr>false;<br>
}<br>
return <wbr></wbr><wbr></wbr>true;<br>
}<br>
//--&gt;<br>
&lt;/script&gt; <wbr></wbr><wbr></wbr><br>
<br>
1. 检查一段字符串是否全由数字组成 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
--------------------------------------- <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
&lt;script language=&quot;Javascript&quot;&gt;&lt;!-- <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
function checkNum(str){return str.match(/\D/)==null} <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
alert(checkNum(&quot;1232142141&quot;)) <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
alert(checkNum(&quot;123214214a1&quot;)) <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
// --&gt;&lt;/script&gt; <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
2. 怎么判断是否是字符 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
--------------------------------------- <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
if (/[^\x00-\xff]/g.test(s)) alert(&quot;含有汉字&quot;); <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
else alert(&quot;全是字符&quot;); <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
3. 怎么判断是否含有汉字 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
--------------------------------------- <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
if (escape(str).indexOf(&quot;%u&quot;)!=-1) alert(&quot;含有汉字&quot;); <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
else alert(&quot;全是字符&quot;); <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
4. 邮箱格式验证 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
--------------------------------------- <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//函数名：chkemail <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//功能介绍：检查是否为Email Address <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//参数说明：要检查的字符串 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//返回值：0：不是 1：是 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
function chkemail(a) <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
{ var i=a.length; <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
var temp = a.indexOf('@'); <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
var tempd = a.indexOf('.'); <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
if (temp &gt; 1) { <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
if ((i-temp) &gt; 3){ <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
if ((i-tempd)&gt;0){ <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
return 1; <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
} <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
} <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
} <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
return 0; <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
} <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
<strong>5. 数字格式验证</strong> <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
--------------------------------------- <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//函数名：fucCheckNUM <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//功能介绍：检查是否为数字 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//参数说明：要检查的数字 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//返回值：1为是数字，0为不是数字 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
function fucCheckNUM(NUM) <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
{ <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
var i,j,strTemp; <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
strTemp=&quot;0123456789&quot;; <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
if ( NUM.length== 0) <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
return 0 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
for (i=0;i&lt;NUM.length;i++) <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
{ <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
j=strTemp.indexOf(NUM.charAt(i)); <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
if (j==-1) <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
{ <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//说明有字符不是数字 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
return 0; <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
} <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
} <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//说明是数字 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
return 1; <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
} <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
6. 电话号码格式验证 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
--------------------------------------- <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//函数名：fucCheckTEL <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//功能介绍：检查是否为电话号码 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//参数说明：要检查的字符串 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//返回值：1为是合法，0为不合法 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
function fucCheckTEL(TEL) <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
{ <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
var i,j,strTemp; <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
strTemp=&quot;0123456789-()# &quot;; <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
for (i=0;i&lt;TEL.length;i++) <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
{ <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
j=strTemp.indexOf(TEL.charAt(i)); <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
if (j==-1) <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
{ <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//说明有字符不合法 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
return 0; <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
} <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
} <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
//说明合法 <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
return 1; <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
} <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr><br>
<strong>7. 判断输入是否为中文的函数</strong> <wbr></wbr><wbr></wbr><br>
--------------------------------------- <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
function ischinese(s){ <wbr></wbr><wbr></wbr><br>
var ret=true; <wbr></wbr><wbr></wbr><br>
for(var i=0;i&lt;s.length;i++) <wbr></wbr><wbr></wbr><br>
ret=ret &amp;&amp; (s.charCodeAt(i)&gt;=10000); <wbr></wbr><wbr></wbr><br>
return ret; <wbr></wbr><wbr></wbr><br>
} <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
</font><strong><wbr></wbr><wbr></wbr><br>
<font size="2">8. 综合的判断用户输入的合法性的函数</font></strong><font size="2"> <wbr></wbr><wbr></wbr><br>
--------------------------------------- <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
&lt;script language=&quot;javascript&quot;&gt; <wbr></wbr><wbr></wbr><br>
//限制输入字符的位数开始 <wbr></wbr><wbr></wbr><br>
//m是用户输入，n是要限制的位数 <wbr></wbr><wbr></wbr><br>
function issmall(m,n) <wbr></wbr><wbr></wbr><br>
{ <wbr></wbr><wbr></wbr><br>
if ((m&lt;n) &amp;&amp; (m&gt;0)) <wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr>{ <wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr>return(false); <wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr>} <wbr></wbr><wbr></wbr><br>
else <wbr></wbr><wbr></wbr><br>
{return(true);} <wbr></wbr><wbr></wbr><br>
} <wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr><br>
<strong>9. 判断密码是否输入一致</strong> <wbr></wbr><wbr></wbr><br>
--------------------------------------- <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
function issame(str1,str2) <wbr></wbr><wbr></wbr><br>
{ <wbr></wbr><wbr></wbr><br>
if (str1==str2) <wbr></wbr><wbr></wbr><br>
{return(true);} <wbr></wbr><wbr></wbr><br>
else <wbr></wbr><wbr></wbr><br>
{return(false);} <wbr></wbr><wbr></wbr><br>
} <wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr><br>
10. 判断用户名是否为数字字母下滑线<br>
--------------------------------------- <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
function notchinese(str){<br>
var reg=/[^A-Za-z0-9_]/g<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>if (reg.test(str)){<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>return (false);<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>}else{<br>
return(true); <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>}<br>
}<br>
<br>
2.8. form文本域的通用校验函数<br>
--------------------------------------- <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
作用：检测所有必须非空的input文本，比如姓名，账号，邮件地址等等。<br>
该校验现在只针对文本域，如果要针对form里面的其他域对象，可以改变判断条件。<br>
<br>
使用方法：在要检测的文本域中加入title文字。文字是在提示信息，你要提示给用户的该字段的中文名。比如要检测用户名<br>
html如下&lt;input name=&quot;txt_1&quot; title=&quot;姓名&quot;&gt;,当然，最好用可视化工具比如dreamweaver什么的来编辑域。<br>
如果要检测数字类型数据的话，再把域的id统一为sz.<br>
javascript判断日期类型比较麻烦，所以就没有做日期类型校验的程序了.高手可以补充。<br>
<br>
程序比较草，只是提供一个思路。抛砖引玉！：）<br>
哦，对了，函数调用方法：&lt; form <wbr></wbr><wbr></wbr>onsubmit=&quot;return dovalidate()&quot;&gt;<br>
<br>
function dovalidate()<br>
{<br>
fm=document.forms[0] //只检测一个form,如果是多个可以改变判断条件<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>for(i=0;i&lt;fm.length;i++)<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>{ <wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>//检测判断条件，根据类型不同可以修改<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>if(fm[i].tagName.toUpperCase()==&quot;INPUT&quot; &amp;&amp;fm[i].type.toUpperCase()==&quot;TEXT&quot; &amp;&amp; (fm[i].title!=&quot;&quot;))<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>if(fm[i].value=&quot;/blog/=&quot;&quot;)//<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>{<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>str_warn1=fm[i].title+&quot;不能为空!&quot;;<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>alert(str_warn1);<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>fm[i].focus();<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>return false; <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>}<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>if(fm[i].id.toUpperCase()==&quot;SZ&quot;)//数字校验<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>{<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>if(isNaN(fm[i].value))<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>{ str_warn2=fm[i].title+&quot;格式不对&quot;;<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>alert(str_warn2);<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>fm[i].focus();<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>return false;<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>}<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>}<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>}<br>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>return true;<br>
}<br>
</font> <a href="http://hi.baidu.com/gaozhiyan/blog/item/dc1c4f093af212a52fddd4a6.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/%BC%BC%CA%F5%5Fhtml%26%2347%3Bcss%26%2347%3Bjs">技术_html&#47;css&#47;js</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/dc1c4f093af212a52fddd4a6.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月20日 星期五  下午 05:11</pubDate>
        <category><![CDATA[技术_html&#47;css&#47;js]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/dc1c4f093af212a52fddd4a6.html</guid>
</item>

<item>
        <title><![CDATA[专业网站设计师要求]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/affd42ecd10883db2e2e2189.html]]></link>
        <description><![CDATA[
		
		首先，设计师必须具备一定的专业修养，你有没有问过自己，你够不够专业？如果自己都不专业怎么能该客户解决实际问题。所以设计师自身的专业修养是很重用的，这需要在不段的工作中提升自己的专业水平。<br>
设计师的自信也非常重要的。我一直认为自信来源于专业，专业自信的设计师在与客户沟通中会给客户留下较好或较高的评价，而反之能力与自信缺乏的设计师在与客户沟通中会给客户留下许多误解让客户认为你不够专业，使顾客对设计师对公司同时失去信心。客户通过与设计师进行交谈时了解公司，不论这个设计师在公司地位是高还是低都是代表着公司的整体实力。设计师不够自信就会导致客户对公司的实力表示怀疑。通常造成这种怀疑的原因来自设计师自身。<br>
<br>
自我推荐，大多数的设计师在谈判中会从公司的情况谈起，但有一点必须慎记：在介绍公司的同时适当的自我推销，在实际谈判中一般客户最关心的是价格，工程质量和后期服务。所以我们要让客户进一步的了解我们设计师自身的能力及公司的运作方针。<br>
<br>
在受金融风暴影响的情况下，价格、质量、后期服务相同的情况下，各家公司都在研究从方方面面下功夫使客户如何选择自己的公司，选择你作为他们的设计师，这就要从我们个人及公司整体优势下手，就要学会如何自我推销，告诉客户告诉自己，你很专业很自信。<br>
<br>
交谈中要让客户充分表达他的想法，专业的设计师善于聆听客户的谈话，有助于你了解客户的需要和更多的信息，真实想法，亦有助于建立与客户的相互信任；交谈中应以轻松自如的心态进行表达。过于紧张会减少所提的建设性意见的分量同时也会削弱你的说服力。 <a href="http://hi.baidu.com/gaozhiyan/blog/item/affd42ecd10883db2e2e2189.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/%CD%F8%D5%BE%BC%DC%B9%B9">网站架构</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/affd42ecd10883db2e2e2189.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月17日 星期二  下午 12:01</pubDate>
        <category><![CDATA[网站架构]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/affd42ecd10883db2e2e2189.html</guid>
</item>

<item>
        <title><![CDATA[网站建设规划]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/9c278a1c9fec148186d6b68f.html]]></link>
        <description><![CDATA[
		
		<span style="font-size: 13px; line-height: 1.3em"><strong>一、建设网站的目的与功能（模式）定位</strong> </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">1、为什么要建，为了展示推广企业产品，还是什么原因，还是为了扩展业务等，总得有需求。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">2、把握好你的内容，也就是对内容整合，然后确定你的网站功能或是模式（B2B,B2C或是，要定位好最能展示你所需求的模式）。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">3、模式确定后，目的就很明确。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">4、还要考虑网站发展到一定程度怎么扩展，或是加论坛，或是什么，都要规划好，并不盲目，如果发展情况有变，那是好事情，更有挑战意义，那你的计划还是没有白费，因为有这个计划做基础，你才能分析出更好的计划或是实施更好的计划。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">5、强调一点，大多公司因为这个做的很差，没有认真实行明白老板的意思，而导致老板亏死，当然与老板用人有关系，呵呵，本人体会很深。 </span><wbr></wbr><br>
<br>
<span style="font-size: 13px; line-height: 1.3em"><strong>二、市场分析</strong> </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">1、相关行业市场怎样，有什么趋势特点等，合适在互联网发展不？考虑明白 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">2、分析竞争对手的市场战略，对手有网站，对手有多少，对手网站大多模式，对手的优势在哪里，缺陷在那里。对手投入的技术人力，要考虑分析，不然你只考虑你的野心，你去死吧。要明白什么事情友好从小做起，不要脱离实际，现在那么多企业倒闭，有的是原因，并不是没原因，经济危机就怎样，别人的公司能过难关，为什么你的不能，你吃什么去了。有点骂过火，但对大家有好处，包括我自己。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">3、就是公司自身条件，小公司没有什么的，只要合理，你一样赚大钱。 </span><wbr></wbr><br>
<br>
<span style="font-size: 13px; line-height: 1.3em"><strong>三、网站技术解决（这个是我不会的，但我懂，不然怎么跟技术员沟通）</strong> </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">1、采用自建服务器，还是租呢，自己选择，总之不要在这里出错。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">2、选择操作系统，这方面一定要考虑到投入成本、功能开发、稳定性和安全性，技术员一定要找好，不要告诉我为了省1000块你请个菜鸟，根据你的实际把。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">3、采用什么方案，自己开发，还是网上找（电子商务方案）。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">4、安全不用我说了吧。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">5、相关程序开发：ASP\JSP|CGL、数据库程序等，要决定好。要我选，我选ASP，不为什么，我老公做这块的，方便，技术也好，干嘛不用，哈哈。 </span><wbr></wbr><br>
<br>
<strong><span style="font-size: 13px; line-height: 1.3em">四、网站内容规划 </span><wbr></wbr><br>
</strong><span style="font-size: 13px; line-height: 1.3em">1、根据网站的目的和功能规划网站内容，一般企业网站应包括：公司简介、产品介绍、服务内容、价格信息、联系方式、网上定单等基本内容。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">2、电子商务类网站要提供会员注册、详细的商品服务信息、信息搜索查询、定单确认、付款、个人信息保密措施、相关帮助等。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">3、如果网站栏目比较多，则考虑采用网站编程专人负责相关内容。 注意：网站内容是网站吸引浏览者最重要的因素，无内容或不实用的信息不会吸引匆匆浏览的访客。可事先对人们希望阅读的信息进行调查，并在网站发布后调查人们对网站内容的满意度，以及时调整网站内容。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">4、还是那句老话，要什么具体分析好，做好。就算你穿一件很漂亮的衣服，但你思想那样，还是没人看你，女人也一样，就算你漂亮，你没内才，你还是得不到别人肯定。不要自己肯定自己吧，敢自己肯定自己的人一是有内才有能力，二是自大乱夸的人。哈哈 </span><wbr></wbr><br>
<br>
<strong><span style="font-size: 13px; line-height: 1.3em">五、网页设计 </span><wbr></wbr><br>
</strong><span style="font-size: 13px; line-height: 1.3em">　1、网页设计美术设计要求，网页美术设计一般要与企业整体形象一致，要符合CI规范。要注意网页色彩、图片的应用及版面规划，保持网页的整体一致性。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">　2、在新技术的采用上要考虑主要目标访问群体的分布地域、年龄阶层、网络速度、阅读习惯等。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">　3、制定网页改版计划，如半年到一年时间进行较大规模改版等。 </span><wbr></wbr><br>
<div style="font-size: 16px"> </div>
<div style="font-size: 16px">
<p><br>
<span style="font-size: 13px; line-height: 1.3em"><strong>六、网站维护</strong> </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">1、很重要一点，前面工作做的好，后面就很简单，但前面没做好，后面维护没有用，真的。不要取巧。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">2、服务器及相关软硬件的维护，对可能出现的问题进行评估，制定响应时间。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">3、数据库维护，有效地利用数据是网站维护的重要内容，因此数据库的维护要受到重视。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">4、内容更新等等。 </span><wbr></wbr><br>
<br>
<span style="font-size: 13px; line-height: 1.3em"><strong>七、网站测试</strong> </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">不管是内容，还是技术方面，都要测试，经常有这样的事情发生，自己做的网站打不开，用不了。还有守服务器那个死小子在忽悠你，上班在睡觉，或是因为你不懂，他说一些连自己也不懂的问题找借口说是别的原因，马上开除他。哈哈 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">还有那老板为了节约，可笑的不重视服务器，那你走人，干吗？网站都老挂，还做个屁啊。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">1、服务器稳定性、安全性。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">　　2、程序及数据库测试。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">　　3、网页兼容性测试，如浏览器、显示器。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">　　4、根据需要的其他测试。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">　　八、网站发布与推广 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">　　1、网站测试后进行发布的公关，广告活动。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">　　2、搜索引掣登记等。 </span><wbr></wbr><br>
<br>
<strong><span style="font-size: 13px; line-height: 1.3em">八、网站发布与推广 </span><wbr></wbr><br>
</strong><span style="font-size: 13px; line-height: 1.3em">1、网站测试后进行发布的公关，广告活动。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">2、搜索引掣登记等。 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">3、推广的办法很多，不要局限，不要老土，别人用什么，你就用什么，网络跟时间赛跑，你不要老落后一拍，我在推广方面有自己的见解，但并不是高手，有机会给大家总结下我的特殊方式，健康的。不健康的用上也没用，强调一个很重要的事情，不要以流量为主，内容很重要，内容好，推广自然好，但不要盲目的认为流量就是推广目标 </span><wbr></wbr><br>
<span style="font-size: 13px; line-height: 1.3em">4、推广与销售也要联系在一起，并不是要你把一个人当两个人用，根据你的实际情况来安排，不然谁给你做。别以为招人不难，那要看招什么人。 </span><wbr></wbr><br>
<br>
<strong><span style="font-size: 13px; line-height: 1.3em">九、网站建设日程表 </span><wbr></wbr><br>
</strong><br>
<span style="font-size: 13px; line-height: 1.3em"><strong>十、费用明细</strong> </span><wbr></wbr><br>
<br>
<span style="font-size: 13px; line-height: 1.3em"><strong>十一、小女子在这里最后强调，从实际出发</strong><br>
</span><span style="font-size: 13px; line-height: 1.3em">初中小学的课没上好没关系，你记住一点，从实际出发，合理安排，只有有市场，把握你的优势，你的网站做的就是成功。就算你严格，也没人怪你，因为你的网站养活很多人。如果不实际，挂掉你的网站是正常，我鄙视做事情不实际的人，因为他有那么好的机会都不知道珍惜，失败是活该。嘴巴很毒的我自己刚开始就是不实际，所以毕业快两年了还没成功，还是个没事业的人，还是一个为别人打工却不知道努力的人，现在醒悟了，还好没晚。 </span><wbr></wbr><br>
<br>
<span style="font-size: 13px; line-height: 1.3em"><strong>十二、最后再强调，做事情要有狠心<br>
</strong>（把女人的毒放在认真做事情上面，成功了没人说你是坏女人，把男人的毒放在事业上，没人说你不是男人）</span></p>
<p><span style="font-size: 13px; line-height: 1.3em">转自一小女子</span></p>
</div> <a href="http://hi.baidu.com/gaozhiyan/blog/item/9c278a1c9fec148186d6b68f.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/%CD%F8%D5%BE%BC%DC%B9%B9">网站架构</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/9c278a1c9fec148186d6b68f.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月17日 星期二  上午 11:57</pubDate>
        <category><![CDATA[网站架构]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/9c278a1c9fec148186d6b68f.html</guid>
</item>

<item>
        <title><![CDATA[网站架构师成长之路]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/161a0001a3da0d047aec2c87.html]]></link>
        <description><![CDATA[
		
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  对于任何一个软件开发人员来说，架构师都是一个令人向往的角色。就连世界首富比尔盖茨在2000年卸任公司CEO的同时，也担任了微软公司的荣誉角色&ldquo;首席软件架构师&rdquo;，可见&ldquo;架构师&rdquo;这一称谓的吸引力。架构师是公司的&ldquo;金领&rdquo;，有着非常高的收入，很少需要考虑生存的问题，从而有更多的精力思考关键技术问题，形成&ldquo;强者愈强&rdquo;的良性循环。部分优秀的开发人员在工作了一定时间后，就要开始考虑自己的未来到底向哪个方向发展。如果开发人员的沟通能力强过技术能力，在补充一定的项目管理知识后，可以向技术管理的方向转型。如果其对技术一直很感兴趣，而沟通能力也不弱，则可以试着进一步加强技术修养，以期向架构师的方向发展，最终&ldquo;修成正果&rdquo;。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  那么，到底什么是架构师呢？所谓的架构师，应该是一个技术企业的最高技术决策者。他主要负责公司软件产品或软件项目的技术路线与技术框架的制订。好的架构师都是善良的独裁者，具有很强的技术、良好的写作能力、良好的口头表达能力，能够在各个层次进行沟通。从开发人员到架构师的成长应该是阶梯式的，一般来讲开发人员在刚刚开始工作时只能开发简单的独立软件模块，慢慢的随着经验的增长，他开始接触一些相互之间有信息传递的模块，而后来，他会发现自己接到的开发任务已经不是一个独立的单体，这些任务由一些专门的软件部分组成，可能包含数据库，工作流引擎，消息服务等等各种功能模块，可能分布在不同的服务器上，所有的部分协同起来，完成软件功能。而这时候，体系结构的好坏将直接决定了系统的性能和可扩展性，而就在这时候，这名优秀的开发人员也开始思考架构师应该思考的问题了，或者说，他向成长为架构师的道路迈出了一大步。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  什么是架构师最具价值的技能呢？就是要了解不同的知识，做一个&ldquo;杂家&rdquo;或者说&ldquo;博学家&rdquo;。当然，如果你的数据库技术非常棒，或者你在工作流引擎方面具有不可超越的专家知识，那也是很不错的。好的架构师有好多都是从专家成长过来的。但是，这不是架构师应该做的事情，架构师应该做的是了解所有的东西，既了解技术的宏观面，又了解技术的细节。真正的架构师不仅仅要了解软件，也要了解硬件，在关键的部位使用合适的硬件来取代软件，可以成倍甚至成百倍的提高整个系统的效率。下面我将会以互联网行业对的架构师的要求为例，向大家讲解作为架构师应该具备的知识。<br>
<br>
互联网行业是当前最激动人心的行业之一，很多的创新都来自于这个行业，而每一个大型的网站如Google，Yahoo，Myspace等都需要解决一个非常复杂的问题，就是网站的分布式向外扩展(Scale Out)的问题。解决这个问题，需要最优秀的架构师对业务进行剖析，利用软硬件将网站进行重构，甚至根据业务研发相应的分布式技术，解决网站复杂的分布式计算的问题。如果你想在这个行业中成为一名架构师的话，需要至少掌握网络知识，硬件，软件，网站优化等方方面面的知识：<br>
<br>
1． 网络知识。<br>
当前的软件已经绝对不是那种仅仅跑在一台单机上的孤立应用了。不仅仅是在互联网行业，任何一个行业的软件，都要求其具有网络功能。因此，网络知识是架构师必备的知识。我们所说的网络知识，不仅仅包括TCP/IP，http等互联网行业常用的软件协议，也包括网络规划，甚至更具体的说，根据网站应用所处的地理环境进行网络规划。比如人们常说：&ldquo;这世界上最远的距离不是生与死的距离，而是电信到网通的距离&rdquo;（笑）如果应用是建立在中国的，就要考虑电信用户和网通用户访问网站的速度应该都比较快才可以。这时候的解决方案可能有多种，比如采用CDN（Content Delivery Network内容分发网络）使得网站的内容发布到离用户最近的服务器，又可以采用把服务器放在一些所谓的双线机房中，甚至将几种方案结合起来使用。这些都统统归到网络知识中。做为公司的架构师，要对这些知识都有所了解，才有助于在遇到问题时找到最佳答案。<br>
<br>
2． 硬件知识。<br>
了解硬件的极限，是架构师的基本功。我见过一些人，他们的眼中软件硬件都是没有极限的，需要资源就申请，系统性能下降了就买更高级的设备。然而，硬件的性能有很大一部分取决于I/O设备。而这些I/O设备依靠的都是机械物理运动，这种运动是有极限的。因此当资源访问量增大到一定的程度时，这种物理运动将成为瓶颈。比如说，在开发网站的过程中，记录访客的状态是一件很重要的事情，一般来说可以使用HttpSession来记录。而HttpSession的存储问题将是一个很大的挑战，尤其是多机共享Session时，将HttpSession存成文件并通过多机共享或网络备份的方式来解决分布式的问题是常用的方案，然而，架构师必须考虑到这种方案是有I/O极限限制的，很难扩展到超过一定规模的大型网络。同时，架构师应该了解目前最近的硬件发展是否对软件系统会造成一定的影响，比如在多核的条件下是否对软件编程有新的要求，是否会对运行在虚拟机和非虚拟机上的程序有影响等等。<br>
<br>
3． 软件知识。<br>
软件知识所包含的范围就更加广泛了。对于互联网行业来讲，架构师要了解操作系统，数据库，应用服务器等各方面的知识。比如说，如果网站使用的操作系统是Linux，就要了解这个Linux版本的性能与局限性，比如说最多可以存放的单个文件为多大。有的数据库的数据是以单个文件来存放的，虽然我们很少见到数据库中的数据多到不能再放入一条记录的情况，但是作为架构师，请时刻注意，这种可能性是有的。而且如果你有幸在一家高速成长的互联网企业中，而你所负责的应用又没有经过优化的话，可能你会很快见到这种现象。这种现象的发生可能是由于操作系统不支持大文件的原因，也可能是数据库不支持大文件。不论如何，架构师应该在这种现象发生之前就把一切都准备好。对数据库中表的拆分是架构师应该遇到的另外一个困难。一般来说增加应用服务器比较简单而增加数据库服务器则是比较复杂的问题，如果一个站点由多个数据库支持，架构师需要考虑如何在保证数据一致的情况下，让多个数据库分担压力。有些解决方案是将数据库的读写分开，使得大多数的查询sql不经过核心数据库，而只是访问数据库的副本，但事实上，这种方式也只能维护规模不大的网站。对于大型的网站来说，把业务分散到不同的数据库中，只共享必要的数据，才是合理的提高网站扩展性的解决方案。<br>
<br>
4． 其他知识。<br>
作为系统架构师，可能还需要对分布式系统，负载均衡，网络安全，数据监控等等各方面都有所了解。不仅仅是了解理论知识，也要对相关的产品和业界进展有一定的认识。比如说做负载均衡最好的产品是那种。目前最常用的备份策略是什么，有什么缺点。如何使用缓存，如何做好日志分析等等。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp; 刚刚谈到的是架构师需要掌握的知识，然而，冰冻三尺非一日之寒。这个过程需要我们慢慢的积累。如果你已经进入到公司进行软件开发，请时刻关注你所开发软件的性能与可扩展性，而不仅仅局限在功能上，时刻想着任何一个简单的问题：我开发的模块如果放在多人并发的环境下会怎样，慢慢的就会有所心得。如果你还是一个在校学生，不要想着自己离架构师这个职位还很遥远。要知道，成为架构师的修炼之路是很长的，甚至可以说是终身的，因此早点进入学习状态，不断修炼自己。在学校期间学好离散数学，数据结构，操作系统，编译原理，体系结构，数据库原理等关键课程，并积极寻找机会到外面实习，增长自己的工作经验。如果有机会去到一些技术主导的公司中工作，就一定不要放弃这种机会，慢慢就会成长起来。最重要的，你会养成关注技术，勤于思考的好习惯。当有一天你发现自己对任何技术难题都可以一眼看到其本质，并能够将其分解为一个个可轻松解决的模块，你会由衷的感觉到知识给你带来的快乐，或许那一天，你已经是一个架构师了。 <a href="http://hi.baidu.com/gaozhiyan/blog/item/161a0001a3da0d047aec2c87.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/%CD%F8%D5%BE%BC%DC%B9%B9">网站架构</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/161a0001a3da0d047aec2c87.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月17日 星期二  上午 11:45</pubDate>
        <category><![CDATA[网站架构]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/161a0001a3da0d047aec2c87.html</guid>
</item>

<item>
        <title><![CDATA[vmweaver 增加第一硬盘磁盘空间]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/4e718bb7a63db8fe30add1f9.html]]></link>
        <description><![CDATA[
		
		<p>F:\VMware&gt;vmware-vdiskmanager -x 20Gb E:\RE-VirtualMachine\Windows&quot; &quot;Server&quot; &quot;20<br>
03&quot; &quot;Enterprise&quot; &quot;Edition.vmdk</p>
<p><br>
Disk expansion completed successfully</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/%BC%BC%CA%F5%5F%C6%E4%CB%FB">技术_其他</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/4e718bb7a63db8fe30add1f9.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月16日 星期一  下午 08:33</pubDate>
        <category><![CDATA[技术_其他]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/4e718bb7a63db8fe30add1f9.html</guid>
</item>

<item>
        <title><![CDATA[网址备份]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/37577f234ba824589922ed39.html]]></link>
        <description><![CDATA[
		
		<p>网站优化_搜索引擎优化_seo<br>
<a href="http://www.seochat.org/">http://www.seochat.org/</a></p>
<p>SEO十万个为什么<br>
<a href="http://www.seowhy.com/">http://www.seowhy.com/</a></p>
<p>SEO论坛<br>
<a href="http://www.seobbs.net/">http://www.seobbs.net/</a></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/%CD%F8%D6%B7">网址</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/37577f234ba824589922ed39.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月16日 星期一  下午 06:55</pubDate>
        <category><![CDATA[网址]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/37577f234ba824589922ed39.html</guid>
</item>

<item>
        <title><![CDATA[JSP调用JavaBean在网页上动态生成柱状图]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/c7e53024a7a21a21d50742d3.html]]></link>
        <description><![CDATA[
		
		第一步：创建一个Java Bean用来生成jpg文件<br>
<br>
　　源程序如下：<br>
<br>
//生成图片的 Java Bean<br>
//作者:崔冠宇<br>
//日期:2001-08-24<br>
import java.io.*;<br>
import java.util.*;<br>
import com.sun.image.codec.jpeg.*;<br>
import java.awt.image.*;<br>
import java.awt.*;<br>
<br>
public class ChartGraphics {<br>
　BufferedImage image;<br>
　public void createImage(String fileLocation) {<br>
　　try {<br>
　　　FileOutputStream fos = newFileOutputStream(fileLocation);<br>
　　　BufferedOutputStream bos = newBufferedOutputStream(fos);<br>
　　　JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(bos);<br>
　　　encoder.encode(image);<br>
　　　bos.close();<br>
　　} catch(Exception e) {<br>
　　　System.out.println(e);<br>
　　}<br>
　}<br>
<br>
　public void graphicsGeneration(int h1,int h2,int h3,int h4,inth5) {<br>
<br>
　　final int X=10;<br>
　　int imageWidth = 300;//图片的宽度<br>
　　int imageHeight = 300;//图片的高度<br>
　　int columnWidth=30;//柱的宽度<br>
　　int columnHeight=200;//柱的最大高度<br>
<br>
　　ChartGraphics chartGraphics = new ChartGraphics();<br>
　　chartGraphics.image = new BufferedImage(imageWidth,imageHeight, BufferedImage.TYPE_INT_RGB);<br>
　　Graphics graphics = chartGraphics.image.getGraphics();<br>
　　graphics.setColor(Color.white);<br>
　　graphics.fillRect(0,0,imageWidth,imageHeight);<br>
　　graphics.setColor(Color.red);<br>
　　graphics.drawRect(X+1*columnWidth, columnHeight-h1,columnWidth, h1);<br>
　　graphics.drawRect(X+2*columnWidth, columnHeight-h2,columnWidth, h2);<br>
　　graphics.drawRect(X+3*columnWidth, columnHeight-h3,columnWidth, h3);<br>
　　graphics.drawRect(X+4*columnWidth, columnHeight-h4,columnWidth, h4);<br>
　　graphics.drawRect(X+5*columnWidth, columnHeight-h5,columnWidth, h5);<br>
　　chartGraphics.createImage('D:\\temp\\chart.jpg');<br>
　}<br>
}<br>
<br>
<br>
　　解释：createImage(StringfileLocation)方法用于创建JPG图片,参数fileLocation为文件路径<br>
<br>
　　graphicsGeneration(int h1,int h2,int h3,int h4,inth5)方法用于绘出图片的内容,参数h1……h5为每一个长方形的高度<br>
<br>
　　第二步：创建另一个JavaBean从文本文件中读取数据(每一个长方形的高度)，在实际应用中数据存储在Oracle数据库中<br>
<br>
　　源程序如下:<br>
<br>
//读取Text文件中数据的 Java Bean<br>
//作者:崔冠宇<br>
//日期:2001-08-24<br>
import java.io.*;<br>
public class GetData {<br>
　int heightArray[] = new int[5];<br>
　public int[] getHightArray() {<br>
　　try {<br>
　　　RandomAccessFile randomAccessFile = new RandomAccessFile　　('d:\\temp\\ColumnHeightArray.txt','r');<br>
　　　for (int i=0;i＜5;i++)<br>
　　　{<br>
　　　　heightArray[i] =Integer.parseInt(randomAccessFile.readLine());<br>
　　　}<br>
　　}<br>
　　catch(Exception e) {<br>
　　　System.out.println(e);<br>
　　}<br>
　　return heightArray;<br>
　}<br>
}<br>
<br>
　　解释：getHightArray()用于从文本中读取数据,将文本中的String类型转换为int类型，并以数组类型返回。<br>
<br>
　　第三步：创建JSP文件<br>
<br>
　　源程序如下：<br>
<br>
<br>
＜%@ page import='ChartGraphics' %＞<br>
＜%@ page import='GetData' %＞<br>
＜jsp:useBean id='cg'<br>
＜jsp:useBean id='gd'<br>
＜%!<br>
int height[]=new int[5];<br>
%＞<br>
＜%<br>
height=gd.getHightArray();<br>
cg.graphicsGeneration(height[0],height[1],height[2],height[3],height[4]);<br>
%＞<br>
＜html＞<br>
＜body＞<br>
＜imgsrc=&quot;http://doc.readmen.com/7/d:\temp\chart.jpg&quot;＞＜/img＞<br>
＜/body＞<br>
＜/html＞<br>
<br>
　　JSP首先调用Bean(GetData..class)读取文件中的数据，再调用Bean(ChartGraphics.class)生成图片,最后显示图片。<br>
<br>
　　由于文本(ColumnHeightArray.txt)中的数据可以随时变化，因此生成的图片中的5个长方形的高度是随之变化的，从而实现了图片的动态生成.该设计思想还可以用于制作网站的投票系统 <a href="http://hi.baidu.com/gaozhiyan/blog/item/c7e53024a7a21a21d50742d3.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/%BC%BC%CA%F5%5Fjava">技术_java</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/c7e53024a7a21a21d50742d3.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月03日 星期二  下午 03:22</pubDate>
        <category><![CDATA[技术_java]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/c7e53024a7a21a21d50742d3.html</guid>
</item>

<item>
        <title><![CDATA[java 汉字转拼音]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/9c278a1cc7b82c8186d6b6d3.html]]></link>
        <description><![CDATA[
		
		<p>/**<br>
#############################################################################<br>
# DESCRIBE 将汉字转化成拼音<br>
# DATE 2006-7-12<br>
# COMPANY FLX<br>
# PORJECT JAVA<br>
#############################################################################<br>
*/<br>
import java.util.Iterator;<br>
import java.util.LinkedHashMap;<br>
import java.util.Set;</p>
<p>public class CnToSpell {<br>
private static LinkedHashMap spellMap = null;</p>
<p>static {<br>
if (spellMap == null) {<br>
&nbsp;&nbsp;  spellMap = newLinkedHashMap(400);<br>
}<br>
initialize();<br>
System.out.println(&quot;Chinese transfer SpellDone.&quot;);<br>
}</p>
<p>private CnToSpell() {<br>
}</p>
<p>/**<br>
* 获得单个汉字的Ascii.<br>
* @param cn char<br>
* 汉字字符<br>
* @return int<br>
* 错误返回 0,否则返回ascii<br>
*/<br>
public static int getCnAscii(char cn) {<br>
byte[] bytes =(String.valueOf(cn)).getBytes();<br>
if (bytes == null || bytes.length &gt; 2 ||bytes.length &lt;= 0) { //错误<br>
&nbsp;&nbsp;  return 0;<br>
}<br>
if (bytes.length == 1) { //英文字符<br>
&nbsp;&nbsp;  return bytes[0];<br>
}<br>
if (bytes.length == 2) { //中文字符<br>
&nbsp;&nbsp;  int hightByte = 256 +bytes[0];<br>
&nbsp;&nbsp;  int lowByte = 256 +bytes[1];<br>
&nbsp;&nbsp;  int ascii = (256 * hightByte +lowByte) - 256 * 256;<br>
&nbsp;&nbsp;  return ascii;<br>
}<br>
return 0; //错误<br>
}</p>
<p>/**<br>
*返回字符串的全拼,是汉字转化为全拼,其它字符不进行转换<br>
* @param cnStr String<br>
* 字符串<br>
* @return String<br>
* 转换成全拼后的字符串<br>
*/<br>
public static String getFullSpell(String cnStr){<br>
if (null == cnStr || &quot;&quot;.equals(cnStr.trim())){<br>
&nbsp;&nbsp;  return cnStr;<br>
}</p>
<p>char[] chars = cnStr.toCharArray();<br>
StringBuffer retuBuf = new StringBuffer();<br>
for (int i = 0, Len = chars.length; i &lt; Len;i++) {<br>
&nbsp;&nbsp;  int ascii =getCnAscii(chars[i]);<br>
&nbsp;&nbsp;  if (ascii == 0) {//取ascii时出错<br>
&nbsp;&nbsp;&nbsp;  retuBuf.append(chars[i]);<br>
&nbsp;&nbsp;  } else {<br>
&nbsp;&nbsp;&nbsp;  String spell= getSpellByAscii(ascii);<br>
&nbsp;&nbsp;&nbsp;  if (spell ==null) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;  retuBuf.append(chars[i]);<br>
&nbsp;&nbsp;&nbsp;  } else{<br>
&nbsp;&nbsp;&nbsp;&nbsp;  retuBuf.append(spell);<br>
&nbsp;&nbsp;&nbsp;  } // end ofif spell == null<br>
&nbsp;&nbsp;  } // end of if ascii &lt;=-20400<br>
} // end of for</p>
<p>return retuBuf.toString();<br>
}</p>
<p>/**<br>
* 根据ASCII码到SpellMap中查找对应的拼音<br>
* @param ascii int<br>
* 字符对应的ASCII<br>
* @return String<br>
*拼音,首先判断ASCII是否&gt;0&amp;&lt;160,如果是返回对应的字符,<br>
*<br>
否则到SpellMap中查找,如果没有找到拼音,则返回null,如果找到则返回拼音.<br>
*/<br>
public static String getSpellByAscii(int ascii){<br>
if (ascii &gt; 0 &amp;&amp; ascii &lt; 160) {//单字符<br>
&nbsp;&nbsp;  return String.valueOf((char)ascii);<br>
}</p>
<p>if (ascii &lt; -20319 || ascii &gt; -10247) {//不知道的字符<br>
&nbsp;&nbsp;  return null;<br>
}</p>
<p>Set keySet = spellMap.keySet();<br>
Iterator it = keySet.iterator();</p>
<p>String spell0 = null;<br>
;<br>
String spell = null;</p>
<p>int asciiRang0 = -20319;<br>
int asciiRang;<br>
while (it.hasNext()) {</p>
<p>&nbsp;&nbsp;  spell = (String)it.next();<br>
&nbsp;&nbsp;  Object valObj =spellMap.get(spell);<br>
&nbsp;&nbsp;  if (valObj instanceof Integer){<br>
&nbsp;&nbsp;&nbsp;  asciiRang =((Integer) valObj).intValue();</p>
<p>&nbsp;&nbsp;&nbsp;  if (ascii&gt;= asciiRang0 &amp;&amp; ascii &lt; asciiRang) {//区间找到<br>
&nbsp;&nbsp;&nbsp;&nbsp;  return (spell0 == null) ? spell : spell0;<br>
&nbsp;&nbsp;&nbsp;  } else{<br>
&nbsp;&nbsp;&nbsp;&nbsp;  spell0 = spell;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  asciiRang0 = asciiRang;<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;  }<br>
}</p>
<p>return null;</p>
<p>}</p>
<p>private static void initialize() {<br>
spellPut(&quot;a&quot;, -20319);<br>
spellPut(&quot;ai&quot;, -20317);<br>
spellPut(&quot;an&quot;, -20304);<br>
spellPut(&quot;ang&quot;, -20295);<br>
spellPut(&quot;ao&quot;, -20292);<br>
spellPut(&quot;ba&quot;, -20283);<br>
spellPut(&quot;bai&quot;, -20265);<br>
spellPut(&quot;ban&quot;, -20257);<br>
spellPut(&quot;bang&quot;, -20242);<br>
spellPut(&quot;bao&quot;, -20230);<br>
spellPut(&quot;bei&quot;, -20051);<br>
spellPut(&quot;ben&quot;, -20036);<br>
spellPut(&quot;beng&quot;, -20032);<br>
spellPut(&quot;bi&quot;, -20026);<br>
spellPut(&quot;bian&quot;, -20002);<br>
spellPut(&quot;biao&quot;, -19990);<br>
spellPut(&quot;bie&quot;, -19986);<br>
spellPut(&quot;bin&quot;, -19982);<br>
spellPut(&quot;bing&quot;, -19976);<br>
spellPut(&quot;bo&quot;, -19805);<br>
spellPut(&quot;bu&quot;, -19784);<br>
spellPut(&quot;ca&quot;, -19775);<br>
spellPut(&quot;cai&quot;, -19774);<br>
spellPut(&quot;can&quot;, -19763);<br>
spellPut(&quot;cang&quot;, -19756);<br>
spellPut(&quot;cao&quot;, -19751);<br>
spellPut(&quot;ce&quot;, -19746);<br>
spellPut(&quot;ceng&quot;, -19741);<br>
spellPut(&quot;cha&quot;, -19739);<br>
spellPut(&quot;chai&quot;, -19728);<br>
spellPut(&quot;chan&quot;, -19725);<br>
spellPut(&quot;chang&quot;, -19715);<br>
spellPut(&quot;chao&quot;, -19540);<br>
spellPut(&quot;che&quot;, -19531);<br>
spellPut(&quot;chen&quot;, -19525);<br>
spellPut(&quot;cheng&quot;, -19515);<br>
spellPut(&quot;chi&quot;, -19500);<br>
spellPut(&quot;chong&quot;, -19484);<br>
spellPut(&quot;chou&quot;, -19479);<br>
spellPut(&quot;chu&quot;, -19467);<br>
spellPut(&quot;chuai&quot;, -19289);<br>
spellPut(&quot;chuan&quot;, -19288);<br>
spellPut(&quot;chuang&quot;, -19281);<br>
spellPut(&quot;chui&quot;, -19275);<br>
spellPut(&quot;chun&quot;, -19270);<br>
spellPut(&quot;chuo&quot;, -19263);<br>
spellPut(&quot;ci&quot;, -19261);<br>
spellPut(&quot;cong&quot;, -19249);<br>
spellPut(&quot;cou&quot;, -19243);<br>
spellPut(&quot;cu&quot;, -19242);<br>
spellPut(&quot;cuan&quot;, -19238);<br>
spellPut(&quot;cui&quot;, -19235);<br>
spellPut(&quot;cun&quot;, -19227);<br>
spellPut(&quot;cuo&quot;, -19224);<br>
spellPut(&quot;da&quot;, -19218);<br>
spellPut(&quot;dai&quot;, -19212);<br>
spellPut(&quot;dan&quot;, -19038);<br>
spellPut(&quot;dang&quot;, -19023);<br>
spellPut(&quot;dao&quot;, -19018);<br>
spellPut(&quot;de&quot;, -19006);<br>
spellPut(&quot;deng&quot;, -19003);<br>
spellPut(&quot;di&quot;, -18996);<br>
spellPut(&quot;dian&quot;, -18977);<br>
spellPut(&quot;diao&quot;, -18961);<br>
spellPut(&quot;die&quot;, -18952);<br>
spellPut(&quot;ding&quot;, -18783);<br>
spellPut(&quot;diu&quot;, -18774);<br>
spellPut(&quot;dong&quot;, -18773);<br>
spellPut(&quot;dou&quot;, -18763);<br>
spellPut(&quot;du&quot;, -18756);<br>
spellPut(&quot;duan&quot;, -18741);<br>
spellPut(&quot;dui&quot;, -18735);<br>
spellPut(&quot;dun&quot;, -18731);<br>
spellPut(&quot;duo&quot;, -18722);<br>
spellPut(&quot;e&quot;, -18710);<br>
spellPut(&quot;en&quot;, -18697);<br>
spellPut(&quot;er&quot;, -18696);<br>
spellPut(&quot;fa&quot;, -18526);<br>
spellPut(&quot;fan&quot;, -18518);<br>
spellPut(&quot;fang&quot;, -18501);<br>
spellPut(&quot;fei&quot;, -18490);<br>
spellPut(&quot;fen&quot;, -18478);<br>
spellPut(&quot;feng&quot;, -18463);<br>
spellPut(&quot;fo&quot;, -18448);<br>
spellPut(&quot;fou&quot;, -18447);<br>
spellPut(&quot;fu&quot;, -18446);<br>
spellPut(&quot;ga&quot;, -18239);<br>
spellPut(&quot;gai&quot;, -18237);<br>
spellPut(&quot;gan&quot;, -18231);<br>
spellPut(&quot;gang&quot;, -18220);<br>
spellPut(&quot;gao&quot;, -18211);<br>
spellPut(&quot;ge&quot;, -18201);<br>
spellPut(&quot;gei&quot;, -18184);<br>
spellPut(&quot;gen&quot;, -18183);<br>
spellPut(&quot;geng&quot;, -18181);<br>
spellPut(&quot;gong&quot;, -18012);<br>
spellPut(&quot;gou&quot;, -17997);<br>
spellPut(&quot;gu&quot;, -17988);<br>
spellPut(&quot;gua&quot;, -17970);<br>
spellPut(&quot;guai&quot;, -17964);<br>
spellPut(&quot;guan&quot;, -17961);<br>
spellPut(&quot;guang&quot;, -17950);<br>
spellPut(&quot;gui&quot;, -17947);<br>
spellPut(&quot;gun&quot;, -17931);<br>
spellPut(&quot;guo&quot;, -17928);<br>
spellPut(&quot;ha&quot;, -17922);<br>
spellPut(&quot;hai&quot;, -17759);<br>
spellPut(&quot;han&quot;, -17752);<br>
spellPut(&quot;hang&quot;, -17733);<br>
spellPut(&quot;hao&quot;, -17730);<br>
spellPut(&quot;he&quot;, -17721);<br>
spellPut(&quot;hei&quot;, -17703);<br>
spellPut(&quot;hen&quot;, -17701);<br>
spellPut(&quot;heng&quot;, -17697);<br>
spellPut(&quot;hong&quot;, -17692);<br>
spellPut(&quot;hou&quot;, -17683);<br>
spellPut(&quot;hu&quot;, -17676);<br>
spellPut(&quot;hua&quot;, -17496);<br>
spellPut(&quot;huai&quot;, -17487);<br>
spellPut(&quot;huan&quot;, -17482);<br>
spellPut(&quot;huang&quot;, -17468);<br>
spellPut(&quot;hui&quot;, -17454);<br>
spellPut(&quot;hun&quot;, -17433);<br>
spellPut(&quot;huo&quot;, -17427);<br>
spellPut(&quot;ji&quot;, -17417);<br>
spellPut(&quot;jia&quot;, -17202);<br>
spellPut(&quot;jian&quot;, -17185);<br>
spellPut(&quot;jiang&quot;, -16983);<br>
spellPut(&quot;jiao&quot;, -16970);<br>
spellPut(&quot;jie&quot;, -16942);<br>
spellPut(&quot;jin&quot;, -16915);<br>
spellPut(&quot;jing&quot;, -16733);<br>
spellPut(&quot;jiong&quot;, -16708);<br>
spellPut(&quot;jiu&quot;, -16706);<br>
spellPut(&quot;ju&quot;, -16689);<br>
spellPut(&quot;juan&quot;, -16664);<br>
spellPut(&quot;jue&quot;, -16657);<br>
spellPut(&quot;jun&quot;, -16647);<br>
spellPut(&quot;ka&quot;, -16474);<br>
spellPut(&quot;kai&quot;, -16470);<br>
spellPut(&quot;kan&quot;, -16465);<br>
spellPut(&quot;kang&quot;, -16459);<br>
spellPut(&quot;kao&quot;, -16452);<br>
spellPut(&quot;ke&quot;, -16448);<br>
spellPut(&quot;ken&quot;, -16433);<br>
spellPut(&quot;keng&quot;, -16429);<br>
spellPut(&quot;kong&quot;, -16427);<br>
spellPut(&quot;kou&quot;, -16423);<br>
spellPut(&quot;ku&quot;, -16419);<br>
spellPut(&quot;kua&quot;, -16412);<br>
spellPut(&quot;kuai&quot;, -16407);<br>
spellPut(&quot;kuan&quot;, -16403);<br>
spellPut(&quot;kuang&quot;, -16401);<br>
spellPut(&quot;kui&quot;, -16393);<br>
spellPut(&quot;kun&quot;, -16220);<br>
spellPut(&quot;kuo&quot;, -16216);<br>
spellPut(&quot;la&quot;, -16212);<br>
spellPut(&quot;lai&quot;, -16205);<br>
spellPut(&quot;lan&quot;, -16202);<br>
spellPut(&quot;lang&quot;, -16187);<br>
spellPut(&quot;lao&quot;, -16180);<br>
spellPut(&quot;le&quot;, -16171);<br>
spellPut(&quot;lei&quot;, -16169);<br>
spellPut(&quot;leng&quot;, -16158);<br>
spellPut(&quot;li&quot;, -16155);<br>
spellPut(&quot;lia&quot;, -15959);<br>
spellPut(&quot;lian&quot;, -15958);<br>
spellPut(&quot;liang&quot;, -15944);<br>
spellPut(&quot;liao&quot;, -15933);<br>
spellPut(&quot;lie&quot;, -15920);<br>
spellPut(&quot;lin&quot;, -15915);<br>
spellPut(&quot;ling&quot;, -15903);<br>
spellPut(&quot;liu&quot;, -15889);<br>
spellPut(&quot;long&quot;, -15878);<br>
spellPut(&quot;lou&quot;, -15707);<br>
spellPut(&quot;lu&quot;, -15701);<br>
spellPut(&quot;lv&quot;, -15681);<br>
spellPut(&quot;luan&quot;, -15667);<br>
spellPut(&quot;lue&quot;, -15661);<br>
spellPut(&quot;lun&quot;, -15659);<br>
spellPut(&quot;luo&quot;, -15652);<br>
spellPut(&quot;ma&quot;, -15640);<br>
spellPut(&quot;mai&quot;, -15631);<br>
spellPut(&quot;man&quot;, -15625);<br>
spellPut(&quot;mang&quot;, -15454);<br>
spellPut(&quot;mao&quot;, -15448);<br>
spellPut(&quot;me&quot;, -15436);<br>
spellPut(&quot;mei&quot;, -15435);<br>
spellPut(&quot;men&quot;, -15419);<br>
spellPut(&quot;meng&quot;, -15416);<br>
spellPut(&quot;mi&quot;, -15408);<br>
spellPut(&quot;mian&quot;, -15394);<br>
spellPut(&quot;miao&quot;, -15385);<br>
spellPut(&quot;mie&quot;, -15377);<br>
spellPut(&quot;min&quot;, -15375);<br>
spellPut(&quot;ming&quot;, -15369);<br>
spellPut(&quot;miu&quot;, -15363);<br>
spellPut(&quot;mo&quot;, -15362);<br>
spellPut(&quot;mou&quot;, -15183);<br>
spellPut(&quot;mu&quot;, -15180);<br>
spellPut(&quot;na&quot;, -15165);<br>
spellPut(&quot;nai&quot;, -15158);<br>
spellPut(&quot;nan&quot;, -15153);<br>
spellPut(&quot;nang&quot;, -15150);<br>
spellPut(&quot;nao&quot;, -15149);<br>
spellPut(&quot;ne&quot;, -15144);<br>
spellPut(&quot;nei&quot;, -15143);<br>
spellPut(&quot;nen&quot;, -15141);<br>
spellPut(&quot;neng&quot;, -15140);<br>
spellPut(&quot;ni&quot;, -15139);<br>
spellPut(&quot;nian&quot;, -15128);<br>
spellPut(&quot;niang&quot;, -15121);<br>
spellPut(&quot;niao&quot;, -15119);<br>
spellPut(&quot;nie&quot;, -15117);<br>
spellPut(&quot;nin&quot;, -15110);<br>
spellPut(&quot;ning&quot;, -15109);<br>
spellPut(&quot;niu&quot;, -14941);<br>
spellPut(&quot;nong&quot;, -14937);<br>
spellPut(&quot;nu&quot;, -14933);<br>
spellPut(&quot;nv&quot;, -14930);<br>
spellPut(&quot;nuan&quot;, -14929);<br>
spellPut(&quot;nue&quot;, -14928);<br>
spellPut(&quot;nuo&quot;, -14926);<br>
spellPut(&quot;o&quot;, -14922);<br>
spellPut(&quot;ou&quot;, -14921);<br>
spellPut(&quot;pa&quot;, -14914);<br>
spellPut(&quot;pai&quot;, -14908);<br>
spellPut(&quot;pan&quot;, -14902);<br>
spellPut(&quot;pang&quot;, -14894);<br>
spellPut(&quot;pao&quot;, -14889);<br>
spellPut(&quot;pei&quot;, -14882);<br>
spellPut(&quot;pen&quot;, -14873);<br>
spellPut(&quot;peng&quot;, -14871);<br>
spellPut(&quot;pi&quot;, -14857);<br>
spellPut(&quot;pian&quot;, -14678);<br>
spellPut(&quot;piao&quot;, -14674);<br>
spellPut(&quot;pie&quot;, -14670);<br>
spellPut(&quot;pin&quot;, -14668);<br>
spellPut(&quot;ping&quot;, -14663);<br>
spellPut(&quot;po&quot;, -14654);<br>
spellPut(&quot;pu&quot;, -14645);<br>
spellPut(&quot;qi&quot;, -14630);<br>
spellPut(&quot;qia&quot;, -14594);<br>
spellPut(&quot;qian&quot;, -14429);<br>
spellPut(&quot;qiang&quot;, -14407);<br>
spellPut(&quot;qiao&quot;, -14399);<br>
spellPut(&quot;qie&quot;, -14384);<br>
spellPut(&quot;qin&quot;, -14379);<br>
spellPut(&quot;qing&quot;, -14368);<br>
spellPut(&quot;qiong&quot;, -14355);<br>
spellPut(&quot;qiu&quot;, -14353);<br>
spellPut(&quot;qu&quot;, -14345);<br>
spellPut(&quot;quan&quot;, -14170);<br>
spellPut(&quot;que&quot;, -14159);<br>
spellPut(&quot;qun&quot;, -14151);<br>
spellPut(&quot;ran&quot;, -14149);<br>
spellPut(&quot;rang&quot;, -14145);<br>
spellPut(&quot;rao&quot;, -14140);<br>
spellPut(&quot;re&quot;, -14137);<br>
spellPut(&quot;ren&quot;, -14135);<br>
spellPut(&quot;reng&quot;, -14125);<br>
spellPut(&quot;ri&quot;, -14123);<br>
spellPut(&quot;rong&quot;, -14122);<br>
spellPut(&quot;rou&quot;, -14112);<br>
spellPut(&quot;ru&quot;, -14109);<br>
spellPut(&quot;ruan&quot;, -14099);<br>
spellPut(&quot;rui&quot;, -14097);<br>
spellPut(&quot;run&quot;, -14094);<br>
spellPut(&quot;ruo&quot;, -14092);<br>
spellPut(&quot;sa&quot;, -14090);<br>
spellPut(&quot;sai&quot;, -14087);<br>
spellPut(&quot;san&quot;, -14083);<br>
spellPut(&quot;sang&quot;, -13917);<br>
spellPut(&quot;sao&quot;, -13914);<br>
spellPut(&quot;se&quot;, -13910);<br>
spellPut(&quot;sen&quot;, -13907);<br>
spellPut(&quot;seng&quot;, -13906);<br>
spellPut(&quot;sha&quot;, -13905);<br>
spellPut(&quot;shai&quot;, -13896);<br>
spellPut(&quot;shan&quot;, -13894);<br>
spellPut(&quot;shang&quot;, -13878);<br>
spellPut(&quot;shao&quot;, -13870);<br>
spellPut(&quot;she&quot;, -13859);<br>
spellPut(&quot;shen&quot;, -13847);<br>
spellPut(&quot;sheng&quot;, -13831);<br>
spellPut(&quot;shi&quot;, -13658);<br>
spellPut(&quot;shou&quot;, -13611);<br>
spellPut(&quot;shu&quot;, -13601);<br>
spellPut(&quot;shua&quot;, -13406);<br>
spellPut(&quot;shuai&quot;, -13404);<br>
spellPut(&quot;shuan&quot;, -13400);<br>
spellPut(&quot;shuang&quot;, -13398);<br>
spellPut(&quot;shui&quot;, -13395);<br>
spellPut(&quot;shun&quot;, -13391);<br>
spellPut(&quot;shuo&quot;, -13387);<br>
spellPut(&quot;si&quot;, -13383);<br>
spellPut(&quot;song&quot;, -13367);<br>
spellPut(&quot;sou&quot;, -13359);<br>
spellPut(&quot;su&quot;, -13356);<br>
spellPut(&quot;suan&quot;, -13343);<br>
spellPut(&quot;sui&quot;, -13340);<br>
spellPut(&quot;sun&quot;, -13329);<br>
spellPut(&quot;suo&quot;, -13326);<br>
spellPut(&quot;ta&quot;, -13318);<br>
spellPut(&quot;tai&quot;, -13147);<br>
spellPut(&quot;tan&quot;, -13138);<br>
spellPut(&quot;tang&quot;, -13120);<br>
spellPut(&quot;tao&quot;, -13107);<br>
spellPut(&quot;te&quot;, -13096);<br>
spellPut(&quot;teng&quot;, -13095);<br>
spellPut(&quot;ti&quot;, -13091);<br>
spellPut(&quot;tian&quot;, -13076);<br>
spellPut(&quot;tiao&quot;, -13068);<br>
spellPut(&quot;tie&quot;, -13063);<br>
spellPut(&quot;ting&quot;, -13060);<br>
spellPut(&quot;tong&quot;, -12888);<br>
spellPut(&quot;tou&quot;, -12875);<br>
spellPut(&quot;tu&quot;, -12871);<br>
spellPut(&quot;tuan&quot;, -12860);<br>
spellPut(&quot;tui&quot;, -12858);<br>
spellPut(&quot;tun&quot;, -12852);<br>
spellPut(&quot;tuo&quot;, -12849);<br>
spellPut(&quot;wa&quot;, -12838);<br>
spellPut(&quot;wai&quot;, -12831);<br>
spellPut(&quot;wan&quot;, -12829);<br>
spellPut(&quot;wang&quot;, -12812);<br>
spellPut(&quot;wei&quot;, -12802);<br>
spellPut(&quot;wen&quot;, -12607);<br>
spellPut(&quot;weng&quot;, -12597);<br>
spellPut(&quot;wo&quot;, -12594);<br>
spellPut(&quot;wu&quot;, -12585);<br>
spellPut(&quot;xi&quot;, -12556);<br>
spellPut(&quot;xia&quot;, -12359);<br>
spellPut(&quot;xian&quot;, -12346);<br>
spellPut(&quot;xiang&quot;, -12320);<br>
spellPut(&quot;xiao&quot;, -12300);<br>
spellPut(&quot;xie&quot;, -12120);<br>
spellPut(&quot;xin&quot;, -12099);<br>
spellPut(&quot;xing&quot;, -12089);<br>
spellPut(&quot;xiong&quot;, -12074);<br>
spellPut(&quot;xiu&quot;, -12067);<br>
spellPut(&quot;xu&quot;, -12058);<br>
spellPut(&quot;xuan&quot;, -12039);<br>
spellPut(&quot;xue&quot;, -11867);<br>
spellPut(&quot;xun&quot;, -11861);<br>
spellPut(&quot;ya&quot;, -11847);<br>
spellPut(&quot;yan&quot;, -11831);<br>
spellPut(&quot;yang&quot;, -11798);<br>
spellPut(&quot;yao&quot;, -11781);<br>
spellPut(&quot;ye&quot;, -11604);<br>
spellPut(&quot;yi&quot;, -11589);<br>
spellPut(&quot;yin&quot;, -11536);<br>
spellPut(&quot;ying&quot;, -11358);<br>
spellPut(&quot;yo&quot;, -11340);<br>
spellPut(&quot;yong&quot;, -11339);<br>
spellPut(&quot;you&quot;, -11324);<br>
spellPut(&quot;yu&quot;, -11303);<br>
spellPut(&quot;yuan&quot;, -11097);<br>
spellPut(&quot;yue&quot;, -11077);<br>
spellPut(&quot;yun&quot;, -11067);<br>
spellPut(&quot;za&quot;, -11055);<br>
spellPut(&quot;zai&quot;, -11052);<br>
spellPut(&quot;zan&quot;, -11045);<br>
spellPut(&quot;zang&quot;, -11041);<br>
spellPut(&quot;zao&quot;, -11038);<br>
spellPut(&quot;ze&quot;, -11024);<br>
spellPut(&quot;zei&quot;, -11020);<br>
spellPut(&quot;zen&quot;, -11019);<br>
spellPut(&quot;zeng&quot;, -11018);<br>
spellPut(&quot;zha&quot;, -11014);<br>
spellPut(&quot;zhai&quot;, -10838);<br>
spellPut(&quot;zhan&quot;, -10832);<br>
spellPut(&quot;zhang&quot;, -10815);<br>
spellPut(&quot;zhao&quot;, -10800);<br>
spellPut(&quot;zhe&quot;, -10790);<br>
spellPut(&quot;zhen&quot;, -10780);<br>
spellPut(&quot;zheng&quot;, -10764);<br>
spellPut(&quot;zhi&quot;, -10587);<br>
spellPut(&quot;zhong&quot;, -10544);<br>
spellPut(&quot;zhou&quot;, -10533);<br>
spellPut(&quot;zhu&quot;, -10519);<br>
spellPut(&quot;zhua&quot;, -10331);<br>
spellPut(&quot;zhuai&quot;, -10329);<br>
spellPut(&quot;zhuan&quot;, -10328);<br>
spellPut(&quot;zhuang&quot;, -10322);<br>
spellPut(&quot;zhui&quot;, -10315);<br>
spellPut(&quot;zhun&quot;, -10309);<br>
spellPut(&quot;zhuo&quot;, -10307);<br>
spellPut(&quot;zi&quot;, -10296);<br>
spellPut(&quot;zong&quot;, -10281);<br>
spellPut(&quot;zou&quot;, -10274);<br>
spellPut(&quot;zu&quot;, -10270);<br>
spellPut(&quot;zuan&quot;, -10262);<br>
spellPut(&quot;zui&quot;, -10260);<br>
spellPut(&quot;zun&quot;, -10256);<br>
spellPut(&quot;zuo&quot;, -10254);<br>
}</p>
<p>public static void main(String[] args) {<br>
String str = null;<br>
str = &quot;谢海101普降喜雨&quot;;<br>
System.out.println(&quot;Spell=&quot; +CnToSpell.getFullSpell(str));</p>
<p>str = &quot;张牙舞爪》。，&quot;;<br>
System.out.println(&quot;Spell=&quot; +CnToSpell.getFullSpell(str));</p>
<p>str = &quot;啦啦，可耻下场。&quot;;<br>
System.out.println(&quot;Spell=&quot; +CnToSpell.getFullSpell(str));</p>
<p>str = &quot;猪油，猪八戒。&quot;;<br>
System.out.println(&quot;Spell=&quot; +CnToSpell.getFullSpell(str));<br>
}</p>
<p>private static void spellPut(String spell, intascii) {<br>
spellMap.put(spell, new Integer(ascii));<br>
}<br>
}</p> <a href="http://hi.baidu.com/gaozhiyan/blog/item/9c278a1cc7b82c8186d6b6d3.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/%BC%BC%CA%F5%5Fjava">技术_java</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/9c278a1cc7b82c8186d6b6d3.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月03日 星期二  下午 03:21</pubDate>
        <category><![CDATA[技术_java]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/9c278a1cc7b82c8186d6b6d3.html</guid>
</item>

<item>
        <title><![CDATA[java生成word html 并保存到数据库]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/a78df380f08081dd9023d9d2.html]]></link>
        <description><![CDATA[
		
		在最近的一个项目中需要将一段字符类型的文本存为word，html并要将word的内容保存在数据库中，于是就有了如下的一个工具类，希望能对碰到这样需求的朋友提供点帮助。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  匆匆忙忙的就copy上来了，没有做一些删减，有一些多余的东西，有兴趣的朋友可以自行略去。我的注释相对比较清楚，可以按照自己的需求进行组合。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  在操作word的地方使用了jacob(jacob_1.9)，这个工具网上很容易找到，将jacob.dll放置系统Path中，直接放在system32下也可以，jacob.jar放置在classPath中。<br>
<br>
<br>
<strong>代码如下：WordBridge.java<br>
</strong><br>
/**<br>
* WordBridge.java<br>
*/<br>
package com.kela.util;
<p>import java.io.ByteArrayInputStream;<br>
import java.io.File;<br>
import java.io.FileInputStream;<br>
import java.io.InputStream;<br>
import java.sql.Connection;<br>
import java.sql.PreparedStatement;</p>
<p>import org.apache.commons.logging.Log;<br>
import org.apache.commons.logging.LogFactory;</p>
<p>import com.jacob.activeX.ActiveXComponent;<br>
import com.jacob.com.Dispatch;<br>
import com.jacob.com.Variant;<br>
import com.kela.db.PoolingDataSource;</p>
<p>/**<br>
* 说明: 对word的操作&lt;p&gt;<br>
*<br>
* @author&nbsp;&nbsp;<a href="mailto:kela.kf@gmail.com"><font color="#fd83c9">kela.kf@gmail.com</font></a><br>
*/<br>
public class WordBridge {<br>
<br>
&nbsp;&nbsp;  Log log =LogFactory.getLog(&quot;WordBridgt&quot;);<br>
<br>
&nbsp;&nbsp;  private ActiveXComponentMsWordApp = null; <br>
&nbsp;&nbsp;&nbsp;  privateDispatch document = null;<br>
&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;  /**<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * 打开word<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * @param makeVisible, true显示word, false不显示word<br>
&nbsp;&nbsp;&nbsp;&nbsp;  */<br>
&nbsp;&nbsp;&nbsp;  public voidopenWord(boolean makeVisible) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (MsWordApp == null) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MsWordApp = new ActiveXComponent(&quot;Word.Application&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Dispatch.put(MsWordApp, &quot;Visible&quot;, new Variant(makeVisible));<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  /**<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * 创建新的文档<br>
&nbsp;&nbsp;&nbsp;&nbsp;  *<br>
&nbsp;&nbsp;&nbsp;&nbsp;  */<br>
&nbsp;&nbsp;  public voidcreateNewDocument() {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Dispatch documents = Dispatch.get(MsWordApp,&quot;Documents&quot;).toDispatch();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  document = Dispatch.call(documents, &quot;Add&quot;).toDispatch();<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  /**<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * 关闭文档<br>
&nbsp;&nbsp;&nbsp;&nbsp;  */<br>
&nbsp;&nbsp;&nbsp;  public voidcloseDocument() {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // 0 = wdDoNotSaveChanges<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // -1 = wdSaveChanges<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // -2 = wdPromptToSaveChanges<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Dispatch.call(document, &quot;Close&quot;, new Variant(0));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  document = null;<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  /**<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * 关闭word<br>
&nbsp;&nbsp;&nbsp;&nbsp;  *<br>
&nbsp;&nbsp;&nbsp;&nbsp;  */<br>
&nbsp;&nbsp;&nbsp;  public voidcloseWord() {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Dispatch.call(MsWordApp, &quot;Quit&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MsWordApp = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  document = null;<br>
&nbsp;&nbsp;&nbsp;  }<br>
<br>
&nbsp;&nbsp;&nbsp;  /**<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * 插入文本<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * @param textToInsert 文本内容<br>
&nbsp;&nbsp;&nbsp;&nbsp;  */<br>
&nbsp;&nbsp;&nbsp;  public voidinsertText(String textToInsert) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Dispatch selection = Dispatch.get(MsWordApp,&quot;Selection&quot;).toDispatch();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Dispatch.put(selection, &quot;Text&quot;, textToInsert);<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  /**<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * 保存文件<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * @param filename<br>
&nbsp;&nbsp;&nbsp;&nbsp;  */<br>
&nbsp;&nbsp;&nbsp;  public voidsaveFileAs(String filename) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Dispatch.call(document, &quot;SaveAs&quot;, filename);<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  /**<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * 将word转换成html<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * @param htmlFilePath<br>
&nbsp;&nbsp;&nbsp;&nbsp;  */<br>
&nbsp;&nbsp;&nbsp;  public voidwordToHtml(String htmlFilePath) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Dispatch.invoke(document,&quot;SaveAs&quot;,Dispatch.Method, new Object[]{htmlFilePath,new Variant(8)}, newint[1]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;  /**<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * 保存word的同时，保存一个html<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * @param text 需要保存的内容<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * @param wordFilePath word的路径<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * @param htmlFilePath html的路径<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * @throws LTOAException<br>
&nbsp;&nbsp;&nbsp;&nbsp;  */<br>
&nbsp;&nbsp;&nbsp;  public voidwordAsDbOrToHtml(String text, String wordFilePath, StringhtmlFilePath) throws LTOAException {<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  openWord(false);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  createNewDocument();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  insertText(text);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  saveFileAs(wordFilePath);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  wordToHtml(htmlFilePath);<br>
&nbsp;&nbsp;&nbsp;&nbsp;  } catch (Exception ex) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  log.error(&quot;错误 - 对word的操作发生错误&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  log.error(&quot;原因- &quot; + ex.getMessage());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  thrownew LTOAException(LTOAException.ERR_UNKNOWN,&quot;对word的操作发生错误(&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  + this.getClass().getName() + &quot;.wordAsDbOrToHtml())&quot;, ex);<br>
&nbsp;&nbsp;&nbsp;&nbsp;  } finally {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  closeDocument();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  closeWord();<br>
&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;<br>
}</p>
<p>&nbsp;&nbsp;  /**<br>
&nbsp;&nbsp;&nbsp;  *将word保存至数据库<br>
&nbsp;&nbsp;&nbsp;  * @paramwordFilePath<br>
&nbsp;&nbsp;&nbsp;  * @paramRecordID<br>
&nbsp;&nbsp;&nbsp;  * @throwsLTOAException<br>
&nbsp;&nbsp;&nbsp;  */<br>
&nbsp;&nbsp;&nbsp;  public voidwordAsDatabase(String wordFilePath, String RecordID) throwsLTOAException {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Connection conn = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  PreparedStatementpstmt = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  PoolingDataSourcepool = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  File file = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String sql = &quot;&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sql = &quot; UPDATE Document_File SET FileBody = ? WHERE RecordID = ?&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pool= new PoolingDataSource();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  conn = pool.getConnection();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  file = new File(wordFilePath);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  InputStream is = new FileInputStream(file);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte[] blobByte = new byte[is.available()];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  is.read(blobByte);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  is.close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pstmt = conn.prepareStatement(sql);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pstmt.setBinaryStream(1,(new ByteArrayInputStream(blobByte)),blobByte.length);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pstmt.setString(2, RecordID); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pstmt.executeUpdate();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch (Exception ex) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  log.error(&quot;错误 - 表 Document_File更新数据发生意外错误&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  log.error(&quot;原因 - &quot; + ex.getMessage());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  throw new LTOAException(LTOAException.ERR_UNKNOWN,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &quot;表Document_File插入数据发生意外错误(&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  + this.getClass().getName() + &quot;.wordAsDatabase())&quot;, ex);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }finally {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pool.closePrepStmt(pstmt);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pool.closeConnection(conn);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  }<br>
<br>
&nbsp;&nbsp;  /**<br>
&nbsp;&nbsp;&nbsp;  *得到一个唯一的编号<br>
&nbsp;&nbsp;&nbsp;  * @return编号<br>
&nbsp;&nbsp;&nbsp;  */<br>
&nbsp;&nbsp;  public String getRecordID(){<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  String sRecordID = &quot;&quot;;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  java.util.Date dt=new java.util.Date();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  long lg=dt.getTime();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Long ld=new Long(lg);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sRecordID =ld.toString();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return sRecordID;<br>
&nbsp;&nbsp;&nbsp;  }<br>
<br>
&nbsp;&nbsp;  /**<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * 得到保存word和html需要的路径<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * @param systemType 模块类型 givInfo, sw, fw<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * @param fileType 文件类型 doc, html<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * @param recID 文件编号<br>
&nbsp;&nbsp;&nbsp;&nbsp;  * @return 路径<br>
&nbsp;&nbsp;&nbsp;&nbsp;  */<br>
&nbsp;&nbsp;&nbsp;&nbsp;  public String getWordFilePath(String systemType,String fileType, String recID) {<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String filePath = &quot;&quot;;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  File file = newFile(this.getClass().getResource(&quot;/&quot;).getPath());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  filePath = file.getPath().substring(0, file.getPath().length() -15);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(systemType.equalsIgnoreCase(&quot;govInfo&quot;)) {<br>
&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(fileType.equalsIgnoreCase(&quot;doc&quot;))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  filePath = filePath + &quot;/uploadFiles/govInfo/document/&quot; + recID +&quot;.doc&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else if(fileType.equalsIgnoreCase(&quot;htm&quot;))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  filePath = filePath + &quot;/HTML/govInfo/&quot; + recID + &quot;.htm&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } else if(systemType.equalsIgnoreCase(&quot;sw&quot;)){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(fileType.equalsIgnoreCase(&quot;doc&quot;))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  filePath = filePath +&quot;/uploadFiles/sw/document/&quot; + recID + &quot;.doc&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else if(fileType.equalsIgnoreCase(&quot;htm&quot;))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  filePath = filePath + &quot;/HTML/sw/&quot; + recID +&quot;.htm&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } else if(systemType.equalsIgnoreCase(&quot;fw&quot;)) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(fileType.equalsIgnoreCase(&quot;doc&quot;))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  filePath = filePath + &quot;/uploadFiles/fw/document/&quot; + recID +&quot;.doc&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else if(fileType.equalsIgnoreCase(&quot;htm&quot;))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  filePath = filePath + &quot;/HTML/fw/&quot; + recID + &quot;.htm&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return filePath;<br>
&nbsp;&nbsp;&nbsp;  }<br>
}</p> <a href="http://hi.baidu.com/gaozhiyan/blog/item/a78df380f08081dd9023d9d2.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/%BC%BC%CA%F5%5Fjava">技术_java</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/a78df380f08081dd9023d9d2.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月03日 星期二  下午 03:20</pubDate>
        <category><![CDATA[技术_java]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/a78df380f08081dd9023d9d2.html</guid>
</item>

<item>
        <title><![CDATA[String  InputStream]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/4b930da8926706bbca130cd2.html]]></link>
        <description><![CDATA[
		
		<p>//String转inputStream<br>
1. String --&gt; InputStream<br>
InputStream String2InputStream(String str){<br>
&nbsp;&nbsp;&nbsp;  ByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes());<br>
&nbsp;&nbsp;&nbsp;  return stream;<br>
}</p>
<p> </p>
<p>2. InputStream --&gt; String<br>
String inputStream2String(InputStream is){<br>
&nbsp;&nbsp;&nbsp;  BufferedReader in = new BufferedReader(new InputStreamReader(is));<br>
&nbsp;&nbsp;&nbsp;  StringBuffer buffer = new StringBuffer();<br>
&nbsp;&nbsp;&nbsp;  String line = &quot;&quot;;<br>
&nbsp;&nbsp;&nbsp;  while ((line = in.readLine()) != null){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  buffer.append(line);<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  return buffer.toString();</p>
<p> </p>
<p> </p>
<p> </p>
<p>InputStream inputStream = <br>
postMethod.getResponseBodyAsStream(); <br>
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream)); <br>
String xml = FileCopyUtils.copyToString(in);</p>
<p> </p>
<p> </p>
<p>====================================</p>
<p>&nbsp;&nbsp;  try {<br>
&nbsp;&nbsp;&nbsp;  int len = request.getContentLength();<br>
&nbsp;&nbsp;&nbsp;  byte buffer[];<br>
&nbsp;&nbsp;&nbsp;  buffer = new byte[len];<br>
&nbsp;&nbsp;&nbsp;  ServletInputStream in = request.getInputStream();<br>
&nbsp;&nbsp;&nbsp;  int total = 0;<br>
&nbsp;&nbsp;&nbsp;  for (int once = 0; total &lt; len &amp;&amp; once &gt;= 0; total += once) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;  once = in.readLine(buffer, total, len);<br>
&nbsp;&nbsp;&nbsp;  }<br>
System.out.println(new String(buffer,&quot;utf-8&quot;));</p>
<p>======================</p>
<p>*<br>
&nbsp;&nbsp;  try {<br>
&nbsp;&nbsp;&nbsp;  InputStream is = request.getInputStream();<br>
&nbsp;&nbsp;&nbsp;  byte buf[] = new byte[3000];<br>
&nbsp;&nbsp;&nbsp;  is.read(buf);<br>
System.out.println(new String(buf,&quot;utf-8&quot;));<br>
&nbsp;&nbsp;  } catch (IOException e) {<br>
&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;  }</p>
<p> </p>
<p> </p>
<p>=============================</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int len = request.getContentLength();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte buffer[];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  buffer = new byte[len];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ServletInputStream in = request.getInputStream();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int total = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int once = 0; total &lt; len &amp;&amp; once &gt;= 0; total += once) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  once = in.readLine(buffer, total, len);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String temp=new String(buffer,&quot;utf-8&quot;);</p>
<p>============================</p>
<p>/**********************************************************************/&nbsp;&nbsp;<br>
&nbsp;&nbsp;  ByteArrayOutputStream byteOutput= new ByteArrayOutputStream();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  BufferedInputStream bufferInput = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  bufferInput = new BufferedInputStream(is);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(bufferInput==null){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(&quot;No data!&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int length;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int size = 4096;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte buf[] = new byte[size];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byteOutput.reset();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  while ((length = bufferInput.read(buf, 0, size)) != -1) {<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte[] temp = new byte[length];<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int i = 0; i &lt; length; i++) {<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  temp[i] = buf[i];<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byteOutput.write(temp);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch (Exception e) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  e.printStackTrace();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String data=byteOutput.toString();</p> <a href="http://hi.baidu.com/gaozhiyan/blog/item/4b930da8926706bbca130cd2.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/%BC%BC%CA%F5%5Fjava">技术_java</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/4b930da8926706bbca130cd2.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月02日 星期一  下午 07:49</pubDate>
        <category><![CDATA[技术_java]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/4b930da8926706bbca130cd2.html</guid>
</item>

<item>
        <title><![CDATA[修改SQL Server 2000数据库名称]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/4629b8cb1634d3f753664f88.html]]></link>
        <description><![CDATA[
		
		EXEC sp_dboption 'oldDBname', 'Single User', 'TRUE'<br>
<br>
EXEC sp_renamedb 'oldDBname', 'newDBname'<br>
<br>
EXEC sp_dboption 'newDBname', 'Single User', 'FALSE'<br>
<br>
----------------------------------------------<br>
<br>
sql server 2000 重命名 、更名、rename 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/%BC%BC%CA%F5%5Fdatabase">技术_database</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/4629b8cb1634d3f753664f88.html#comment">查看评论</a>]]></description>
        <pubDate>2009年10月20日 星期二  上午 09:46</pubDate>
        <category><![CDATA[技术_database]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/4629b8cb1634d3f753664f88.html</guid>
</item>

<item>
        <title><![CDATA[Struts,Spring,Hibernate三大框架的面试 笔试题]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/89a236b340d210add8335a97.html]]></link>
        <description><![CDATA[
		
		<p>1.Hibernate工作原理及为什么要用？</p>
<p>原理： <br>
1.读取并解析配置文件 <br>
2.读取并解析映射信息，创建SessionFactory <br>
3.打开Sesssion <br>
4.创建事务Transation <br>
5.持久化操作 <br>
6.提交事务 <br>
7.关闭Session <br>
8.关闭SesstionFactory</p>
<p>为什么要用： <br>
1. 对JDBC访问数据库的代码做了封装，大大简化了数据访问层繁琐的重复性代码。 <br>
2. Hibernate是一个基于JDBC的主流持久化框架，是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 <br>
3. hibernate使用Java反射机制，而不是字节码增强程序来实现透明性。 <br>
4. hibernate的性能非常好，因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库，从一对一到多对多的各种复杂关系。 </p>
<p>2．Hibernate是如何延迟加载? <br>
1. Hibernate2延迟加载实现：<br>
a)实体对象 <br>
b)集合（Collection） <br>
2. Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候，数据并没有存在与内存中，当程序真正对数据的操作时，对象才存在与内存中，就实现了延迟加载，他节省了服务器的内存开销，从而提高了服务器的性能。&nbsp;&nbsp;</p>
<p>3．Hibernate中怎样实现类之间的关系?<br>
(如：一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作，它们都市对对象进行操作，我们程序中把所有的表与类都映射在一起，它们通过配置文件中的many-to-one、one-to-many、many-to-many</p>
<p>4.Struts1流程：<br>
1、客户端浏览器发出HTTP请求。<br>
2、根据web.xml配置，该请求被ActionServlet接收。<br>
3、根据struts-config.xml配置， ActionServlet先将请求中的参数填充到ActionForm中，然后ActionServlet再将请求发送到Action 进行处理。<br>
4、是否验证，需要验证则调用ActionForm的validate方法，验证失败则跳转到input，成功则继续。<br>
5、Action从ActionForm获得数据，调用javabean 中的业务方法处理数据。<br>
6、Action返回ActionForward对象，跳转到相应JSP页面或Action。<br>
7、返回HTTP响应到客户端浏览器。MVC设计模式：modal：&ldquo;模型&rdquo; 也称业务逻辑，是正真完成任务的代码,相当与JavaBeanview：视图，其实就是显示界面，相当于JSPcontroller：控制器，他控制模型和视图的交互过程，相当于servletstruts1是基于MVC设计模式hibernate是基于ORM对象关系映射</p>
<p>5.struts是什么？<br>
struts1是基于JSP和servlet的一个开源的Web应用框架，使用的是MVC的设计模式struts2是基于webwork技术的框架，是sun和webwork公司联手开发的一个功能非常齐全的框架，struts2和struts1没有任何关系，是一个全新的框架</p>
<p>6.spring是什么？<br>
spring是一个集成了许多第三方框架的大杂烩，其核心技术是IOC（控制反转，也称依赖注入）和AOP（面向切面编程）</p>
<p>7.hibernate是什么？<br>
hibernate是基于ORM对象关系映射（完成对象数据到关系数据映射的机制）实现的,做数据持久化的工具</p>
<p>8.JSF是什么？<br>
JavaServer Face是基于组件的web开发框架，跟sturts差不多的框架</p>
<p>9.数据库里面的索引和约束是什么?<br>
索引是为了提高数据的检索速度，索引是建立在数据表上，根据一个或多个字段建立的约束是为了保持数据的完整性，约束有非空约束，主键约束，外键约束等等。</p>
<p>10.spring是什么这个问题，往往可以通过我们为什么要使用spring这个问题来切入：<br>
AOP 让开发人员可以创建非行为性的关注点，称为横切关注点，并将它们插入到应用程序代码中。使用 AOP 后，公共服务 （比 如日志、持久性、事务等）就可以分解成方面并应用到域对象上，同时不会增加域对象的对象模型的复杂性。 IOC 允许创建一个可以构造对象的应用环境，然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的，IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素（singleton）和直接构造（straight construction），每一个对象都是用其协作对象构造的。因此是由容器管理协作对象（collaborator）。 Spring即使一个AOP框架，也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring，只要用 JavaBean 属性和配置文件加入依赖性（协作对象）。然后可以很容易地在需要时替换具有类似接口的协作对象。</p>
<p>11.用自己的话简要阐述struts2的执行流程。<br>
Struts 2框架本身大致可以分为3个部分：<br>
核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。<br>
核心控制器FilterDispatcher是Struts 2框架的基础，包含了框架内部的控制流程和处理机制。<br>
业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时，还需要编写相关的配置文件，供核心控制器FilterDispatcher来使用。 <br>
Struts 2的工作流程相对于Struts 1要简单，与WebWork框架基本相同，所以说Struts 2是WebWork的升级版本。基本简要流程如下：<br>
1、客户端浏览器发出HTTP请求。<br>
2、根据web.xml配置，该请求被FilterDispatcher接收。<br>
3、根据struts.xml配置，找到需要调用的Action类和方法， 并通过IoC方式，将值注入给Aciton。<br>
4、Action调用业务逻辑组件处理业务逻辑，这一步包含表单验证。<br>
5、Action执行完毕，根据struts.xml中的配置找到对应的返回结果result，并跳转到相应页面。<br>
6、返回HTTP响应到客户端浏览器。</p> <a href="http://hi.baidu.com/gaozhiyan/blog/item/89a236b340d210add8335a97.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/%D5%D0%C6%B8%CF%E0%B9%D8">招聘相关</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/89a236b340d210add8335a97.html#comment">查看评论</a>]]></description>
        <pubDate>2009年10月13日 星期二  上午 11:55</pubDate>
        <category><![CDATA[招聘相关]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/89a236b340d210add8335a97.html</guid>
</item>

<item>
        <title><![CDATA[基于 IBM FileNet P8 4.5 平台上 Component Integrator 的原理和应用]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/9ba7adeef48c71232cf534f4.html]]></link>
        <description><![CDATA[
		
		<p>IBM FileNet P8 platform 为企业内容管理和工作流管理的应用级程序的开发提供了方便快捷的平台和工具，Component Integrator 作为 IBM FileNet Business Process Management 产品的一部分，在一定程度上实现了对整个 FileNet P8 平台功能的扩展。本文详细介绍了 Component Integrator 的架构、原理和用途，并且通过实例演示怎样创建，配置和使用 Component Integrator。</p>
<p><a name="1.Component Integrator介绍|outline"><span class="atitle">Component Integrator 介绍</span></a></p>
<p><a name="1.1.Component Integrator概述|outline"><span class="smalltitle">Component Integrator 概述</span></a></p>
<p>CI(Component Integrator) 是 <strong style="color: black; background-color: #ffff66">FileNet</strong> Business Process Management 组件提供的用来连接 Process Engine 和外部系统的服务。客户可以通过它将自定义的 Java 类库或者 Java 消息服务 (JMS, Java Message Services) 组件导入到一个工作流的定义中，同时，它还提供基本的 EIS (Enterprise Information System) 集成。</p>
<p><strong style="color: black; background-color: #ffff66">FileNet</strong> BPM component integration 包括以下四个要素：</p>
<ul>
    <li>Application Engine 的组件管理器（Component Manager）。</li>
    <li>Application Engine 的组件适配器（Component adaptors）。</li>
    <li>Process Engine 的组件队列（Component queues）。</li>
    <li>CE_Operations ：一个 BPM 自身提供的组件用于集成 Conent Engine 和 Process Engine 。</li>
</ul>
<p>启动 Component Integration 主要可以帮助实现以下功能：</p>
<ul>
    <li>轻松简单的扩展了商业功能，减轻了开发的工作量。</li>
    <li>系统自动处理业务流程。</li>
    <li>将外部的功能引入一个工作流。</li>
    <li>使用已经存在的 Java 对象和组件。</li>
    <li>与 JMS(Java Message Service) 的集成。</li>
</ul>
<p><a name="1.2.Component Integrator架构|outline"><span class="smalltitle">Component Integrator 架构</span></a></p>
<p><br>
<a name="1.2.1.图 1. Component Integrator的架构|outline"><strong>图 1. Component Integrator 的架构</strong></a><br>
<img height="352" alt="图 1. Component Integrator 的架构" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image003.jpg" width="571"></p>
<p>在后面我们的 Java 组件和 JMS 组件应用举例中，请对照上面的架构图以便更加清晰的了解每个部分的功能以及它们之间是如何协同作用的。</p>
<p><a name="1.3.Component Integrator配置工具|outline"><span class="smalltitle">Component Integrator 配置工具</span></a></p>
<p>接下来介绍一下在上面的架构图中看到的 Component Integrator 的配置工具：</p>
<ul>
    <li>流程配置工作台 (Process Configuration Console)
    <ul>
        <li>创建组件队列；</li>
        <li>向队列中导入操作；</li>
    </ul>
    </li>
    <li>流程设计器（Process Designer）
    <ul>
        <li>向一个工作流定义中加入 Component 步骤元素。一个组件步骤<img height="32" alt="工作流活动" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image005.jpg" width="34">代表工作流中的一个活动，这个活动被分配给了一个组件队列中的一个或者多个操作。</li>
    </ul>
    </li>
    <li>组件管理器 (Component Manager)
    <ul>
        <li>轮询组件队列中的任务和响应事件触发。</li>
        <li>将工作派发到 Java 或者 JMS 组件服务适配器。</li>
    </ul>
    </li>
    <li>流程任务管理器（Process Task Manager）
    <ul>
        <li>启动，停止和管理组件管理器。</li>
    </ul>
    </li>
    <li>以上全部工具都是作为典型的 Application Engine 安装的一部分随之一起自动安装的。</li>
</ul>
<p><a name="1.4.组件工作原理|outline"><span class="smalltitle">组件工作原理</span></a></p>
<p>下面介绍组件是如何工作的：</p>
<ul>
    <li>一个组件相当于一个&ldquo;任务执行者&rdquo;，它不包含用户交互界面，通过 Component Integrator 自动地对工作流中的数据进行处理，并且执行任务单元 (work items) 上的自动化操作 (operations).</li>
    <li>如果一个工作项（work item）正在组件队列中等待处理，它会先向组件发送请求，组件收到请求后，会回应或者执行其他的外部操作。</li>
</ul>
<p><br>
<a name="1.4.1.图 2. Components工作原理|outline"><strong>图 2. Components 工作原理</strong></a><br>
<img height="140" alt="图 2. Components 工作原理" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image007.jpg" width="570"></p>
<p><a name="1.5.组件类型|outline"><span class="smalltitle">组件类型</span></a></p>
<p>组件分为两类：Java 组件和 JMS 组件</p>
<p>Java 组件的功能由 JAR 文件提供，它是双向通信的，即数据可以由区域（isolated region）传送到组件中，区域也可以从组件中接受数据。要想使用 Java 组件，必须先配置 Java 组件适配器。</p>
<p>JMS 组件的功能是向特定的队列中发送消息，与 Java 组件不同的是，它是单向通信的，即数据只能从区域传送到 JMS 队列，而不能从 JMS 队列中接受数据。要想使用 JMS 组件，必须先配置 JMS 组件适配器。</p>
<p><a name="1.6.Content Engine (CE) Operations|outline"><span class="smalltitle">Content Engine (CE) Operations</span></a></p>
<p>除了以上介绍的两种组件之外，IBM <strong style="color: black; background-color: #ffff66">FileNet</strong> 还通过 Component Integrator 基础架构为用户提供了 CE operations 组件。它用于帮助对存储在对象库（object store）中的文件或者其他对象进行处理，比如将一个文件存入对象库中文件夹中，或者删除一个已经存在的文件，用模板发布一个文件，获取或更改一个文件或者文件夹的属性值。</p>
<p><br>
<table cellspacing="0" cellpadding="0" width="100%" border="0" sizset="32" sizcache="2">
    <tbody sizset="32" sizcache="1">
        <tr>
            <td><img height="1" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%"><br>
            <img height="6" src="http://www.ibm.com/i/c.gif" width="8" border="0"></td>
        </tr>
    </tbody>
</table>
<table class="no-print" cellspacing="0" cellpadding="0" align="right" sizset="33" sizcache="2">
    <tbody sizset="34" sizcache="2">
        <tr align="right" sizset="34" sizcache="2">
            <td sizset="34" sizcache="2"><img height="4" src="http://www.ibm.com/i/c.gif" width="100%"><br>
            <table cellspacing="0" cellpadding="0" border="0" sizset="34" sizcache="2">
                <tbody sizset="34" sizcache="1">
                    <tr>
                        <td valign="middle"><img height="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0"></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/index.html#main" cmimpressionsent="1"><strong>回页首</strong></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><a name="2.将Component Integrator应用于工作流实例|outline"><span class="atitle">将 Component Integrator 应用于工作流实例</span></a></p>
<p>这部分通过三个实例，分别介绍了如何将 CE_Operations，Java 组件，JMS 组件应用到工组流中，以及应用前的配置工作。</p>
<p><a name="2.1.CE_Opetions应用举例|outline"><span class="smalltitle">CE_Opetions 应用举例</span></a></p>
<p>在这个部分，将会用到&ldquo; CE_Operations Test Workflow &rdquo;工作流，这个工作流通过使用 CE_Operations 内置众多可用的操作 (operations) 中的一个操作实现了将 Content Engine 的对象库中的文档类型对象的属性 (Properties) 映射 (map to) 到工作流中数据域 (Data fields) 的功能。</p>
<p>1. 在 PE 服务器上的进程任务控制器 (Process Task Manager) 中 , 检查并确保 Process Engine 的服务器连接配置正确 , 启动进程服务 (Process Service); 在 AE 服务器上的进程任务控制器中启动组件管理器 (Component Manager)，然后通过登录 Workplace 进入流程设计器中。</p>
<p><br>
<a name="2.1.1.图 3. 在PE上的进程控制器中确认Process Engi那个ne配置|outline"><strong>图 3. 在 PE 上的进程控制器中确认 Process Engi 那个 ne 配置</strong></a><br>
<img height="155" alt="图 3. 在 PE 上的进程控制器中确认 Process Engi 那个 ne 配置" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image009.jpg" width="570"> <br>
<br>
<a name="2.1.2.图 4. 在AE上的进程控制器中启动组件管理器|outline"><strong>图 4. 在 AE 上的进程控制器中启动组件管理器</strong></a><br>
<img height="137" alt="图 4. 在 AE 上的进程控制器中启动组件管理器" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image011.jpg" width="187"></p>
<p>2. 进入流程设计器，以&rsquo; Check-out &rsquo;方式打开存储在 CE 对象库中的工作流定义&ldquo; CEOperations Test Workflow &rdquo;</p>
<p><br>
<a name="2.1.3.图 5. CEOperations Test Workflow工作流设计图|outline"><strong>图 5. CEOperations Test Workflow 工作流设计图</strong></a><br>
<img height="118" alt="图 5. CEOperations Test Workflow 工作流设计图" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image013.jpg" width="383"></p>
<p>3. 按照表 1 为组件步骤&ldquo;获取订单详细信息&rdquo;的添加操作&ldquo; getStringProperty &rdquo;。</p>
<p><br>
<a name="2.1.4.表 1. 设置组件步骤属性|outline"><strong>表 1. 设置组件步骤属性</strong></a><br>
<table class="data-table-1" cellspacing="0" cellpadding="0" border="1" sizset="35" sizcache="2">
    <tbody sizset="35" sizcache="1">
        <tr>
            <td>操作名称</td>
            <td style="text-align: center">参数名称</td>
            <td style="text-align: center">类型</td>
            <td style="text-align: center">表达式</td>
        </tr>
        <tr>
            <td rowspan="3">getStringProperty</td>
            <td>sourceDocument</td>
            <td>附件</td>
            <td>cruise_document</td>
        </tr>
        <tr>
            <td>symbolicPropName</td>
            <td>字符串</td>
            <td>&ldquo; DocumentTitle &rdquo;<br>
            ( 注意 : 没有空格 )</td>
        </tr>
        <tr>
            <td>return_value</td>
            <td>字符串</td>
            <td>document_title</td>
        </tr>
    </tbody>
</table>
</p>
<p>4. 验证，传输并启动工作流，并且为其指定一个订单文件作为附件。</p>
<p><br>
<a name="2.1.5.图 6. 分配附件并启动工作流|outline"><strong>图 6. 分配附件并启动工作流</strong></a><br>
<img height="397" alt="图 6. 分配附件并启动工作流" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image015.jpg" width="571"></p>
<p>5. 最后进入我的收件箱中检查结果 , 找到刚刚创建的工作项 , 查看它的 order_price 和 document_title 的值已经自动地被系统从文件属性中添加到工作流中。</p>
<p><br>
<a name="2.1.6.图 7. 检验结果|outline"><strong>图 7. 检验结果</strong></a><br>
<img height="262" alt="图 7. 检验结果" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image017.jpg" width="327"></p>
<p><a name="2.2.Java组件应用举例|outline"><span class="smalltitle">Java 组件应用举例</span></a></p>
<p>在这个部分中 , 将会用到一个&ldquo; Verification Workflow &rdquo;。这个工作流定义了用户在付款之前，验证信用卡是否有效的阶段。它包含了一个叫做&ldquo; CC_Validate &rdquo;的组件步骤，这个步骤是通过使用 Java 组件实现的，最终会得到一个布尔类型的返回值来说明认证成功或者失败。</p>
<ol type="1">
    <li>在处理配置工作台中新建一个叫做&ldquo; CC_Validate &rdquo;的组件队列，选择 Java 组件作为它的适配器。然后配置这个适配器，选择要导入的 JAR 文件&ldquo; CC_Validate.jar &rdquo;，并且选择文件中的 CC_Validate.class 类。最后在 JAAS 证书部分中输入用户名，密码以及配置环境（CELogin）。</li>
</ol>
<p><br>
<a name="2.2.1.图 8. 添加组件队列并配置组件适配器|outline"><strong>图 8. 添加组件队列并配置组件适配器</strong></a><br>
<img height="385" alt="图 8. 添加组件队列并配置组件适配器" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image019.jpg" width="466"></p>
<ol type="1">
    <li>为 CC_Validate 组件队列添加操作&ldquo; validaCC &rdquo;，并且建议将参数名称改为一个具有实际意义的名字。最后保存更改。</li>
</ol>
<p><br>
<a name="2.2.2.图 9. 为组件添加操作|outline"><strong>图 9. 为组件添加操作</strong></a><br>
<img height="170" alt="图 9. 为组件添加操作" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image021.jpg" width="531"></p>
<ol type="1">
    <li>打开 Application Engine 的流程任务管理器，在组件管理器中选择相应的区域，将&ldquo; CC_Validte.jar &rdquo;文件添加到要求的库中，之后启动服务。</li>
</ol>
<p><br>
<a name="2.2.3.图 10. 添加要求的库|outline"><strong>图 10. 添加要求的库</strong></a><br>
<img height="219" alt="图 10. 添加要求的库" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image023.jpg" width="560"></p>
<ol type="1">
    <li>进入流程设计器，打开 Verification Workflow, 为组件步骤选择操作。</li>
</ol>
<p><br>
<a name="2.2.4.图 11. Verification Workflow|outline"><strong>图 11. Verification Workflow</strong></a><br>
<img height="312" alt="图 11. Verification Workflow" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image025.jpg" width="449"> <br>
<br>
<a name="2.2.5.图 12. 添加操作|outline"><strong>图 12. 添加操作</strong></a><br>
<img height="310" alt="图 12. 添加操作" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image027.jpg" width="353"></p>
<ol type="1">
    <li>最后验证，传输并启动这个工作流。在启动之前，为了能在组件队列中看到当前的任务状态，可以先停止组件管理器中的 CC_Validate 组件。启动工作流后首先进入第一个步骤，填写信用卡类型和卡号等信息，如果填写无误，工作项将进入组建步骤，并自动执行，通过流程跟踪器（Process Tracker），可以看到 CC_Validate 组件队列这个步骤已经更新为完成状态，并且验证成功，工作项进入了下一个步骤。</li>
</ol>
<p><br>
<a name="2.2.6.图 13. 验证成功|outline"><strong>图 13. 验证成功</strong></a><br>
<img height="244" alt="图 13. 验证成功" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image029.jpg" width="444"></p>
<p><a name="2.3.JMS应用举例|outline"><span class="smalltitle">JMS 应用举例</span></a></p>
<p>在这个部分中，将会用到一个&ldquo; Reservation Workflow &rdquo;。这个工作流实现了客户订单的预定阶段，它包含一个叫做&ldquo; Print Letter &rdquo;的组件步骤，这个步骤通过使用 JMS 组件实现了打印客户预订信息的功能。</p>
<ol type="1">
    <li>首先进入 WebLogic 控制台，分别新建 JMS 连接工厂和 JMS 队列，并记录下它们的名字：</li>
</ol>
<p><br>
<a name="2.3.1.表 2. JMS连接工厂和队列|outline"><strong>表 2. JMS 连接工厂和队列</strong></a><br>
<table class="data-table-1" cellspacing="0" cellpadding="0" border="0" sizset="39" sizcache="2">
    <tbody sizset="39" sizcache="1">
        <tr>
            <td><strong>JMS Connection Factory JNDI</strong></td>
            <td style="text-align: center">MagellanConnectionFactory</td>
        </tr>
        <tr>
            <td><strong>JMS queue JNDI</strong></td>
            <td>PrintQueue</td>
        </tr>
    </tbody>
</table>
</p>
<ol type="1">
    <li>通过发送并接受 JMS 消息来验证 JMS 队列是否连接成功。例如通过 QueueSend 发送&ldquo; Hello World! &rdquo;，然后通过&ldquo; QueueReceive &rdquo;接收到了&ldquo; Hello World! &rdquo;，说明配置成功。</li>
</ol>
<p><br>
<a name="2.3.2.图 14. 发送接受JMS消息|outline"><strong>图 14. 发送接受 JMS 消息</strong></a><br>
<img height="322" alt="图 14. 发送接受 JMS 消息" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image031.jpg" width="413"></p>
<ol type="1">
    <li>在处理配置工作台中新建一个叫做&ldquo; Print_Operations &rdquo;的组件队列，选择 JMS 组件作为它的适配器。然后配置这个适配器，输入在第一步中记录下来的两个 JNDI 名字。最后在 JAAS 证书部分中输入用户名，密码以及配置环境（CELogin）。</li>
</ol>
<p><br>
<a name="2.3.3.图 15. 新建并配置JMS组件|outline"><strong>图 15. 新建并配置 JMS 组件</strong></a><br>
<img height="357" alt="图 15. 新建并配置 JMS 组件" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image033.jpg" width="538"></p>
<ol type="1">
    <li>为建好的 JMS 组件添加操作，</li>
</ol>
<p><br>
<a name="2.3.4.图 16. 为JMS组件添加操作|outline"><strong>图 16. 为 JMS 组件添加操作</strong></a><br>
<img height="140" alt="图 16. 为 JMS 组件添加操作" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image035.jpg" width="530"></p>
<ol type="1">
    <li>打开 Application Engine 的流程任务管理器，在组件管理器中选择相应的区域，在高级选项中输入 JNDI 初始环境工厂：weblogic.jndi.WLInitialContextFactory，然后将&ldquo; weblogic.jar &rdquo;文件添加到要求的库中，最后启动服务。</li>
</ol>
<p><br>
<a name="2.3.5.图 17. 配置组件管理器|outline"><strong>图 17. 配置组件管理器</strong></a><br>
<img height="133" alt="图 17. 配置组件管理器" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image037.jpg" width="564"></p>
<ol type="1">
    <li>完成全部配置工作后，进入流程设计器，打开 Reservation Workflow 并使用 JMS 组件队列，</li>
</ol>
<p><br>
<a name="2.3.6.图 18. Reservation Workflow|outline"><strong>图 18. Reservation Workflow</strong></a><br>
<img height="248" alt="图 18. Reservation Workflow" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image039.jpg" width="526"> <br>
<br>
<a name="2.3.7.图 19. 添加操作|outline"><strong>图 19. 添加操作</strong></a><br>
<img height="307" alt="图 19. 添加操作" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image041.jpg" width="347"></p>
<ol type="1">
    <li>验证，传输并启动这个工作流。当工作项到 check availability step 时，到我的收件箱中输入要求的信息完成这个步骤，之后工作项进入到 Print_Operations 组件队列，并有系统自动执行，可以通过流程跟踪器来查看工作流的历史纪录，发现任务已经在下一个步骤。最后，通过第二步中的 QueueRecieve 小程序来验证当前工作流已经发出了消息。</li>
</ol>
<p><br>
<a name="2.3.8.图 20. 打印成功|outline"><strong>图 20. 打印成功</strong></a><br>
<img height="183" alt="图 20. 打印成功" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image043.jpg" width="365"> <br>
<br>
<a name="2.3.9.图 21. 接收消息|outline"><strong>图 21. 接收消息</strong></a><br>
<img height="399" alt="图 21. 接收消息" src="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0909zhangyf/image045.jpg" width="568"></p>
<p><a name="resources"><span class="atitle">参考资料 </span></a></p>
<p><strong>学习</strong></p>
<ul>
    <li>通过 <a href="http://www.ibm.com/developerworks/cn/data/" cmimpressionsent="1">developerWorks Information Management 专区</a>：在这里可以学到更多关于 Information Management 的知识。还可以找到技术文档、how-to 文章、培训、下载、产品信息等。</li>
    <li>访问 <a href="http://www.ibm.com/software/data/content-management/filenet-business-process-manager/" cmimpressionsent="1">IBM <strong style="color: black; background-color: #ffff66">FileNet</strong> Business Process Manager</a> 查看更多产品信息。</li>
    <li>在 <a href="http://www.ibm.com/support/docview.wss?rs=3323&amp;uid=swg27010422" cmimpressionsent="1">IBM <strong style="color: black; background-color: #ffff66">FileNet</strong> Product Family Product documentation</a> 可以找到更多 <strong style="color: black; background-color: #ffff66">FileNet</strong> 文档。</li>
    <li>参考&ldquo;<a href="http://publib.boulder.ibm.com/infocenter/cmgmt/v8r4m0/index.jsp" cmimpressionsent="1">IBM DB2 Content Manager 信息中心</a>&rdquo;，了解更多 IBM DB2 Content Manager 的相关内容。</li>
    <li>通过 Information Management 专区 <a href="http://www.ibm.com/developerworks/cn/data/products/db2cm/" cmimpressionsent="1">ECM 专题</a>，了解更多有关 CM 的产品和技术资源。</li>
</ul>
<p><br>
<strong>获得产品和技术</strong></p>
<ul>
    <li>使用可直接从 developerWorks 下载的 <a href="http://www.ibm.com/developerworks/cn/downloads/" cmimpressionsent="1">IBM 试用软件</a> 构建您的您的应用开发项目。</li>
    <li>developrWorks <a href="http://www.ibm.com/developerworks/cn/offers/techbriefings/" cmimpressionsent="1">技术活动</a>和<a href="http://www.ibm.com/developerworks/cn/swi/" cmimpressionsent="1">网络广播</a>：通过这些活动了解技术的最新发展。</li>
</ul>
<p><br>
<strong>讨论</strong></p>
<ul>
    <li>参与<a href="http://www.ibm.com/developerworks/blogs/?S_TACT=105AGX52&amp;S_CMP=content" cmimpressionsent="1" doneonce="true">developerWorks blogs</a>并加入 developerWorks 社区。</li>
</ul>
<p> </p>
<p><font color="#ff0000"><strong>non-original</strong></font></p> <a href="http://hi.baidu.com/gaozhiyan/blog/item/9ba7adeef48c71232cf534f4.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/Ibm%20Filenet%20P8">Ibm Filenet P8</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/9ba7adeef48c71232cf534f4.html#comment">查看评论</a>]]></description>
        <pubDate>2009年10月10日 星期六  下午 02:56</pubDate>
        <category><![CDATA[Ibm Filenet P8]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/9ba7adeef48c71232cf534f4.html</guid>
</item>

<item>
        <title><![CDATA[filenet:IBM FileNet Enterprise Manager 如何实现类似数据库的触发和对触发的处理]]></title>
        <link><![CDATA[http://hi.baidu.com/gaozhiyan/blog/item/77aa1c2d0b8a053e359bf7fa.html]]></link>
        <description><![CDATA[
		
		　　IBM FileNet P8 4.0 Platform 是<img src="http://www.crazycoder.cn/icons/36423yi.gif">个以内容和流程管理为核心<img src="http://www.crazycoder.cn/icons/36423de.gif">产品<img src="http://www.crazycoder.cn/icons/36423dou.gif">主要应用在金融行业<img src="http://www.crazycoder.cn/icons/36423dou.gif">为企业提供流程管理和内容管理<img src="http://www.crazycoder.cn/icons/36423de.gif">相关服务<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　Content Engine(CE)则是 IBM FileNet P8 4.0 Platform 产品最核心<img src="http://www.crazycoder.cn/icons/36423de.gif">组件的<img src="http://www.crazycoder.cn/icons/36423yi.gif"><img src="http://www.crazycoder.cn/icons/36423dou2.gif">它负责内容管理<img src="http://www.crazycoder.cn/icons/36423de.gif">核心解决方案<img src="http://www.crazycoder.cn/icons/36423dou.gif">并为结构化数据、半结构化数据和非结构化数据进行统<img src="http://www.crazycoder.cn/icons/36423yi.gif">集中式管理<img src="http://www.crazycoder.cn/icons/36423dou2.gif">其具体<img src="http://www.crazycoder.cn/icons/36423de.gif">功能有:内容<img src="http://www.crazycoder.cn/icons/36423de.gif">搜索和存储、版本管理、文档<img src="http://www.crazycoder.cn/icons/36423de.gif">生命周期管理、事件订阅等<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　Content Engine 提供了<img src="http://www.crazycoder.cn/icons/36423yi.gif">个框架可以使 <img src="http://www.crazycoder.cn/icons/36423System.gif"> Event 或者 Custom Event 在 Content Engine 中<img src="http://www.crazycoder.cn/icons/36423de.gif"> object 或 <img src="http://www.crazycoder.cn/icons/36423class.gif"> 上被触发时执行用户指定<img src="http://www.crazycoder.cn/icons/36423de.gif">行为(Event Action)<img src="http://www.crazycoder.cn/icons/36423dou2.gif">我们称的为 subscription<img src="http://www.crazycoder.cn/icons/36423dou.gif">也就是说 subscription 是将 event action、<img src="http://www.crazycoder.cn/icons/36423yi.gif">个或者多个 event 和<img src="http://www.crazycoder.cn/icons/36423yi.gif">个监听触发 event <img src="http://www.crazycoder.cn/icons/36423de.gif"> target Content Engine object 或 <img src="http://www.crazycoder.cn/icons/36423class.gif"> 绑定在<img src="http://www.crazycoder.cn/icons/36423yi.gif">起<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><img src="http://www.crazycoder.cn/icons/36423yi.gif">般而言<img src="http://www.crazycoder.cn/icons/36423dou.gif">event action 是被开发者编码实现<img src="http://www.crazycoder.cn/icons/36423de.gif"><img src="http://www.crazycoder.cn/icons/36423dou.gif">而 subscription 则是在 Enterprise Manager 被管理员所添加<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　在 Content Engine 中可以使用 subscription 等相关技术来实现类似数据库<img src="http://www.crazycoder.cn/icons/36423de.gif">触发器<img src="http://www.crazycoder.cn/icons/36423de.gif">功能<img src="http://www.crazycoder.cn/icons/36423dou.gif">从而可以实现对复杂流程<img src="http://www.crazycoder.cn/icons/36423de.gif">控制、维护数据完整性、审计等多种功能<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　举例<br>
<br>
　　假设我们已经通过编码实现了<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 event action(参见下面相关概念中有关 event action <img src="http://www.crazycoder.cn/icons/36423de.gif">介绍和如何实现 event action 部分)<img src="http://www.crazycoder.cn/icons/36423dou.gif">让它在某个指定类型<img src="http://www.crazycoder.cn/icons/36423de.gif"> document 被删掉后发送<img src="http://www.crazycoder.cn/icons/36423yi.gif">封 email <img src="http://www.crazycoder.cn/icons/36423dou2.gif">我们需要执行以下步骤来实现并验证这个 subscription:<br>
<br>
　　在该 document <img src="http://www.crazycoder.cn/icons/36423class.gif"> 上创建<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 subscription<img src="http://www.crazycoder.cn/icons/36423dou.gif">并将这个 event action 指派给它；<br>
<br>
　　选择 Deletion Event 作为这个 subscription <img src="http://www.crazycoder.cn/icons/36423de.gif"> trigger events 的<img src="http://www.crazycoder.cn/icons/36423yi.gif">；<br>
<br>
　　创建上述 document <img src="http://www.crazycoder.cn/icons/36423class.gif"> <img src="http://www.crazycoder.cn/icons/36423yi.gif">个对象<img src="http://www.crazycoder.cn/icons/36423dou.gif">然后将其删除；<br>
<br>
　　您可以去您指定<img src="http://www.crazycoder.cn/icons/36423de.gif">邮箱中查找有关删除该 document 对象<img src="http://www.crazycoder.cn/icons/36423de.gif"> email <img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　在 CE 中<img src="http://www.crazycoder.cn/icons/36423dou.gif">当任何<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 object 或 <img src="http://www.crazycoder.cn/icons/36423class.gif"> 发生了某个 event<img src="http://www.crazycoder.cn/icons/36423dou.gif">subscription 处理器都会检验在其上是否指定了这个事件作为触发事件<img src="http://www.crazycoder.cn/icons/36423dou2.gif">如果指定了<img src="http://www.crazycoder.cn/icons/36423dou.gif">处理器就会读取相应<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423de.gif">内容<img src="http://www.crazycoder.cn/icons/36423dou.gif">并<img src="http://www.crazycoder.cn/icons/36423diaoyong.gif">相应<img src="http://www.crazycoder.cn/icons/36423de.gif">思路方法作为该 event <img src="http://www.crazycoder.cn/icons/36423de.gif">响应<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　相关概念<br>
<br>
　　当定义<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 subscription<img src="http://www.crazycoder.cn/icons/36423dou.gif">您需要设置 event action, target object, and trigger event<img src="http://www.crazycoder.cn/icons/36423dou.gif">下面就分别介绍它们<img src="http://www.crazycoder.cn/icons/36423de.gif">定义:<br>
<br>
　　Event Action<br>
<br>
　　Event action 是指<img src="http://www.crazycoder.cn/icons/36423yi.gif">个实现了 Content Engine API's EventActionHandler 接口<img src="http://www.crazycoder.cn/icons/36423de.gif"> Java&#8482; 类<img src="http://www.crazycoder.cn/icons/36423dou.gif">即描述了当某<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 trigger event 触发 target object 定义<img src="http://www.crazycoder.cn/icons/36423de.gif"> subscription 时<img src="http://www.crazycoder.cn/icons/36423dou.gif">Content Engine 需要执行<img src="http://www.crazycoder.cn/icons/36423de.gif">操作<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　Event action 有着广泛<img src="http://www.crazycoder.cn/icons/36423de.gif">用途<img src="http://www.crazycoder.cn/icons/36423dou.gif">如:<br>
<br>
　　通知 / 通讯:你可以实现<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 event action 用来自动根据特定<img src="http://www.crazycoder.cn/icons/36423de.gif">事件和源对象给合适<img src="http://www.crazycoder.cn/icons/36423de.gif">人发送相关<img src="http://www.crazycoder.cn/icons/36423de.gif"> email 等信息<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　记录日志 / 计数:通过跟踪 CE 中各种区别对象和事件<img src="http://www.crazycoder.cn/icons/36423de.gif">使用频率来自动生成有关事件<img src="http://www.crazycoder.cn/icons/36423de.gif">详细记录<img src="http://www.crazycoder.cn/icons/36423dou.gif">或者自动增加相关计数器<img src="http://www.crazycoder.cn/icons/36423dou.gif">并将这些信息写入数据库或者文件中<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　过滤:对于像文档生命周期(document l<img src="http://www.crazycoder.cn/icons/36423if.gif">e cycle)或者工作流流程(workflow process)等复杂<img src="http://www.crazycoder.cn/icons/36423de.gif">流程<img src="http://www.crazycoder.cn/icons/36423dou.gif">您可能需要<img src="http://www.crazycoder.cn/icons/36423yi.gif">个高级<img src="http://www.crazycoder.cn/icons/36423de.gif">过滤器用来在系统接收某个 document 的前对于这个 document <img src="http://www.crazycoder.cn/icons/36423de.gif">内容或者 document 本身进行过滤<img src="http://www.crazycoder.cn/icons/36423dou2.gif">您也可以编写<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 event handler 来拒绝某些特定<img src="http://www.crazycoder.cn/icons/36423de.gif"> document <img src="http://www.crazycoder.cn/icons/36423de.gif">进入并且中止或者回滚事务(transaction)<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　Target Object<br>
<br>
　　Target object 是指被 subscription 作用<img src="http://www.crazycoder.cn/icons/36423de.gif">对象<img src="http://www.crazycoder.cn/icons/36423dou.gif">它可以是以下几种类型:<br>
<br>
　　Class definition:在这种情况下<img src="http://www.crazycoder.cn/icons/36423dou.gif">subscription 可以影响到它<img src="http://www.crazycoder.cn/icons/36423de.gif">所有 instance <img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　Single instance:在这种情况下<img src="http://www.crazycoder.cn/icons/36423dou.gif">subscription 只会影响到该对象<img src="http://www.crazycoder.cn/icons/36423de.gif">某<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 version <img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　Version series:在这种情况下<img src="http://www.crazycoder.cn/icons/36423dou.gif">subscription 可以影响到<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 versionable object <img src="http://www.crazycoder.cn/icons/36423de.gif">所有 version<img src="http://www.crazycoder.cn/icons/36423dou.gif">而每个 version 都是<img src="http://www.crazycoder.cn/icons/36423yi.gif">个独立<img src="http://www.crazycoder.cn/icons/36423de.gif"> instance <img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　上面<img src="http://www.crazycoder.cn/icons/36423de.gif">例子就属于 Class definition <img src="http://www.crazycoder.cn/icons/36423de.gif">情况<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　虽然您可以将 subscription 指派给独立<img src="http://www.crazycoder.cn/icons/36423de.gif"> instance<img src="http://www.crazycoder.cn/icons/36423dou.gif">但是如果将 subscription 指派给 <img src="http://www.crazycoder.cn/icons/36423class.gif"> 会让它变得更加有效<img src="http://www.crazycoder.cn/icons/36423dou.gif"><img src="http://www.crazycoder.cn/icons/36423yinwei.gif">将 subscription 指派给 <img src="http://www.crazycoder.cn/icons/36423class.gif"> 会保证它<img src="http://www.crazycoder.cn/icons/36423de.gif">对象会得到<img src="http://www.crazycoder.cn/icons/36423yi.gif">致<img src="http://www.crazycoder.cn/icons/36423de.gif">管理<img src="http://www.crazycoder.cn/icons/36423dou2.gif">而且<img src="http://www.crazycoder.cn/icons/36423dou.gif">在 <img src="http://www.crazycoder.cn/icons/36423class.gif"> 上建立 subscription 会减少同时运行<img src="http://www.crazycoder.cn/icons/36423de.gif"> subscription <img src="http://www.crazycoder.cn/icons/36423de.gif">总量<img src="http://www.crazycoder.cn/icons/36423dou.gif">从而提升系统性能<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　Trigger Event<br>
<br>
　　Trigger event 是指希望被用来触发某个 subscription <img src="http://www.crazycoder.cn/icons/36423de.gif">事件<img src="http://www.crazycoder.cn/icons/36423dou.gif">而 target object <img src="http://www.crazycoder.cn/icons/36423de.gif">类型决定了哪些 trigger event 类型对于其上<img src="http://www.crazycoder.cn/icons/36423de.gif"> subscription 是可用<img src="http://www.crazycoder.cn/icons/36423de.gif"><img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　上面<img src="http://www.crazycoder.cn/icons/36423de.gif">例子里<img src="http://www.crazycoder.cn/icons/36423dou.gif">trigger event <img src="http://www.crazycoder.cn/icons/36423de.gif">类型是&ldquo; Deletion Event &rdquo;<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　下面<img src="http://www.crazycoder.cn/icons/36423de.gif">表格描述了在 Content Engine 中区别 target object 上可供使用<img src="http://www.crazycoder.cn/icons/36423de.gif"> trigger event 类型:<br>
<br>
　　表 1. Event 信息表<br>
<br>
Event 类型 描述 Target object 类型 <br>
Cancel Checkout Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 document 上<img src="http://www.crazycoder.cn/icons/36423de.gif"> reservation 被取消时就触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document <br>
Change Class Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 object <img src="http://www.crazycoder.cn/icons/36423de.gif">所属 <img src="http://www.crazycoder.cn/icons/36423class.gif"> 被变更时就触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document, folder, custom object <br>
Change State Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 document <img src="http://www.crazycoder.cn/icons/36423de.gif">声明周期状态( l<img src="http://www.crazycoder.cn/icons/36423if.gif">ecycle state )被变更时就触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document <br>
Checkin Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 document 被 check in 时就触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document <br>
Checkout Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 document 被 check out 时就触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document <br>
Class<img src="http://www.crazycoder.cn/icons/36423if.gif">y Complete Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 document 已经被 <img src="http://www.crazycoder.cn/icons/36423class.gif"><img src="http://www.crazycoder.cn/icons/36423if.gif">ier 处理过后触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document <br>
Creation Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在某个 <img src="http://www.crazycoder.cn/icons/36423class.gif"> <img src="http://www.crazycoder.cn/icons/36423de.gif">例子被创建并保存时触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document, folder, or custom object <br>
Custom Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个用户定义<img src="http://www.crazycoder.cn/icons/36423de.gif"> custom event 出现时触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> 很多种类<img src="http://www.crazycoder.cn/icons/36423de.gif"> object <br>
Deletion Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个对象被从 object store 删除时触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document, folder, or custom object <br>
Demote Version Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 document 降级到<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 minor version 时触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif">只在允许 versioning <img src="http://www.crazycoder.cn/icons/36423de.gif"> document 上有效<img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document <br>
File Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个对象被归档到<img src="http://www.crazycoder.cn/icons/36423yi.gif">个文件夹时触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif">(包括子文件夹<img src="http://www.crazycoder.cn/icons/36423de.gif">创建) Folder <br>
Freeze Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 document <img src="http://www.crazycoder.cn/icons/36423de.gif"> Freeze 思路方法被<img src="http://www.crazycoder.cn/icons/36423diaoyong.gif">时触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document <br>
Lock Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个对象<img src="http://www.crazycoder.cn/icons/36423de.gif"> Lock 思路方法被<img src="http://www.crazycoder.cn/icons/36423diaoyong.gif">时触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document, folder, or custom object <br>
Promote Version Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 document 升级到<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 major version 时触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif">只在允许 versioning <img src="http://www.crazycoder.cn/icons/36423de.gif"> document 上有效<img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document <br>
Unfile Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个对象被从<img src="http://www.crazycoder.cn/icons/36423yi.gif">个文件夹中删除时触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif">(包括子文件夹<img src="http://www.crazycoder.cn/icons/36423de.gif">删除) Folder <br>
Unlock Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个对象<img src="http://www.crazycoder.cn/icons/36423de.gif"> Unlock 思路方法被<img src="http://www.crazycoder.cn/icons/36423diaoyong.gif">时触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document, folder, or custom object <br>
Update Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个对象<img src="http://www.crazycoder.cn/icons/36423de.gif"> properties 被改变时触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document, folder, or custom object <br>
Update Security Event 无论何时<img src="http://www.crazycoder.cn/icons/36423dou.gif">在<img src="http://www.crazycoder.cn/icons/36423yi.gif">个对象<img src="http://www.crazycoder.cn/icons/36423de.gif"> Security 设置被改变时触发<img src="http://www.crazycoder.cn/icons/36423yi.gif">个指定<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> Document, folder, or custom object <br>
<br>
<br>
<br>
　　Custom Event<br>
<br>
　　尽管 Content Engine 已经提供了很多种类<img src="http://www.crazycoder.cn/icons/36423de.gif"> event<img src="http://www.crazycoder.cn/icons/36423dou.gif">但其强大<img src="http://www.crazycoder.cn/icons/36423de.gif">可扩展性使您仍然可以根据需要创建自己<img src="http://www.crazycoder.cn/icons/36423de.gif"> custom event <img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　在默认情况下<img src="http://www.crazycoder.cn/icons/36423dou.gif">Event 下面存在这<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 CustomEvent 类<img src="http://www.crazycoder.cn/icons/36423dou.gif">它是所有用户定义<img src="http://www.crazycoder.cn/icons/36423de.gif"> custom event <img src="http://www.crazycoder.cn/icons/36423de.gif">基类<img src="http://www.crazycoder.cn/icons/36423dou2.gif">也就是说使用 Enterprise Manager 创建自己<img src="http://www.crazycoder.cn/icons/36423de.gif"> custom event 就是创建了<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 CustomEvent <img src="http://www.crazycoder.cn/icons/36423de.gif">子类<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　<img src="http://www.crazycoder.cn/icons/36423yi.gif">旦创建了<img src="http://www.crazycoder.cn/icons/36423yi.gif">个 custom event 并且刷新了 object store<img src="http://www.crazycoder.cn/icons/36423dou.gif">那您就可以在给 <img src="http://www.crazycoder.cn/icons/36423class.gif"> 或者 object 创建 subscription 时从可用 event 列表中选取该 custom event <img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　小结<br>
<br>
　　在 Content Engine 中<img src="http://www.crazycoder.cn/icons/36423dou.gif">subscription 包含了 event action, target object 和 trigger event<img src="http://www.crazycoder.cn/icons/36423dou.gif">它们代表<img src="http://www.crazycoder.cn/icons/36423de.gif">含义分别为:<br>
<br>
　　表 2. 概念小结表<br>
<br>
Event action Subscription 被触发后<img src="http://www.crazycoder.cn/icons/36423dou.gif">执行<img src="http://www.crazycoder.cn/icons/36423de.gif">操作 <br>
Target object 设置 subscription <img src="http://www.crazycoder.cn/icons/36423de.gif">目标<img src="http://www.crazycoder.cn/icons/36423dou.gif">即在哪监听 trigger event <img src="http://www.crazycoder.cn/icons/36423de.gif">发生<img src="http://www.crazycoder.cn/icons/36423dou.gif">并触发 event action <br>
Trigger event 描述了哪种(或哪些)事件可以触发该 subscription <img src="http://www.crazycoder.cn/icons/36423dou2.gif"> <br>
<br>
<br>
<br>
　　如何实现 Event Action<br>
<br>
　　上面提到过 Event action 是指<img src="http://www.crazycoder.cn/icons/36423yi.gif">个实现了 Content Engine API's EventActionHandler 接口<img src="http://www.crazycoder.cn/icons/36423de.gif"> Java&#8482; 类<img src="http://www.crazycoder.cn/icons/36423dou.gif">而 EventActionHandler 接口里只定义了<img src="http://www.crazycoder.cn/icons/36423yi.gif">个思路方法:<br>
<br>
<font face="新宋体"><code>void　onEvent　(　ObjectChangeEvent　event,　Id　subscriptionId)　<br>
　　</code><br>
<br>
</font>　　其中 event 表示 Trigger event<img src="http://www.crazycoder.cn/icons/36423dou.gif">而用户或者开发者可以通过 subscriptionId 来获取和这个 event acion 关联<img src="http://www.crazycoder.cn/icons/36423de.gif">对象<img src="http://www.crazycoder.cn/icons/36423dou.gif">即 target object <img src="http://www.crazycoder.cn/icons/36423dou2.gif">实现了 EventActionHandler 接口中<img src="http://www.crazycoder.cn/icons/36423de.gif"> _disibledevent=&gt;<br>
<br>
　　2. 输入 Subscription <img src="http://www.crazycoder.cn/icons/36423de.gif">名字:<br>
<br>
　　图 2. 输入 Subscription <img src="http://www.crazycoder.cn/icons/36423de.gif">名字<br>
<br>
<img src="http://www.crazycoder.cn/WebFiles/20099/103313d1-b616-45eb-a798-52ecbdd364a5.jpg"><br>
<br>
　　3. 选择是对该 <img src="http://www.crazycoder.cn/icons/36423class.gif"> <img src="http://www.crazycoder.cn/icons/36423de.gif">所有 instance 都生效<img src="http://www.crazycoder.cn/icons/36423dou.gif">还是对单独<img src="http://www.crazycoder.cn/icons/36423de.gif">某<img src="http://www.crazycoder.cn/icons/36423yi.gif">个生效:<br>
<br>
　　图 3. 选择 Subscription 影响<img src="http://www.crazycoder.cn/icons/36423de.gif">对象<br>
<br>
<img src="http://www.crazycoder.cn/WebFiles/20099/2831d89f-d122-4dc2-a497-79908374b088.jpg"><br>
<br>
　　4. 从可用 event 列表中选择触发 Subscription <img src="http://www.crazycoder.cn/icons/36423de.gif"> trigger event(前面提到<img src="http://www.crazycoder.cn/icons/36423dou.gif">您可以建立自己<img src="http://www.crazycoder.cn/icons/36423de.gif"> custom event 看来扩展 Content Engine 提供给您<img src="http://www.crazycoder.cn/icons/36423de.gif"> trigger event)<br>
<br>
　　图 4. 选择 trigger event<br>
<br>
<img src="http://www.crazycoder.cn/WebFiles/20099/0ace0bab-27fe-4f0c-bdbb-e715e059aeac.jpg"><br>
<br>
　　5. 选取 Event Action<img src="http://www.crazycoder.cn/icons/36423dou.gif">即当上面选中<img src="http://www.crazycoder.cn/icons/36423de.gif"> event 出现时<img src="http://www.crazycoder.cn/icons/36423dou.gif">做出什么相应<img src="http://www.crazycoder.cn/icons/36423dou2.gif">您可以在这里创建新<img src="http://www.crazycoder.cn/icons/36423de.gif"> Event Action, 只需要指定实现 EventActionHandler 接口<img src="http://www.crazycoder.cn/icons/36423de.gif"> <img src="http://www.crazycoder.cn/icons/36423class.gif"> 或者 JAR 文件<img src="http://www.crazycoder.cn/icons/36423de.gif">路径<img src="http://www.crazycoder.cn/icons/36423dou.gif">然后给该 Event Action 命名即可<img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　图 5. 选择 Event Action<br>
<br>
<img src="http://www.crazycoder.cn/WebFiles/20099/cb87acc5-d880-47b2-8208-f9871d33d150.jpg"><br>
<br>
　　6. 指定<img src="http://www.crazycoder.cn/icons/36423yi.gif">些附加<img src="http://www.crazycoder.cn/icons/36423de.gif">属性:<br>
<br>
　　图 6. 指定附加属性<br>
<br>
<img src="http://www.crazycoder.cn/WebFiles/20099/a7970166-2e3b-4cb9-b4b5-b445fbaf6eb6.jpg"><br>
<br>
　　7. 最后点击 Finish <img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　图 7. 点击 Finish<br>
<br>
<img src="http://www.crazycoder.cn/WebFiles/20099/3d3d3b7e-ab5f-49e5-8b6e-06bd25efb209.jpg"><br>
<br>
　　这样<img src="http://www.crazycoder.cn/icons/36423dou.gif">我们就完成了在 ContentEngineTest 类上建立名称为 SubscriptionTest、trigger event 为 Deletion Event、Event Action 为 Workflow Event Action <img src="http://www.crazycoder.cn/icons/36423de.gif"><img src="http://www.crazycoder.cn/icons/36423yi.gif">个 Subscription <img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　这个 Subscription 会在 ContentEngineTest <img src="http://www.crazycoder.cn/icons/36423de.gif">例子(Target object)被删除(Deletion Event)时自动触发 Workflow Event Action <img src="http://www.crazycoder.cn/icons/36423dou2.gif"><br>
<br>
　　整理总结<br>
<br>
　　本文介绍了 Content Engine 中 subscription 相关<img src="http://www.crazycoder.cn/icons/36423de.gif"> event action, target object 和 trigger event <img src="http://www.crazycoder.cn/icons/36423de.gif">概念<img src="http://www.crazycoder.cn/icons/36423dou.gif">并讲解了如何在 Content Engine 中添加用户自定义<img src="http://www.crazycoder.cn/icons/36423de.gif"> event(custom event)和 event action<img src="http://www.crazycoder.cn/icons/36423dou.gif">最后又在 FileNet Enterprise Manager 模拟了建立 subscription <img src="http://www.crazycoder.cn/icons/36423de.gif">全过程<img src="http://www.crazycoder.cn/icons/36423dou2.gif">借助本文<img src="http://www.crazycoder.cn/icons/36423dou.gif">读者可以更好<img src="http://www.crazycoder.cn/icons/36423de.gif">掌握 Content Engine 中 subscription <img src="http://www.crazycoder.cn/icons/36423de.gif">相关概念和技术<img src="http://www.crazycoder.cn/icons/36423dou.gif">更好<img src="http://www.crazycoder.cn/icons/36423de.gif">利用 Content Engine 完成工作并提高效率<img src="http://www.crazycoder.cn/icons/36423dou2.gif">希望本文对您<img src="http://www.crazycoder.cn/icons/36423de.gif">工作有所帮助 <a href="http://hi.baidu.com/gaozhiyan/blog/item/77aa1c2d0b8a053e359bf7fa.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/gaozhiyan/blog/category/Ibm%20Filenet%20P8">Ibm Filenet P8</a>&nbsp;<a href="http://hi.baidu.com/gaozhiyan/blog/item/77aa1c2d0b8a053e359bf7fa.html#comment">查看评论</a>]]></description>
        <pubDate>2009年09月28日 星期一  下午 02:28</pubDate>
        <category><![CDATA[Ibm Filenet P8]]></category>
        <author><![CDATA[gaozhiyan]]></author>
		<guid>http://hi.baidu.com/gaozhiyan/blog/item/77aa1c2d0b8a053e359bf7fa.html</guid>
</item>


</channel>
</rss>