??xml version="1.0" encoding="utf-8" standalone="yes"?>国产片一区二区三区,2020国产精品久久精品不卡,国产一区二区三区四区三区四http://www.aygfsteel.com/kingace/zh-cnThu, 19 Jun 2025 09:39:39 GMTThu, 19 Jun 2025 09:39:39 GMT60struts-config.xml?action 的attribute属性与name属?/title><link>http://www.aygfsteel.com/kingace/archive/2008/09/20/230121.html</link><dc:creator>chenkai</dc:creator><author>chenkai</author><pubDate>Sat, 20 Sep 2008 05:37:00 GMT</pubDate><guid>http://www.aygfsteel.com/kingace/archive/2008/09/20/230121.html</guid><wfw:comment>http://www.aygfsteel.com/kingace/comments/230121.html</wfw:comment><comments>http://www.aygfsteel.com/kingace/archive/2008/09/20/230121.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kingace/comments/commentRss/230121.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kingace/services/trackbacks/230121.html</trackback:ping><description><![CDATA[<div>1、在一般情况下QactionForm是被存储在一定的scope?request或sessionQ通过action的scope属性来配置)Q当我们在配|时Q指定name而不指定attributeQ那么指定的name值就作ؓactionForm存储在scope中的key|我们可以在action中通过httpServletRequest.getAttribute("指定的name属性?)来获得这个actionFormQ?nbsp;    当我们既配置了name又配|了attributeQ那么actionForm存储在scope中的key值就采用attribute属性指定的gQ这时要通过httpServletRequest.getAttribute("指定的attribute属性?)来获得actionFormQ此旉过httpServletRequest.getAttribute("指定的name属性?)是不能获得actionForm的?nbsp; <br />    <br />     所以,是否配置attribute属性就军_了actionForm存储在scope中的key值是采用nameQ还是采用attribute</div> <div> <p> 2、 在《Programming Jakarta Struts》这本书中的W四?#8220;Configuring the Struts Application”中这样一D说明来分别阐述q两<br /> 个属性:(102?<br /> ++++++++<br /> atribute:<br /> ++++++++<br /> The name of the request or session scope attribute under which the form bean for this action can be accessed.<br /> A value is only allowed here if there is a form bean specified in the name attribute. This attribute is<br /> optional and has no default value.</p> <p>++++++++<br /> name:<br /> ++++++++<br /> The name of the form bean, if any, that is associated with this action. This value must be the name attribute<br /> from one of the form-bean elements defined earlier. This attribute is optional and has no default value.</p> <p>最初看q些真的q是不好区分q两者。不q在仔细看过struts的源代码以后Q豁然开朗。。?/p> <p>下面主要对attributeq行解释Q应为没有h会对name属性不了解的(呵呵。。。)</p> <p><br /> 解释Q在struts实例化actionform的时候,有两U情况:如果已经存在Q那么从内存中取回;如果W一ơ实例化Q那么创建,q放入内存?br /> q样有一个问题了Qstruts是根据什么来取回q创建actionform的呢Q答案就是attribute的倹{让我们q入struts的源代码Q?/p> <p>/**<br /> *创徏或者取回formbeanҎ<br /> *该方法在Qorg.apache.struts.util.RequestUtils?br /> */<br /> public static Actionform createActionform(<br /> HttpServletRequest request,<br /> ActionMapping mapping,<br /> ModuleConfig moduleConfig,<br /> ActionServlet servlet) {<br /> 。。。?br /> 。。?br /> // Is there a form bean associated with this mapping?<br /> //得到action mapping中attribute的?br /> String attribute = mapping.getAttribute();<br /> 。。。?br /> 。。。?br /> Actionform instance = null;<br /> HttpSession session = null;<br /> //yes!!在q里了,把创Z后的actionform攑֜request或者session里,看到攑օ的名字了么,是mapping.getAttribute();<br /> if ("request".equals(mapping.getScope())) {<br /> instance = (Actionform) request.getAttribute(attribute);<br /> } else {<br /> session = request.getSession();<br /> instance = (Actionform) session.getAttribute(attribute);<br /> }<br /> 。。?br /> 。。?br /> <br /> <br /> }<br /> <br /> <br /> 下面又有一个问题Q出水面:如果我没有在action mapping中指定attribute呢,那struts 是如何解决的Q?br /> {案很简单,如果单从l果上看Q此时struts使用的name的|Z么呢Q看struts源代码:</p> <p>/**<br /> * The request-scope or session-scope attribute name under which our<br /> * form bean is accessed, if it is different from the form bean's<br /> * specified <code>name</code>.<br /> *该代码在Qorg.apache.struts.config.ActionConfig?br /> */<br /> protected String attribute = null;</p> <p>public String getAttribute() {<br /> //yes!!!!在q里Q看C吧,如果你没有设定attributeQ那么struts 会把name的值拿q来用。呵c。?br /> if (this.attribute == null) {<br /> return (this.name);<br /> } else {<br /> return (this.attribute);<br /> }<br /> }</p> <p>public void setAttribute(String attribute) {<br /> if (configured) {<br /> throw new IllegalStateException("Configuration is frozen");<br /> }<br /> this.attribute = attribute;<br /> }<br /> </p> </div> <img src ="http://www.aygfsteel.com/kingace/aggbug/230121.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kingace/" target="_blank">chenkai</a> 2008-09-20 13:37 <a href="http://www.aygfsteel.com/kingace/archive/2008/09/20/230121.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Request的getParameter和getAttributeҎ的区?http://www.aygfsteel.com/kingace/archive/2008/09/20/230092.htmlchenkaichenkaiSat, 20 Sep 2008 01:57:00 GMThttp://www.aygfsteel.com/kingace/archive/2008/09/20/230092.htmlhttp://www.aygfsteel.com/kingace/comments/230092.htmlhttp://www.aygfsteel.com/kingace/archive/2008/09/20/230092.html#Feedback0http://www.aygfsteel.com/kingace/comments/commentRss/230092.htmlhttp://www.aygfsteel.com/kingace/services/trackbacks/230092.html      下面整理一下getParameter和getAttribute的区别和各自的用范围?/p>

      Q?QHttpServletRequestcLsetAttribute()ҎQ而没有setParameter()Ҏ

      Q?Q当两个Weblg之间为链接关pLQ被链接的组仉过getParameter()Ҏ来获得请求参敎ͼ例如假定welcome.jsp和authenticate.jsp之间为链接关p,welcome.jsp中有以下代码Q?br />
      <a  href="authenticate.jsp?username=wolf">authenticate.jsp  </a>

      或者:

      <form  name="form1"  method="post"  action="authenticate.jsp">
          误入用户姓名:<input  type="text"  name="username">
          <input  type="submit"  name="Submit"  value="提交">
      </form>

       在authenticate.jsp中通过request.getParameter("username")Ҏ来获得请求参数username:

       <%  String  username=request.getParameter("username");  %>

       Q?Q当两个Weblg之间{发关pLQ{发目标组仉过getAttribute()Ҏ来和转发源组件共享request范围内的数据?/p>

        假定  authenticate.jsp和hello.jsp之间{发关pRauthenticate.jsp希望向hello.jsp传递当前的用户名字Q? 如何传递这一数据呢?先在authenticate.jsp中调用setAttribute()ҎQ?br />
        <%
        String  username=request.getParameter("username");
        request.setAttribute("username"Qusername);
        %>

        <jsp:forward  page="hello.jsp"  />

        在hello.jsp中通过getAttribute()Ҏ获得用户名字:

        <%  String  username=(String)request.getAttribute("username");  %>
        Hello:  <%=username  %>

        从更q层次考虑Qrequest.getParameter()Ҏ传递的数据Q会从Web客户端传到Web服务器端Q代表HTTPh数据。request.getParameter()Ҏq回Stringcd的数据?br />
        request.setAttribute()和getAttribute()Ҏ传递的数据只会存在于Web容器内部Q在h转发关系的Weblg之间׃n。这两个Ҏ能够讄Objectcd的共享数据?br />
        request.getParameter()取得是通过容器的实现来取得通过cMpostQget{方式传入的数据?/p>

        request.setAttribute()和getAttribute()只是在web容器内部{Q仅仅是h处理阶段?/p>

        getAttribute是返回对?getParameterq回字符?br />
        ȝ来说Qrequest.getAttribute()Ҏq回request范围内存在的对象Q而request.getParameter()Ҏ是获取http提交q来的数据?/strong>



chenkai 2008-09-20 09:57 发表评论
]]>
用javascript实现table的排?/title><link>http://www.aygfsteel.com/kingace/archive/2008/08/09/220988.html</link><dc:creator>chenkai</dc:creator><author>chenkai</author><pubDate>Sat, 09 Aug 2008 03:40:00 GMT</pubDate><guid>http://www.aygfsteel.com/kingace/archive/2008/08/09/220988.html</guid><wfw:comment>http://www.aygfsteel.com/kingace/comments/220988.html</wfw:comment><comments>http://www.aygfsteel.com/kingace/archive/2008/08/09/220988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kingace/comments/commentRss/220988.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kingace/services/trackbacks/220988.html</trackback:ping><description><![CDATA[<p><%@page <br /> language="java" <br /> contentType="text/html;charset=GBK"<br /> %></p> <p><html><br /> <head><br />     <title>MyHtml.html</title><br />     <meta http-equiv="content-type" content="text/html; charset=gbk"><br />     <br />     <!--<link rel="stylesheet" type="text/css" href="./styles.css">--></p> <p>   <script  language="javascript"></p> <p> </p> <p>function   JM_PowerList(colNum)   <br />   {   <br />   headEventObject=event.srcElement;//取得引发事g的对?nbsp;  <br />   while(headEventObject.tagName!="TR")   //不是tr?则从底下的td冒上来L到相应行   <br />   {   <br />   headEventObject=headEventObject.parentElement;   <br />   }   <br />     <br />   for   (i=0;i<headEventObject.children.length;i++)   <br />   {   alert(headEventObject.children[i].tagName);<br />   if   (headEventObject.children[i]!=event.srcElement)//扑ֈ事g发生的td单元?nbsp;  <br />   {   <br />   headEventObject.children[i].className='listTableHead';//把点ȝ列的className属性设为listTableHead   <br />   }   <br />   }   <br />     <br />   var   tableRows=0;   <br />   trObject=clearStart.children[0].children;   //取得表格中行对象,   原来q里叫DataTable,   可能是你写错了吧??   <br />   for   (i=0;i<trObject.length;i++)   <br />   {   <br />   Object=clearStart.children[0].children[i];//取得每行的对?nbsp;  <br />   tableRows=(trObject[i].id=='ignore')?tableRows:tableRows+1;//如果不是忽略?则行数加一   <br />   }   <br />     <br />   var   trinnerHTML=new   Array(tableRows);     <br />   var   tdinnerHTML=new   Array(tableRows);   <br />   var   tdNumber=new   Array(tableRows)   <br />   var   i0=0   <br />   var   i1=0   <br />   for   (i=0;i<trObject.length;i++)   <br />   {   <br />   if   (trObject[i].id!='ignore')   <br />   {   <br />   trinnerHTML[i0]=trObject[i].innerHTML;//把行攑֜数组?nbsp;  <br />   tdinnerHTML[i0]=trObject[i].children[colNum].innerHTML;//把要排序的行中td的内Ҏ数组?nbsp;  <br />   tdNumber[i0]=i;//行号   <br />   i0++;//加一,下个循环?nbsp;  <br />   }   <br />   }   <br />   sourceHTML=clearStart.children[0].outerHTML;//取得表格中所有tr的html代码   <br />     <br />   //Ҏ有td中的字符串进行排?   不冒泡排???   <br />   for   (bi=0;bi<tableRows;bi++)   <br />   {   <br />   for   (i=0;i<tableRows;i++)   <br />   {   <br />   if(tdinnerHTML[i]>tdinnerHTML[i+1])   <br />   {   <br />   t_s=tdNumber[i+1];   <br />   t_b=tdNumber[i];   <br />   tdNumber[i+1]=t_b;   <br />   tdNumber[i]=t_s;   <br />   temp_small=tdinnerHTML[i+1];   <br />   temp_big=tdinnerHTML[i];   <br />   tdinnerHTML[i+1]=temp_big;   <br />   tdinnerHTML[i]=temp_small;   <br />   }   <br />   }   <br />   }   <br />     <br />     <br />     <br />   var   showshow='';   <br />   var   numshow='';   <br />   for   (i=0;i<tableRows;i++)   <br />   {   <br />   showshow=showshow+tdinnerHTML[i]+' ';//把排序好的td的内容存在showshow字串?nbsp;  <br />   numshow=numshow+tdNumber[i]+'|';             //把排序好的相应的行号也存在numshow?nbsp;  <br />   }   <br />     <br />   sourceHTML_head=sourceHTML.split("<TBODY>");//?lt;TBODY>截断,我试?前头串ؓI?nbsp;  <br />     <br />   numshow=numshow.split("|");   <br />   var   trRebuildHTML='';   <br />   if   (event.srcElement.className=='listHeadClicked')   <br />   {//已点ȝ?   则逆排   <br />   for   (i=0;i<tableRows;i++)   <br />   {   <br />   trRebuildHTML=trRebuildHTML+trObject[numshow[tableRows-1-i]].outerHTML;//取出排序好的tr的内容连接v?nbsp;  <br />     <br />   }   <br />   event.srcElement.className='listHeadClicked0';   <br />   }   <br />   else   <br />   {//默认排,新点击顺?nbsp;  <br />   for   (i=0;i<tableRows;i++)   <br />   {   <br />   trRebuildHTML=trRebuildHTML+trObject[numshow[i]].outerHTML;   <br />   }   <br />   event.srcElement.className='listHeadClicked';   <br />   }   <br />   //取得排序后的tr集合l果字符?nbsp;  <br />   var   DataRebuildTable='';   <br />   //把旧的表格头和新的tr排序好的元素q接h,   (修改了一?   <br />   DataRebuildTable   =   "<table   border=1 width=100%  cellpadding=1 cellspacing=1 id='clearStart'><TBODY>" <br />       +   trObject[0].outerHTML   +   trRebuildHTML   +   "</TBODY>"   +      "</table>";   <br />   clearStart.outerHTML=DataRebuildTable;//表格用新串重新写一?nbsp;  <br />     <br />   }   </p> <p></script></p> <p>  </head><br /> <table border=1 id="clearStart"><br />  <tr bgcolor=cccccc id='ignore'><br />   <td onclick="JM_PowerList(0)">列一<br />   </td><br />   <td onclick="JM_PowerList(1)"><br />    列二<br />   </td><br />   <td onclick="JM_PowerList(2)"><br />    列二<br />   </td><br />  </tr><br />   <tr><br />   <td><br />    ?br />   </td><br />   <td><br />    公务?br />   </td><br />   <td><br />    22<br />   </td><br />  </tr><br />  <tr><br />   <td><br />    张三<br />   </td><br />   <td><br />    研究?br />   </td><br />   <td><br />    65<br />   </td><br />  </tr><br />  <tr><br />   <td><br />    李?br />   </td><br />   <td><br />    U学?br />   </td><br />   <td><br />    24<br />   </td><br />  </tr><br />  <tr><br />   <td><br />   王武<br />   </td><br />   <td><br />    C会学家<br />   </td><br />   <td><br />    38<br />   </td><br />  </tr><br /> </table><br /> </body></html></p> <p> </p> <img src ="http://www.aygfsteel.com/kingace/aggbug/220988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kingace/" target="_blank">chenkai</a> 2008-08-09 11:40 <a href="http://www.aygfsteel.com/kingace/archive/2008/08/09/220988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java ~程技术中汉字问题的分析及解决http://www.aygfsteel.com/kingace/archive/2008/07/30/218785.htmlchenkaichenkaiWed, 30 Jul 2008 09:16:00 GMThttp://www.aygfsteel.com/kingace/archive/2008/07/30/218785.htmlhttp://www.aygfsteel.com/kingace/comments/218785.htmlhttp://www.aygfsteel.com/kingace/archive/2008/07/30/218785.html#Feedback0http://www.aygfsteel.com/kingace/comments/commentRss/218785.htmlhttp://www.aygfsteel.com/kingace/services/trackbacks/218785.html在基?Java 语言的编E中Q我们经常碰到汉字的处理及显C的问题。一大堆看不懂的q肯定不是我们愿意看到的显C效果,怎样才能够让那些汉字正确昄呢?Java语言默认的编码方式是UNICODEQ而我们中国h通常使用的文件和数据库都是基于GB2312或者BIG5{方式编码的Q怎样才能够恰当地选择汉字~码方式q正地处理汉字的编码呢Q本文将从汉字编码的常识入手Q结合Java~程实例Q分析以上两个问题ƈ提出解决它们的方案?

现在 Java ~程语言已经q泛应用于互联网世界Q早?Sun 公司开?Java 语言的时候,已l考虑到对非英文字W的支持了。Sun 公司公布?Java q行环境QJREQ本w就分英文版和国际版Q但只有国际版才支持非英文字W。不q在 Java ~程语言的应用中Q对中文字符的支持ƈ非如?Java Soft 的标准规范中所宣称的那样完,因ؓ中文字符集不只一个,而且不同的操作系l对中文字符的支持也不尽相同Q所以会有许多和汉字~码处理有关的问题在我们q行应用开发中困扰着我们。有很多关于q些问题的解{,但都比较琐碎Qƈ不能够满_家迫切解决问题的愿望Q关?Java 中文问题的系l研Iƈ不多Q本文从汉字~码常识出发Q分?Java 中文问题Q希望对大家解决q个问题有所帮助?

汉字~码的常?

我们知道Q英文字W一般是以一个字节来表示的,最常用的编码方法是 ASCII 。但一个字节最多只能区?56个字W,而汉字成千上万,所以现在都以双字节来表C汉字,Z能够与英文字W分开Q每个字节的最高位一定ؓ1Q这样双字节最多可以表C?4K格字W。我们经常碰到的~码方式?GB2312、BIG5、UNICODE {。关于具体编码方式的详细资料Q有兴趣的读者可以查阅相兌料。我肤浅谈一下和我们关系密切?GB2312 ?UNICODE。GB2312 码,中华人民共和国国家标准汉字信息交换用~码Q是一个由中华人民共和国国家标准d发布的关于简化汉字的~码Q通行于中国大陆地区及新加坡,U国标码。两个字节中Q第一个字节(高字节)的gؓ区号值加32Q?0HQ,W二个字节(低字节)的gؓ位号值加32Q?0HQ,用这两个值来表示一个汉字的~码。UNICODE 码是微Y提出的解军_国字W问题的多字节等长编码,它对英文字符采取前面?#8220;0”字节的策略实现等长兼宏V如 “A” ?ASCII 码ؓ0x41QUNICODE ׃ؓ0x00Q?x41。利用特D的工具各种~码之间可以互相转换?

Java 中文问题的初步认?

我们Z Java ~程语言q行应用开发时Q不可避免地要处理中文。Java ~程语言默认的编码方式是 UNICODEQ而我们通常使用的数据库及文仉是基?GB2312 ~码的,我们l常到q样的情况:览Z JSP 技术的|站看到的是qQ文件打开后看到的也是qQ被 Java 修改q的数据库的内容在别的场合应用时无法l箋正确地提供信息?

String sEnglish = “apple”;
String sChinese = “Ҏ”;
String s = “Ҏ apple ”;

sEnglish 的长度是5QsChinese的长度是4Q?s 默认的长度是14。对?sEnglish来说Q?Java 中的各个c都支持得非常好Q肯定能够正显C。但对于 sChinese ?s 来说Q虽?Java Soft 声明 Java 的基本类已经考虑到对多国字符的支持(默认 UNICODE ~码Q,但是如果操作pȝ的默认编码不?UNICODE Q而是国标码等。从 Java 源代码到得到正确的结果,要经q?“Java 源代?> Java 字节?> ;虚拟?>操作pȝ->昄讑֤”的过E。在上述q程中的每一步骤Q我们都必须正确地处理汉字的~码Q才能够使最l的昄l果正确?

“ Java 源代?> Java 字节?#8221;Q标准的 Java ~译?javac 使用的字W集是系l默认的字符集,比如在中?Windows 操作pȝ上就?GBK ,而在 Linux 操作pȝ上就是ISO-8859-1Q所以大家会发现?Linux 操作pȝ上编译的cM源文件中的中文字W都Z问题Q解决的办法是在编译的时候添?encoding 参数Q这h能够与^台无兟뀂用法是

javac -encoding GBK?

“ Java 字节?>虚拟?>操作pȝ”Q?Java q行环境 QJREQ分英文版和国际版,但只有国际版才支持非英文字符?Java 开发工具包 QJDKQ?肯定支持多国字符Q但q所有的计算机用户都安装?JDK 。很多操作系l及应用软gZ能够更好的支?Java Q都内嵌?JRE 的国际版本,己支持多国字W提供了方便?

“操作pȝ->昄讑֤”Q对于汉字来_操作pȝ必须支持q能够显C它。英文操作系l如果不搭配Ҏ的应用Y件的话,是肯定不能够昄中文的?

q有一个问题,是?Java ~程q程中,对中文字W进行正的~码转换。例如,向网输Z文字W串的时候,不论你是?

out.println(string);q是?

<%=string%>Q都必须?UNICODE ?GBK 的{换,或者手动,或者自动。在 JSP 1.0中,可以定义输出字符集,从而实现内码的自动转换。用法是

<%@page contentType=”text/html;charset=gb2312” %>

但是在一?JSP 版本中ƈ没有提供对输出字W集的支持,Q例?JSP 0.92Q,q就需要手动编码输ZQ方法非常多。最常用的方法是

String s1 = request.getParameter(“keyword”);

String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);

getBytes Ҏ用于中文字W以“ISO-8859-1”~码方式转化成字节数l,?#8220;GBK” 是目标编码方式。我们从以ISO-8859-1方式~码的数据库中读Z文字W串 s1 Q经q上q{换过E,在支?GBK 字符集的操作pȝ和应用Y件中p够正显CZ文字W串 s2 ?


Java 中文问题的表层分析及处理
背景
开发环?JDK1.15 Vcafe2.0 JPadPro
服务器端 NT IIS Sybase System JconnectQJDBCQ?
客户?IE5.0 Pwin98 ?span >

.CLASS 文g存放在服务器端,由客L的浏览器q行 APPLET Q?APPLET 只v调入 FRAME cȝȝ序的作用。界面包?Textfield QTextAreaQListQChoice {?

I.?JDBC 执行 SELECT 语句从服务器端读取数据(中文Q后Q将数据?APPEND Ҏ加到 TextAreaQTAQ?Q不能正显C。但加到 List 中时Q大部分汉字却可正确昄?

数据按“ISO-8859-1” ~码方式转化为字节数l,再按pȝ~省~码方式 QDefault Character EncodingQ?转化?STRING Q即可在 TA ?List 中正显C?

E序D如下:

dbstr2 = results.getString(1);
//After reading the result from DB serverQconverting it to string.
dbbyte1 = dbstr2.getBytes(“iso-8859-1”);
dbstr1 = new String(dbbyte1);

在{换字W串时不采用pȝ默认~码方式Q而直接采?#8220; GBK” 或?“GB2312” ,?A ?B 两种情况下,从数据库取数据都没有问题?

II.处理方式?#8220;取中?#8221;盔R,先将 SQL 语句按系l缺省编码方式{化ؓ字节数组Q再?#8220;ISO-8859-1”~码方式转化?STRING Q最后送去执行Q则中文信息可正写入数据库?

E序D如下:

sqlstmt = tf_input.getText();
//Before sending statement to DB serverQconverting it to sql statement.
dbbyte1 = sqlstmt.getBytes();
sqlstmt = newString(dbbyte1,”iso-8859-1”);
_stmt = _con.createStatement();
_stmt.executeUpdate(sqlstmt);
……

问题Q如果客h上存?CLASSPATH 指向 JDK ?CLASSES.ZIP ӞUCؓ A 情况Q,上述E序代码可正执行。但是如果客h只有览器,而没?JDK ?CLASSPATH ӞUCؓ B 情况Q,则汉字无法正{换?

我们的分析:

1.l过试Q在 A 情况下,E序q行时系l的~省~码方式?GBK 或?GB2312 。在 B 情况下,E序启动时浏览器?JAVA 控制C出现如下错误信息Q?

Can't find resource for sun.awt.windows.awtLocalization_zh_CN

然后pȝ的缺省编码方式ؓ“8859-1”?

2.如果在{换字W串时不采用pȝ~省~码方式Q而是直接采用 “GBK” ?#8220;GB2312”Q则?A 情况下程序仍然可正常q行Q在 B 情况下,pȝ出现错误Q?

UnsupportedEncodingException?

3. 在客h上,?JDK ?CLASSES.ZIP 解压后,攑֜另一个目录中Q?CLASSPATH 只包含该目录。然后一辚w步删除该目录中?.CLASS 文gQ另一边运行测试程序,最后发现在一千多?CLASS 文g中,只有一个是必不可少的,该文件是Q?

sun.io.CharToByteDoubleByte.class?

该文g拷到服务器端和其它的cL在一Pq在E序的开?IMPORT 它,?B 情况下程序仍然无法正常运行?

4.?A 情况下,如果?CLASSPTH 中去?sun.io.CharToByteDoubleByte.class Q则E序q行时测得默认编码方式ؓ“8859-1”Q否则ؓ “GBK” ?“GB2312” ?

如果 JDK 的版本ؓ1.2以上的话Q在 B 情况下遇到的问题得到了很好的解决Q测试的步骤同上Q有兴趣的读者可以尝试一下?

Java 中文问题的根源分析及解决

在简体中?MS Windows 98 + JDK 1.3 下,可以?System.getProperties() 得到 Java q行环境的一些基本属性,c?PoorChinese 可以帮助我们得到q些属性?

c?PoorChinese 的源代码Q?

public class PoorChinese {
}

执行 java PoorChinese 后,我们会得?

pȝ变量 file.encoding 的gؓ GBK Quser.language 的gؓ zh Q?user.region 的gؓ CN Q这些系l变量的值决定了pȝ默认的编码方式是 GBK ?

在上q系l中Q下面的代码?GB2312 文g转换?Big5 文gQ它们能够帮助我们理?Java 中汉字编码的转化:


import java.io.*;
import java.util.*;

public class gb2big5 {

static int iCharNum=0;

public static void main(String[] args) {
System.out.println("Input GB2312 file, output Big5 file.");
if (args.length!=2) {
System.err.println("Usage: jview gb2big5 gbfile big5file");
System.exit(1);
String inputString = readInput(args[0]);
writeOutput(inputString,args[1]);
System.out.println("Number of Characters in file: "+iCharNum+".");
}

static void writeOutput(String str, String strOutFile) {
try {
FileOutputStream fos = new FileOutputStream(strOutFile);
Writer out = new OutputStreamWriter(fos, "Big5");
out.write(str);
out.close();
}
catch (IOException e) {
e.printStackTrace();
e.printStackTrace();
}
}

static String readInput(String strInFile) {
StringBuffer buffer = new StringBuffer();
try {
FileInputStream fis = new FileInputStream(strInFile);
InputStreamReader isr = new InputStreamReader(fis, "GB2312");
Reader in = new BufferedReader(isr);
int ch;
while ((ch = in.read()) > -1) {
iCharNum += 1;
buffer.append((char)ch);
}
in.close();
return buffer.toString();
}
catch (IOException e) {
e.printStackTrace();
return null;
}
}
}

~码转化的过E如下:

GB2312------------------>Unicode------------->Big5

执行 java gb2big5 gb.txt big5.txt Q如?gb.txt 的内Ҏ“今天星期?#8221;Q则得到的文?big5.txt 中的字符能够正确昄Q而如?gb.txt 的内Ҏ“情h节快?#8221;Q则得到的文?big5.txt 中对应于“?#8221;?#8220;?#8221;的字W都是符?#8220;Q?#8221;Q?x3FQ,可见 sun.io.ByteToCharGB2312 ?sun.io.CharToByteBig5 q两个基本类q没有编好?

正如上例一P Java 的基本类也可能存在问题。由于国际化的工作ƈ不是在国内完成的Q所以在q些基本cd布之前,没有l过严格的测试,所以对中文字符的支持ƈ不像 Java Soft 所声称的那样完。前不久Q我的一位技术上的朋友发信给我说Q他l于扑ֈ?Java Servlet 中文问题的根源。两周以来,他一直ؓ Java Servlet 的中文问题所困扰Q因为每面对一个含有中文字W的字符串都必须q行强制转换才能够得到正的l果Q这好象是大家公认的唯一的解军_法)。后来,他确实不惛_此l安分下MQ因L事情实不应该是高E序员所要做的工作,他就扑և Servlet 解码的源代码q行分析Q因Z怀疑问题就出在解码q部分。经q四个小时的奋斗Q他l于扑ֈ了问题的Ҏ所在。原来他的怀疑是正确的, Servlet 的解码部分完全没有考虑双字节,直接?%XX 当作一个字W。(原来 Java Soft 也会犯这qZU的错误Q)

如果你对q个问题有兴或者遇C同样的烦恼的话,你可以按照他的步?对Servlet.jar q行修改Q?

扑ֈ源代?HttpUtils 中的 static private String parseName Q在q回前将 sbQStringBufferQ?复制?byte bs[] Q然?return new String(bs,”GB2312”)。作上述修改后就需要自p码了Q?

HashTable form=HttpUtils .parseQueryString(request.getQueryString())或?

form=HttpUtils.parsePostData(……)

千万别忘了编译后攑ֈ Servlet.jar 里面?

关于 Java 中文问题的ȝ

Java ~程语言成长于网l世界,q就要求 Java 对多国字W有很好的支持?Java ~程语言适应了计的|络化的需求,为它能够在网l世界迅速成长奠定了坚实的基?Java 的缔造?QJava SoftQ?已经考虑?Java ~程语言对多国字W的支持Q只是现在的解决Ҏ有很多缺陷在里面Q需要我们付怸些补偿性的措施。而世界标准化l织也在努力把hcL有的文字l一在一U编码之中,其中一U方案是 ISO10646 Q它用四个字节来表示一个字W。当Ӟ在这U方案未被采用之前,q是希望 Java Soft 能够严格地测试它的品,为用户带来更多的方便?/span>

chenkai 2008-07-30 17:16 发表评论
]]>
|页中Q动图片的实现http://www.aygfsteel.com/kingace/archive/2008/07/29/218492.htmlchenkaichenkaiTue, 29 Jul 2008 09:20:00 GMThttp://www.aygfsteel.com/kingace/archive/2008/07/29/218492.htmlhttp://www.aygfsteel.com/kingace/comments/218492.htmlhttp://www.aygfsteel.com/kingace/archive/2008/07/29/218492.html#Feedback0http://www.aygfsteel.com/kingace/comments/commentRss/218492.htmlhttp://www.aygfsteel.com/kingace/services/trackbacks/218492.html<div id="img" style="position:absolute;">
<a ; target="_blank">
<img src="http://www.freedown.net/logo.gif"; border="0"></a>
</div>

<SCRIPT LANGUAGE="JavaScript">
<!--
var xPos = 20;
var yPos = document.body.clientHeight;
var step = 1;
var delay = 30;
var height = 0;
var Hoffset = 0;
var Woffset = 0;
var yon = 0;
var xon = 0;
var pause = true;
var interval;
img.style.top = yPos;
function changePos() {
width = document.body.clientWidth;
height = document.body.clientHeight;
Hoffset = img.offsetHeight;
Woffset = img.offsetWidth;
img.style.left = xPos + document.body.scrollLeft;
img.style.top = yPos + document.body.scrollTop;
if (yon) {
yPos = yPos + step;
}
else {
yPos = yPos - step;
}
if (yPos < 0) {
yon = 1;
yPos = 0;
}
if (yPos >= (height - Hoffset)) {
yon = 0;
yPos = (height - Hoffset);
}
if (xon) {
xPos = xPos + step;
}
else {
xPos = xPos - step;
}
if (xPos < 0) {
xon = 1;
xPos = 0;
}
if (xPos >= (width - Woffset)) {
xon = 0;
xPos = (width - Woffset);
}
}
function www_helpor_net() {
img.visibility = "visible";
interval = setInterval('changePos()', delay);
}
www_helpor_net();
//For more,visit:www.helpor.net
-->
</script>



chenkai 2008-07-29 17:20 发表评论
]]>
jsp中控件的隐藏http://www.aygfsteel.com/kingace/archive/2008/07/29/218490.htmlchenkaichenkaiTue, 29 Jul 2008 09:17:00 GMThttp://www.aygfsteel.com/kingace/archive/2008/07/29/218490.htmlhttp://www.aygfsteel.com/kingace/comments/218490.htmlhttp://www.aygfsteel.com/kingace/archive/2008/07/29/218490.html#Feedback0http://www.aygfsteel.com/kingace/comments/commentRss/218490.htmlhttp://www.aygfsteel.com/kingace/services/trackbacks/218490.html在html中如何一个button或text控g不可?

<INPUT   type="button"   value="Button"   id=button1   name=button1   disabled>
<INPUT   type="text"   id=text1   name=text1   readonly>

<INPUT   type="hidden"   value="Button"   id=button1   name=button1     >  
     
<INPUT   type="text"   id=text1   name=text1   style="visibility:hidden">  
<INPUT   type="button"   value="Button"   id=button1   name=button1   style="visibility:hidden">

可以在jsp中做如下控制Q?br /> <INPUT TYPE="button" NAME="xzdq" value="<<" onClick="selectDept()" >
<script language="javascript">
 if('<%=userId%>'!= null)document.all.xzdq.style.visibility="hidden";
</script>

或者:
<INPUT TYPE="button" NAME="xzdq" value="<<" onClick="selectDept()" >
<%
if(userId != null)
{
%>
<script language="javascript">
 document.all.xzdq.style.visibility="hidden";
</script>
<%
}
%>

或者:
<INPUT TYPE="button" NAME="xzdq" value="<<" onClick="selectDept()" >
<%
if(userId != null)
 out.println("<script language=\"javascript\"> document.all.xzdq.style.visibility=\"hidden\";</script>");
%>



chenkai 2008-07-29 17:17 发表评论
]]>
Tomcat详解http://www.aygfsteel.com/kingace/archive/2008/07/24/217294.htmlchenkaichenkaiThu, 24 Jul 2008 13:59:00 GMThttp://www.aygfsteel.com/kingace/archive/2008/07/24/217294.htmlhttp://www.aygfsteel.com/kingace/comments/217294.htmlhttp://www.aygfsteel.com/kingace/archive/2008/07/24/217294.html#Feedback1http://www.aygfsteel.com/kingace/comments/commentRss/217294.htmlhttp://www.aygfsteel.com/kingace/services/trackbacks/217294.html安装Tomcat之前要先安装JDKQ可从http://java.sun.com上下载最新版本的JDK。Tomcat可从Apache Jakarta Project站点Qhttp://jakarta.apache.org/site/binindex.cgiQ上下蝲Q本书用的Tomcat版本?.5.7Q它需要安装J2SE 5.0QJDK 1.5Q以上的版本才能q行。对于Windows操作pȝQTomcat 5.5.7提供了两U安装文Ӟ一U是jakarta-tomcat-5.5.7.exeQ一U是jakarta-tomcat-5.5.7.zipQ如果读者用的是LinuxpȝQ请下蝲jakarta-tomcat-5.5.7.tar.gzQ。jakarta-tomcat-5.5.7.exe是可执行的安装程序,读者只需要双击这个文Ӟ可以开始安装Tomcat了。在安装q程中,安装E序会自动搜寻JDK和JRE的位|。安装完成后Q在Windowspȝ?#8220;开?#8221;->“E序”菜单下会dApache Tomcat 5.5菜单l。jakarta-tomcat-5.5.7.zip是一个压~包Q只需要将它解压到盘上就可以了。在q里Q我读者下载jakarta-tomcat-5.5.7.zip压羃包,通过解压~的方式安装TomcatQ因压羃的方式也适用于其他的操作pȝQ例如Linuxpȝ。下面我们主要介ljakarta-tomcat-5.5.7.zip的安装与Tomcatq行环境的设|?/font>

安装Tomcat

使用WinZip或WinRAR{解压羃工具jakarta-tomcat-5.5.7.zip解压到指定的驱动器和目录中。笔者是在D盘上直接解压Q生了目录jakarta-tomcat-5.5.7Q解压后的文件存放于D:\ jakarta-tomcat-5.5.7下?/font>

Tomcat安装后的目录层次l构如图5-2所C?/font>

?-2 Tomcat 5.5.7目录层次l构

各目录的用途如?-1所C?/font>

?-1 Tomcat的目录结构及其用?/font>

?/sup> ?/sup>

?/sup> ?/sup>

/bin

存放启动和关?/sup>Tomcat的脚本文?/sup>

/common/lib

存放Tomcat服务器及所?/sup>Web应用E序都可以访问的JAR文g

/conf

存放Tomcat服务器的各种配置文gQ其中包?/sup>server.xmlQ?/sup>Tomcat的主要配|文Ӟ?/sup>tomcat-users.xml?/sup>web.xml{配|文?/sup>

/logs

存放Tomcat的日志文?/sup>

/server/lib

存放Tomcat服务器运行所需的各U?/sup>JAR文g

/server/webapps

存放Tomcat的两?/sup>Web应用E序Q?/sup>admin应用E序?/sup>manager应用E序

/shared/lib

存放所?/sup>Web应用E序都可以访问的JAR文g

/temp

存放Tomcatq行时生的临时文g

/webapps

当发?/sup>Web应用E序Ӟ通常?/sup>Web应用E序的目录及文g攑ֈq个目录?/sup>

/work

Tomcat?/sup>JSP生成?/sup>Servlet源文件和字节码文件放到这个目录下

从表5-1中可以看刎ͼ/common/lib目录?server/lib?shared/lib目录下都可以存放JAR文gQ它们的区别在于Q?/font>

??server/lib目录下的JAR文g只能被Tomcat服务器访问;

??shared/lib目录下的JAR文g可以被所有的Web应用E序讉KQ但不能被Tomcat服务器访问;

??common/lib目录下的JAR文g可以被Tomcat服务器和所有的Web应用E序讉K?/font>

此外Q对于后面将要介l的Java Web应用E序Q在它的WEB-INF目录下,也可以徏立lib子目录,在lib子目录下可以存放各种JAR文gQ这些JAR文g只能被当前Web应用E序所讉K?/font>

q行Tomcat

在Tomcat安装目录下的bin子目录中Q有一些批处理文gQ以.bat作ؓ后缀名的文gQ,其中的startup.bat是启动Tomcat的脚本文Ӟ用鼠标双击这个文Ӟ会看到如图5-3所C的画面?/font>

?-3 q行Tomcat提示出错信息

W者以前碰到过很多学员Q在初次q行TomcatӞ看到如图5-3所C的信息׃知所措了。有的学员以前还配置qTomcatQ但是再ơ用的时候,׃忘记了上ơ是如何配置的,同样感觉无从下手?/font>

我们在学习Y件开发时Q一定要L查看错误提示信息Q进而根据错误提C决问题的良好习惯。笔者第一ơ配|TomcatӞ是Ҏ错误提示信息一步一步配|成功的。很多h一看见错误信息Q立卛_?#8220;定”按钮Q这样就错过了提CZ息。当看到错误信息Ӟ首先不要慌张和无所适从Q仔l看清楚错误提示Q不要着急单L钮?/font>

查看?-3中的错误提示信息Q可以看到这样一句话“The JAVA_HOME environment variable is not defined”Q从画面中可以看刎ͼ在执行到“Using JAVA_HOME”q句时出C错误Q由此,我们可以惛_Q出错的原因可能是因为没有设|JAVA_HOME环境变量。那么JAVA_HOME环境变量的值应该是什么呢Q很Ҏp惛_应该是JDK所在的目录Q在W者的机器上,JDK所在的目录是D:\Java\jdk1.5.0_01?/font>

在Windows 2000操作pȝ下设|环境变量的步骤如下?/font>

?在桌?#8220;我的电脑”上单d键,选择“属?#8221;Q出现如?-4所C的画面?/font>

?-4 “我的电脑”属?/font>

?单击“高”选项卡,选择“环境变量(E)…”Q如?-5和图5-6所C?/font>

 

?-5 “高”选项??-6 “环境变量”对话?/font>

??#8220;pȝ变量”下方单击“新徏”按钮。在“变量?#8221;中输?#8220;JAVA_HOME”Q在变量g输入JDK所在的目录“D:\Java\jdk1.5.0_01”Q然后单?#8220;定”按钮Q如?-7所C?/font>

?-7 新徏JAVA_HOME环境变量

?最后在“环境变量”对话框上单击“定”按钮Q结束JAVA_HOME环境变量的设|?/font>

我们再一ơ{到D:\ jakarta-tomcat-5.5.7\bin目录下,用鼠标双击startup.bat文gQ可以看到如?-8所C的启动信息?/font>

?-8 Tomcat启动信息

然后Q打开览器,在地址栏中输入http://localhost:8080/Qlocalhost表示本地机器Q?080是Tomcat默认监听的端口号Q,出现如?-9所C的Tomcat面?/font>

?-9 Tomcat的默认主?/font>

注意?-9中鼠标(手形状Q指向的链接——Tomcat DocumentationQ单dq入Tomcat的文档页面,有关Tomcat的帮助信息可以在文档面中找刎ͼ读者也可以直接讉KTomcat的文档,文档首页的位|是Tomcat安装目录下的webapps\tomcat-docs\index.html。如果要关闭Tomcat服务器,可以用鼠标双击D:\ jakarta-tomcat-5.5.7\bin目录下的shutdown.bat文g?/font>

如果你机器上的Tomcat启动p|Q有可能是因为TCP?080端口被其他应用程序所占用Q如果你知道是哪一个应用程序占用了8080端口Q那么先关闭此程序。如果你不知道或者不惛_闭占?080端口的应用程序,你可以修改Tomcat默认监听的端口号?/font>

前面介绍了,Tomcat安装目录下的conf子目录用于存放Tomcat服务器的各种配置文gQ其中的server.xml是Tomcat的主要配|文Ӟq是一个格式良好的XML文档Q在q个文g中可以修改Tomcat默认监听的端口号。用UltraEditQ你可以用记事本E序或其他的文本~辑工具Q打开server.xmlQ找C?080端口的地斏V读者也许要问了Q?#8220;q个配置文gQ我都不熟悉Q怎么知道在哪里修改端口号呢?”对于初次接触server.xml的读者,实不了解这个文件的l构Q但是我们应该有一U开攄思\Q既然Tomcat的监听端口号是在server.xml中配|,那么只要我们在这个文件中查找“8080”q些数字字符序列Q不p扑ֈ修改端口L地方了吗Q在UltraEdit中,同时按下键盘上的“Ctrl”?#8220;F”键,出现如图5-10所C的查找对话框?/font>

?-10 UltraEdit查找对话?/font>

然后?#8220;查找内容”中输?#8220;8080”Q单?#8220;查找下一?#8221;按钮。重复这个过E,直到扑ֈ如图5-11所C的在server.xml中配|端口号位置?/font>

?-11 server.xml中配|端口号的位|?/font>

扑ֈ后,如果我们不能定此处是修改端口L地方Q也没有关系Q可以先试着修改一下端口号Q然后启动TomcatQ如果启动成功,也就证明了我们修改的地方是正的。学习时Q我们应该养成这U探索ƈ不断实验的精。在q里Q我们可以修改端口号?000Q读者可以根据自己机器的配置选择一个端口号Q,然后保存。再ơ启动TomcatQ在Tomcat启动完毕后,打开览器,在地址栏中输入http://localhost:8000/Q读者根据自p|的端口号做相应的修改)Q就可以看到Tomcat的默认主了。关闭Tomcat服务器时Q执行bin目录下的shutdown.bat文g?/font>

 Tomcat启动分析

在本节中我们通过对Tomcat启动q程的分析,来帮助读者更好地理解和掌握Tomcat?/font>

用文本编辑工h开用于启动Tomcat的批处理文gstartup.batQ仔l阅读,可以发现Q在q个文g中,首先判断CATALINA_HOME环境变量是否为空Q如果ؓI,将当前目录设ؓCATALINA_HOME的|接着判断当前目录下是否存在bin\catalina.batQ如果文件不存在Q将当前目录的父目录设ؓCATALINA_HOME的|ҎW者机器上Tomcat安装目录的层ơ结构,最后CATALINA_HOME的D设ؓTomcat的安装目录。如果环境变量CATALINA_HOME已经存在Q则通过q个环境变量调用bin目录下的“catalina.bat start”命o。通过q段分析Q我们了解到两个信息Q一是Tomcat启动Ӟ需要查找CATALINA_HOMEq个环境变量Q如果在当前目录下调用startup.batQTomcat会自动设|CATALINA_HOMEQ二是执行startup.bat命oQ实际上执行的是“catalina.bat start”命o?/font>

如果我们不是在bin目录作ؓ当前目录时调用startup.batQ就会出现如?-12所C的错误信息Q在bin目录的父目录下调用除外)?/font>

?-12 在其他目录下启动Tomcat出错

要在其他目录下也能启动TomcatQ就需要设|CATALINA_HOME环境变量Q你可以CATALINA_HOMEd到Windows 2000pȝ的环境变量中Q其值就是Tomcat的安装目录,在笔者的机器上安装目录是D:\jakarta-tomcat-5.5.7Q添加环境变量的q程和前q添加JAVA_HOME环境变量的过E是一L。如果你不想在系l的环境变量中添加,也可以直接在startup.bat文g中进行设|。下面是在startup.bat文g中设|CATALINA_HOME后的文g片段Q?/font>

……

rem $Id: shutdown.bat,v 1.5 2004/05/27 15:05:01 yoavs Exp $

rem ---------------------------------------------------------------------------

set CATALINA_HOME=D:\jakarta-tomcat-5.5.7

rem Guess CATALINA_HOME if not defined

set CURRENT_DIR=%cd%

if not "%CATALINA_HOME%" == "" goto gotHome

set CATALINA_HOME=%CURRENT_DIR%

……

注意以粗体显C的q句话的作用是讄CATALINA_HOME环境变量。在它的下面可以判断CATALINA_HOME是否为空了。如果你找不准位|,q脆设|CATALINA_HOME环境变量的这句话攄到文件的W一行。JAVA_HOME环境变量也可以采用同L方式q行讄。不q,如果你要在其他目录下Q利用shutdown.bat来关闭Tomcat服务器,你也需要在shutdown.bat文g中设|CATALINA_HOME和JAVA_HOMEq两个环境变量,讄变量的位|和startup.bat文g一P都是在判断CATALINA_HOME是否为空之前。当ӞZ一x逸,避免重装Tomcat后还要进行设|(需要是同一版本的Tomcat安装在同一位置Q,我们最好还是将CATALINA_HOME和JAVA_HOMEq两个环境变量添加到Windows 2000pȝ的环境变量中?/font>

有的读者可能会对设|Tomcat安装目录的环境变量的名字是CATALINA_HOME而感到奇怪,按照以前讄的环境变量来看,JAVA_HOME表示JDK的安装目录,那么应该用TOMCAT_HOME来表CTomcat的安装目录,可ؓ什么要使用CATALINA_HOME呢?实际上,在Tomcat 4以前Q用的就是TOMCAT_HOME来表CTomcat的安装目录,在Tomcat 4以后Q采用了新的Servlet容器CatalinaQ所以环境变量的名字也改ZCATALINA_HOME?/font>

提示Q在Windowspȝ下环境变量的名字是与大小写无关的Q也是说JAVA_HOME和java_home是相同的?/font>

了解了startup.bat文g以后Q我们再来看看真正负责启动Tomcat服务器的catalina.bat文g。通过分析catalina.bat文gQ我们发现它q调用了一个文件setclasspath.bat。在setclasspath.bat文g中,它检查JAVA_HOME环境变量是否存在Qƈ通过讄的环境变量JAVA_HOMEQ找到java.exeQ用于启动Tomcat。在q个文g中,q设|了其他的一些变量,分别表示JDK中的一些工P有兴的读者可以自行分析一下这个文件。在执行完setclasspath.bat之后Qcatalina.bat剩下的部分就开始了Tomcat服务器的启动q程?/font>

直接执行catalina.batӞ需要带上命令行的参数。读者可以在命o提示W窗口下Q执行catalina.batQ就会打印出catalina.bat命o的各U参数及其含义,如图5-13所C?/font>

?-13 catalina.bat的各参数信息

其中常用的参数是start、run和stopQ参数start表示在一个单独的H口中启动Tomcat服务器,参数run表示在当前窗口中启动Tomcat服务器,参数stop表示关闭Tomcat服务器。我们执行startup.batQ实际上执行的就?#8220;catalina.bat start”命oQ执行shutdown.batQ实际上执行的是“catalina.bat stop”命o?#8220;catalina.bat run”命o有时候是非常有用的,特别是当我们需要查看Tomcat的出错信息时。我们在开发JSPE序Ӟl常会碰到自己机器上?080端口可别的应用E序占用Q或者在配置server.xml时出现错误,当通过startup.batQ相当于执行“catalina.bat start”Q启动Tomcat服务器时Q会D启动p|Q因为是在单独的H口中启动Tomcat服务器,所以一旦启动失败,命o提示W窗口就自动关闭了,E序q行中输出的出错信息也随之消失,而且没有M的日志信息,q就使得我们没有办法扑և错误原因?strong style="color: #0000ff">当出现错误时Q我们可以换?#8220;catalina.bat run”命o再次启动Q一旦启动失败,仅仅是Tomcat服务器异常终止,但是在当前的命o提示W窗口下仍然保留了启动时的出错信息,q样我们可以查扑֐动失败的原因?/strong>?br />

Tomcat的体pȝ?/strong>

Tomcat服务器是׃pd可配|的lg构成的,其中核心lg是Catalina Servlet容器Q它是所有其他Tomcatlg的顶层容器。Tomcat各组件之间的层次关系如图5-14所C?/font>

?-14 Tomcatlg之间的层ơ结?/font>

我们下面单介l一下各lg在Tomcat服务器中的作用?/font>

Q?QServer

Server表示整个的Catalina Servlet容器。Tomcat提供了Server接口的一个默认实玎ͼq通常不需要用戯己去实现。在Server容器中,可以包含一个或多个Servicelg?/font>

Q?QService

Service是存zdServer中的内部lgQ它一个或多个q接器(ConnectorQ组件绑定到一个单独的引擎QEngineQ上。在Server中,可以包含一个或多个Servicelg。Service也很由用户定制QTomcat提供了Service接口的默认实玎ͼ而这U实现既单又能满_用?

Q?QConnector

q接器(ConnectorQ处理与客户端的通信Q它负责接收客户hQ以及向客户q回响应l果。在Tomcat中,有多个连接器可以使用?/font>

Q?QEngine

在Tomcat中,每个Service只能包含一个Servlet引擎QEngineQ。引擎表CZ个特定的Service的请求处理流水线。作Z个Service可以有多个连接器Q引擎从q接器接收和处理所有的hQ将响应q回l适合的连接器Q通过q接器传输给用户。用户可以通过实现Engine接口提供自定义的引擎Q但通常不需要这么做?/font>

Q?QHost

Host表示一个虚拟主机,一个引擎可以包含多个Host。用户通常不需要创定义的HostQ因为Tomcatl出的Host接口的实玎ͼcStandardHostQ提供了重要的附加功能?/font>

Q?QContext

一个Contex表示了一个Web应用E序Q运行在特定的虚拟主Z。什么是Web应用E序呢?在Sun公司发布的Java Servlet规范中,对Web应用E序做出了如下的定义Q?#8220;一个Web应用E序是由一lServlet、HTML面、类Q以及其他的资源l成的运行在Web服务器上的完整的应用E序。它可以在多个供应商提供的实CServlet规范的Web容器中运?#8221;。一个Host可以包含多个ContextQ代表Web应用E序Q,每一个Context都有一个惟一的\径。用户通常不需要创定义的ContextQ因为Tomcatl出的Context接口的实玎ͼcStandardContextQ提供了重要的附加功能?/font>

下面我们通过?-15来帮助读者更好地理解Tomcat服务器中各组件的工作程?br />

?-15 Tomcat各组件的工作程

要了解这些组件的其他信息Q可以看下面的页面:

%CATALINA_HOME%\webapps\tomcat-docs\architecture\index.html

我们可以在conf目录下的server.xml文g中对q些lgq行配置Q读者打开server.xml文gQ就可以看到元素名和元素之间的嵌套关p,与Tomcat服务器的lg是一一对应的,server.xml文g的根元素是server。关于server.xml配置文g中的各元素及其属性的含义Q请参见附录C?/font>

在Tomcat中,提供了各lg的接口及其实现类Q如果你要替代Tomcat中的某个lgQ只需要根据该lg的接口或cȝ说明Q重写该lgQƈq行配置卛_。图5-16是Tomcat各组件的cd?/font>

在类囄接口名或cd下面是该接口或该cL在的包,q些接口和类都在%CATALINA_HOME%\ server\lib\catalina.jar文g中。对Tomcat服务器的实现感兴的读者,可以从http://tomcat.apache.org/上下载Tomcat的源代码?br />

提示Q由于Apache软g基金会ƈ不是一个商业性的l织Q所以文档更新的速度有时候跟不上版本更新的速度。在Tomcat 5.5.7中,可以发现文档与其源码实现有不一致的地方。在Tomcat 5.5.x中,L了org.apache.catalina.Connector接口及其相关的实现类Q而直接以org.apache.catalina.connector.ConnectorcL代替。我们在看Tomcat的文档时Q最好结合其API文档一LQ这h能保证了解的信息是完整的和准的?br />


Tomcat提供了两个管理程序:admin和manager。其中admin用于理和配|Tomcat服务器,manager用于理部v到Tomcat服务器中的Web应用E序?/font>

admin Web应用E序

admin Web应用E序需要单独下载,与Tomcat在同一个下载页面,链接名是Admin zipQ下载后的文件名是jakarta-tomcat-5.5.7-admin.zipQ解压羃后,覆盖Tomcat安装目录下的同名目录。admin Web应用E序位于%CATALINA_HOME%\server\webapps\admin目录下?/font>

要访问admin Web应用E序Q需要添加具有管理员权限的̎P~辑%CATALINA_HOME%\ conf\tomcat-users.xml文gQ在<tomcat-users>元素中添加如下内容:

<user username="admin" password="12345678" roles="admin"/>

其中用户名和密码可以Ҏ自己的喜好设|?/font>

启动Tomcat服务器,打开览器,在地址栏中输入Q?/font>

http://localhost:8080/admin/

出现如?-17所C的面?/font>

?-17 admin Web应用E序的登录界?/font>

也可以在Tomcat的默认主늚左上方单?#8220;Tomcat Administration”链接Q进入admind面。输入用户名adminQ密?2345678Q单?#8220;Login”按钮Q将看到如图5-18所C的面?/font>

?-18 admin Web应用E序的主面

在这个页面中Q可以进行Tomcat服务器的各项配置?/font>

5.6.2 manager Web应用E序

manager Web应用E序包含在Tomcat的安装包中。和adminE序一P需要添加访问manager Web应用E序的管理员账号Q编?CATALINA_HOME%\conf\tomcat-users.xml文gQ在<tomcat-users>元素中添加如下内容:

<user username="manager" password="12345678" roles="manager"/>

其中用户名和密码可以Ҏ自己的喜好设|?/font>

启动Tomcat服务器,打开览器,在地址栏中输入Q?/font>

http://localhost:8080/manager/html/

出现如?-19所C的面?/font>

?-19 manager Web应用E序的登录界?/font>

也可以在Tomcat的默认主늚左上方单?#8220;Tomcat Manager”链接Q访问managerE序。输入用户名managerQ密?2345678Q单?#8220;定”按钮Q将看到如图5-20所C的面?/font>

?-20 manager Web应用E序的主面

在这个页面中Q你可以部v、启动、停止、重新加载、卸载Web应用E序。注意在两个圆角矩Ş框中的\?#8220;/jsp-examples”?#8220;/servlets-examples”Q单击这两个路径Q将看到Tomcat提供的JSP和Servlet的例子程序,q些E序可以作ؓ学习JSP和Servlet的参考。不q在q两个\径下Q只列出了部分的例子E序Q完整的JSP和Servlet例子E序位于下面的两个目录中Q?/font>

%CATALINA_HOME%\webapps\jsp-examples

%CATALINA_HOME%\webapps\servlets-examples










chenkai 2008-07-24 21:59 发表评论
]]>
关键字throw和throws的区?/title><link>http://www.aygfsteel.com/kingace/archive/2008/07/24/217114.html</link><dc:creator>chenkai</dc:creator><author>chenkai</author><pubDate>Thu, 24 Jul 2008 02:44:00 GMT</pubDate><guid>http://www.aygfsteel.com/kingace/archive/2008/07/24/217114.html</guid><wfw:comment>http://www.aygfsteel.com/kingace/comments/217114.html</wfw:comment><comments>http://www.aygfsteel.com/kingace/archive/2008/07/24/217114.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kingace/comments/commentRss/217114.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kingace/services/trackbacks/217114.html</trackback:ping><description><![CDATA[  <p class="MsoNormal"><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">void  foo()  throws  FooException,Foo2Exception{  <br />           //other  code  <br />             <br />           throw  new  FooException();  <br />   } <o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">throw</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">语句用在Ҏ体内</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">,</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">表示抛出异常</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">,</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">由方法体内的语句处理。不能单独用,要么和try catch一起用,要么和trows一起用?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana"> <br /> throws</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">语句用在Ҏ声明后面</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">,</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">表示q个Ҏ<strong style="mso-bidi-font-weight: normal"><span style="color: blue">可能</span></strong><span style="color: #003300">?/span>抛出异常</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">, </span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">表示的是一U們֐、可能,但不一定实际发生?span style="color: #0000ff"><strong>p用这个方法的上一U方法中的语句来处理</strong></span></span><span style="font-size: 9pt; font-family: Verdana"> </span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。后面可以跟多个异常Q中间用逗号分割?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana"><o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-size: 9pt; font-family: Verdana"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">例如Q?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana"><o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">void doA() throws Exception1, Exception3 { <br />   try { <br />     …… <br />   } catch(Exception1 e) { <br />     throw e; <br />   } catch(Exception2 e) { <br />     System.out.println("</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">出错?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">"); <br />   } <br />   if (a != b) <br />     throw new Exception3("</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">自定义异?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">"); <br /> } <br /> <br /> </span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">代码?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">……</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">中可能生异?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">Exception1</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">Exception2</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">Exception3</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana"> <br /> </span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">如果产生</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">Exception1</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">异常Q则捕捉了之后抛出由该方法的调用者去做处理;</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana"> <br /> </span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">如果产生</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">Exception2</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">异常Q则该方法自己做了处?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">(</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">打印Z说出错了</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">)</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">Q所以该Ҏ׃会再向外抛出</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">Exception2</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">异常了,</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">void doA() throws Exception1,,Excpetion3</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">里面?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">Exception2</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">也就不用写了Q?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana"> <br /> </span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">Exception3</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">异常是该Ҏ的某D逻辑出错Q程序员自己作了处理在该D逻辑错误的情况下抛出异常</span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana">Exception3</span><span style="font-size: 9pt; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">Q则调用者也需要处理?/span><span lang="EN-US" style="font-size: 9pt; font-family: Verdana"><o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <img src ="http://www.aygfsteel.com/kingace/aggbug/217114.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kingace/" target="_blank">chenkai</a> 2008-07-24 10:44 <a href="http://www.aygfsteel.com/kingace/archive/2008/07/24/217114.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于JSP的错误页面处?/title><link>http://www.aygfsteel.com/kingace/archive/2008/07/24/217110.html</link><dc:creator>chenkai</dc:creator><author>chenkai</author><pubDate>Thu, 24 Jul 2008 02:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/kingace/archive/2008/07/24/217110.html</guid><wfw:comment>http://www.aygfsteel.com/kingace/comments/217110.html</wfw:comment><comments>http://www.aygfsteel.com/kingace/archive/2008/07/24/217110.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kingace/comments/commentRss/217110.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kingace/services/trackbacks/217110.html</trackback:ping><description><![CDATA[<span style="font-size: 18pt"><span style="font-size: 14pt">  </span></span> <p class="MsoNormal" style="background: white; word-break: break-all; line-height: 18pt; text-align: left; mso-pagination: widow-orphan; mso-outline-level: 3" align="left"><span style="font-size: 18pt"><span style="font-size: 14pt"><strong><span style="color: #333333; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">关于</span></strong><strong><span lang="EN-US" style="color: #333333; font-family: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">JSP</span></strong><strong><span style="color: #333333; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">中的错误面处理</span></strong><strong><span lang="EN-US" style="color: #333333; font-family: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"> <o:p></o:p></span></strong></span></span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-bidi-font-size: 16.0pt"><o:p><span style="font-size: 18pt"><span style="font-size: 14pt"> </span></span></o:p></span></p> <p class="MsoNormal"><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">通常</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">JSP </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">在执行时Q在两个阶段下会发生错误?/span></span></span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><br /> <span style="font-size: 18pt"><span style="font-size: 14pt">JSP </span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">|页</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"> → Servlet </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">c?/span></span></span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><br /> <span style="font-size: 18pt"><span style="font-size: 14pt">Servlet </span></span></span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><span style="font-size: 18pt"><span style="font-size: 14pt">cd理每一个请求时</span></span></span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><br /> <span style="font-size: 18pt"><span style="font-size: 14pt">    </span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">在第一阶段Ӟ产生的错误我们称?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">Translation Time Processing Errors</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">Q在W二阶段Ӟ产生的错误我们称?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">Client Request Time Processing Errors</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">。接下来我们针对q两个阶D生错误的原因和处理方法,q行介绍?/span></span></span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><br /> <br /> <span style="font-size: 18pt"><span style="font-size: 14pt">    1</span></span></span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><span style="font-size: 18pt"><span style="font-size: 14pt">?/span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"> Translation Time Processing Errors<br />     Translation Time Processing Errors </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">产生的主要原因:我们在撰?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">JSP</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">时的语法有错误,D</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">JSP Container </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">无法?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">JSP </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">|页~译?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">Servlet </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">cL?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">( .class)</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">Q例如:</span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">500 Internal Server<br /> Error</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">Q?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">500 </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">是指</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">HTTP </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">的错误状态码Q因此是</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">Server Error</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">?/span></span></span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><br /> <span style="mso-spacerun: yes"><span style="font-size: 18pt"><span style="font-size: 14pt">    </span></span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">通常产生q种错误Ӟ可能?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">JSP </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">的语法有错误Q或?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">JSP Container </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">在一开始安装、设定时Q有不适当的情形发生。解决的Ҏ是再一ơ检查程序是否有写错的,不然也有可能?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">JSPContainer </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">bug</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><o:p></o:p></span></span></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><o:p><span style="font-size: 18pt"><span style="font-size: 14pt"> </span></span></o:p></span></p> <p class="MsoNormal"><span style="font-size: 18pt"><span style="font-size: 14pt"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">    2</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">?/span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"> Client Request Time Processing Errors<br />     Client Request Time Processing Errors </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">错误的发生,往往不是语法错误Q而可能是逻辑上的错误Q简单地_你写一个计除法的E序Q当用户输入的分母ؓ零时Q程序会发生错误q抛出异?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">(Exception)</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">Q交由异常处?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">(Exception Handling)</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">机制做适当的处理?/span><strong style="mso-bidi-font-weight: normal"><span style="font-size: 10pt; color: blue; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">对于q种错误的处理,我们通常会交l?/span></strong><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="font-size: 10pt; color: blue; font-family: Arial; mso-font-kerning: 0pt">errorPage </span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-size: 10pt; color: blue; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">d?/span></strong><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">。下面D个例?/span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">:<br /> </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">使用</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">errorPage </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">的范例程?/span><span style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"> </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">Q?/span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">ErrorPage.jsp<br /> <br /> <strong><%@ page contentType="text/html;charset=GB2312" errorPage="Error.jsp" %></strong> //</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">讄</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">Error.jsp</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">ؓ本页的错误处理页</span></span></span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><br /> <span style="font-size: 18pt"><span style="font-size: 14pt"><html><br /> <head><br /> <title>CH4 - ErrorPage.jsp</title><br /> </head><br /> <body><br /> <h2>errorPage </span></span></span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><span style="font-size: 18pt"><span style="font-size: 14pt">的范例程?/span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"></h2><br /> <%!<br /> private double toDouble(String value)<br /> {<br /> return(Double.valueOf(value).doubleValue());<br /> }<br /> %><br /> <%<br /> double num1 = toDouble(request.getParameter("num1"));<br /> double num2 = toDouble(request.getParameter("num2"));<br /> %><br /> </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">您传入的两个数字为:</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><%= num1 %> </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">?/span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"> <%= num2 %><br><br /> </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">两数相加?/span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"> <%= (num1+num2) %><br /> </body><br /> </html><br />     ErrorPage.jsp </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">E序中,我们使用</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">page </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">指o中的</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">errorPage </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">属性,告诉</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">JSP Container</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">Q如果在E序中有错误产生Ӟ指的?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">servlet</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">q行时生的错误或显C用</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">throw</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">抛出的异常)Q会自动交给</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">Error.jsp </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">处理?/span></span></span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><br /> <br /> <span style="font-size: 18pt"><span style="font-size: 14pt">Error.jsp<br /> <%@ page contentType="text/html;charset=GB2312" <strong>isErrorPage="true" </strong>%>   //</span></span></span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><span style="font-size: 18pt"><span style="font-size: 14pt">讄该页为错误处理页</span></span></span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><br /> <span style="font-size: 18pt"><span style="font-size: 14pt"><%@ page import="java.io.PrintWriter" %><br /> <html><br /> <head><br /> <title>CH4 - Error.jsp</title><br /> </head><br /> <body><br /> <h2>errorPage </span></span></span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><span style="font-size: 18pt"><span style="font-size: 14pt">的范例程?/span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"></h2><br /> <p>ErrorPage.jsp </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">错误产生Q?/span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><I><%= exception %></I></p><br><br /> <pre><br /> </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">问题如下Q?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><% exception.printStackTrace(new PrintWriter(out)); %> //</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">输出错误的原?/span></span></span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><br /> <span style="font-size: 18pt"><span style="font-size: 14pt"></pre><br /> </body><br /> </html><br /> <br />     Error.jsp </span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">主要处理</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">ErrorPage.jsp </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">所产生的错误,所以在</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">ErrorPage.jsp </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">page </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">指o的属?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">errorPage</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">设ؓ</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">Error.jsp</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">Q因此,?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">ErrorPage.jsp</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">有错误发生时Q会自动转到</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">Error.jsp</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">来处理?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">Error.jsp </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">必须讑֮</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">page </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">指o的属?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">isErrorPage</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">true</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">Q因?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">Error.jsp</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">是专门用来处理错误的|页。设?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">page </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">指o的属?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">isErrorPage</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">true</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">后,?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">Error.jsp</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">里就可以使用</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">exception</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">异常cM?/span></span></span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><br /> <br /> <span style="font-size: 18pt"><span style="font-size: 14pt">    </span></span></span><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">׃在这个程序中q没有做一个窗体来输入两个数字Q所以必L动在</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">URL</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">后输?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">num1</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">num2</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">的|?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><a href="http://localhost:8080/ErrorPage.jsp?num1=100&num2=245" target="_blank"><span style="color: #01759c; mso-bidi-font-size: 12.0pt">http://localhost:8080/ErrorPage.jsp?num1=100&num2=245</span></a></span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">。当</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">ErrorPage.jsp </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">产生错误Ӟ如加Cؓ字符串型Q,׃交由</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">Error.jsp </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">d理,所以我们看到的l果Q不</span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><o:p></o:p></span></span></span></p> <p class="MsoNormal"><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">再是原始的服务器提示的ؕ七把p的错误提示Q将是执?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">Error.jsp </span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">后的l果?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><o:p></o:p></span></span></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><o:p><span style="font-size: 18pt"><span style="font-size: 14pt"> </span></span></o:p></span></p> <p class="MsoNormal"><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt">jsp</span><span style="font-size: 10pt; color: #333333; font-family: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">中显式地抛出异常Ӟpȝ也会转到错误处理面Q?/span><span lang="EN-US" style="font-size: 10pt; color: #333333; font-family: Arial; mso-font-kerning: 0pt"><o:p></o:p></span></span></span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-bidi-font-size: 16.0pt"><span style="font-size: 18pt"><span style="font-size: 14pt"><%@page language="java" contentType="text/html;charset=GBK" import= "java.util.* " errorPage="exception.jsp"<o:p></o:p></span></span></span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-bidi-font-size: 16.0pt"><span style="font-size: 18pt"><span style="font-size: 14pt">%><o:p></o:p></span></span></span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-bidi-font-size: 16.0pt"><span style="font-size: 18pt"><span style="font-size: 14pt"><jsp:useBean id="user" scope="session" class="S_userObj"/><o:p></o:p></span></span></span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-bidi-font-size: 16.0pt"><span style="font-size: 18pt"><span style="font-size: 14pt"><%<span style="mso-tab-count: 1">  </span><o:p></o:p></span></span></span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-bidi-font-size: 16.0pt"><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="mso-tab-count: 1">       </span>if(user= =null)<o:p></o:p></span></span></span></p> <p class="MsoNormal" style="text-indent: 21.75pt"><span style="font-size: 18pt"><span style="font-size: 14pt"><span lang="EN-US" style="mso-bidi-font-size: 16.0pt">throw new Exception("</span><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">您没有登陆或者登陆超?/span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt">,</span><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">请重新登?/span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt">");<span style="mso-spacerun: yes">  </span><o:p></o:p></span></span></span></p> <p class="MsoNormal" style="text-indent: 21.75pt"><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。。?/span><span style="mso-bidi-font-size: 16.0pt"> </span><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。。?/span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt"><o:p></o:p></span></span></span></p> <p class="MsoNormal" style="text-indent: 21.75pt"><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt">user</span><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为空时系l会自动转到错误处理面?/span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt"><o:p></o:p></span></span></span></p> <p class="MsoNormal" style="text-indent: 21.75pt"><span style="font-size: 18pt"><span style="font-size: 14pt; color: #0000ff"><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">MQ以下情?/span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt">jsp</span><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会{到错误处理页面:</span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt"><o:p></o:p></span></span></span></p> <p class="MsoNormal" style="text-indent: 21.75pt"><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="color: #0000ff"><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">前提Q?/span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt">jsp</span><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">成功的{换到?/span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt">servlet</span><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q{换过E中没有发生错误?/span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt"><o:p></o:p></span></span></span></span></p> <p class="MsoNormal" style="text-indent: 21.75pt"><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="color: #0000ff"><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt">servlet</span><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q行ӞE序中碰到异常?/span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt"><o:p></o:p></span></span></span></span></p> <p class="MsoNormal" style="text-indent: 21.75pt"><span style="font-size: 18pt"><span style="font-size: 14pt"><span style="color: #0000ff"><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt">servlet</span><span style="font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q行ӞE序控制转到了显式抛出的异常。例如:</span><span lang="EN-US" style="mso-bidi-font-size: 16.0pt">if(…) throw new exception();<o:p></o:p></span></span></span></span></p> <p class="MsoNormal" style="text-indent: 21.75pt"><span lang="EN-US" style="mso-bidi-font-size: 16.0pt"><o:p><span style="font-size: 18pt"><span style="font-size: 14pt"> </span></span></o:p></span></p> <img src ="http://www.aygfsteel.com/kingace/aggbug/217110.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kingace/" target="_blank">chenkai</a> 2008-07-24 10:21 <a href="http://www.aygfsteel.com/kingace/archive/2008/07/24/217110.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达?/title><link>http://www.aygfsteel.com/kingace/archive/2008/07/23/216906.html</link><dc:creator>chenkai</dc:creator><author>chenkai</author><pubDate>Wed, 23 Jul 2008 07:11:00 GMT</pubDate><guid>http://www.aygfsteel.com/kingace/archive/2008/07/23/216906.html</guid><wfw:comment>http://www.aygfsteel.com/kingace/comments/216906.html</wfw:comment><comments>http://www.aygfsteel.com/kingace/archive/2008/07/23/216906.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kingace/comments/commentRss/216906.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kingace/services/trackbacks/216906.html</trackback:ping><description><![CDATA[<div id="wmqeeuq" class="tit">正则表达式基知识</div> <div id="wmqeeuq" class="date">2007-11-16 17:32</div> <table style="table-layout: fixed"> <tbody> <tr> <td> <div id="wmqeeuq" class="cnt" id="blog_text"><span>一个正则表辑ּ是由普通字W(例如字符 a ?zQ以及特D字W(UCؓ元字W)l成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符丌Ӏ正则表辑ּ作ؓ一个模板,某个字W模式与所搜烦的字W串q行匚w。如Q?<br /> <div id="wmqeeuq" class="tablediv"> <table cellspacing="0" border="1"> <tbody> <tr valign="top"> <th width="30%">JScript</th> <th width="30%">VBScript</th> <th width="40%">匚w</th> </tr> <tr valign="top"> <td width="30%">/^\[ \t]*$/</td> <td width="30%">"^\[ \t]*$"</td> <td width="40%">匚w一个空白行?/td> </tr> <tr valign="top"> <td width="30%">/\d{2}-\d{5}/</td> <td width="30%">"\d{2}-\d{5}"</td> <td width="40%">验证一个ID L是否׃?位数字,一个连字符以及一?位数字组成?/td> </tr> <tr valign="top"> <td width="30%">/<(.*)>.*<\/\1>/</td> <td width="30%">"<(.*)>.*<\/\1>"</td> <td width="40%">匚w一?HTML 标记?/td> </tr> </tbody> </table> </div> <br /> 下表是元字符及其在正则表辑ּ上下文中的行为的一个完整列表:<br /> <table cellspacing="0" border="1"> <tbody> <tr valign="top"> <th width="16%">字符</th> <th width="84%">描述</th> </tr> <tr valign="top"> <td width="16%">\</td> <td width="84%">下一个字W标Cؓ一个特D字W、或一个原义字W、或一?向后引用、或一个八q制转义W。例如,'n' 匚w字符 "n"?\n' 匚w一个换行符。序?'\\' 匚w "\" ?"\(" 则匹?"("?/td> </tr> <tr valign="top"> <td width="16%">^</td> <td width="84%">匚w输入字符串的开始位|。如果设|了 <strong>RegExp</strong> 对象?<strong>Multiline</strong> 属性,^ 也匹?'\n' ?'\r' 之后的位|?/td> </tr> <tr valign="top"> <td width="16%">$</td> <td width="84%">匚w输入字符串的l束位置。如果设|了<strong>RegExp</strong> 对象?<strong>Multiline</strong> 属性,$ 也匹?'\n' ?'\r' 之前的位|?/td> </tr> <tr valign="top"> <td width="16%">*</td> <td width="84%">匚w前面的子表达式零ơ或多次。例如,zo* 能匹?"z" 以及 "zoo"? {h于{0,}?/td> </tr> <tr valign="top"> <td width="16%">+</td> <td width="84%">匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?"zo" 以及 "zoo"Q但不能匚w "z"? {h?{1,}?/td> </tr> <tr valign="top"> <td width="16%">?</td> <td width="84%">匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w "do" ?"does" 中的"do" ? {h?{0,1}?/td> </tr> <tr valign="top"> <td width="16%">{<em>n</em>}</td> <td width="84%"><em>n</em> 是一个非负整数。匹配确定的 <em>n</em> ơ。例如,'o{2}' 不能匚w "Bob" 中的 'o'Q但是能匚w "food" 中的两个 o?/td> </tr> <tr valign="top"> <td width="16%">{<em>n</em>,}</td> <td width="84%"><em>n</em> 是一个非负整数。至匹?em>n</em> ơ。例如,'o{2,}' 不能匚w "Bob" 中的 'o'Q但能匹?"foooood" 中的所?o?o{1,}' {h?'o+'?o{0,}' 则等价于 'o*'?/td> </tr> <tr valign="top"> <td width="16%">{<em>n</em>,<em>m</em>}</td> <td width="84%"><em>m</em> ?<em>n</em> 均ؓ非负整数Q其?em>n</em> <= <em>m</em>。最匹?<em>n</em> ơ且最多匹?<em>m</em> ơ。例如,"o{1,3}" 匹?"fooooood" 中的前三?o?o{0,1}' {h?'o?'。请注意在逗号和两个数之间不能有空根{?/td> </tr> <tr valign="top"> <td width="16%">?</td> <td width="84%">当该字符紧跟在Q何一个其他限制符 (*, +, ?, {<em>n</em>}, {<em>n</em>,}, {<em>n</em>,<em>m</em>}) 后面Ӟ匚w模式是非贪婪的。非贪婪模式可能少的匹配所搜烦的字W串Q而默认的贪婪模式则尽可能多的匚w所搜烦的字W串。例如,对于字符?"oooo"Q?o+?' 匹配单?"o"Q?'o+' 匹配所?'o'?/td> </tr> <tr valign="top"> <td width="16%">.</td> <td width="84%">匚w?"\n" 之外的Q何单个字W。要匚w包括 '\n' 在内的Q何字W,请用象 '[.\n]' 的模式?/td> </tr> <tr valign="top"> <td width="16%">(<em>pattern</em>)</td> <td width="84%">匚w <em>pattern</em> q获取这一匚w。所获取的匹配可以从产生?Matches 集合得到Q在VBScript 中?<strong>SubMatches</strong> 集合Q在JScript 中则使用 <strong>$0</strong>…<strong>$9</strong> 属性。要匚w圆括号字W,请?'\(' ?'\)'?/td> </tr> <tr valign="top"> <td width="16%">(?:<em>pattern</em>)</td> <td width="84%">匚w <em>pattern</em> 但不获取匚wl果Q也是说这是一个非获取匚wQ不q行存储供以后用。这在?"? 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 是一个比 'industry|industries' 更简略的表达式?/td> </tr> <tr valign="top"> <td width="16%">(?=<em>pattern</em>)</td> <td width="84%">正向预查Q在M匚w <em>pattern</em> 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹?"Windows 2000" 中的 "Windows" Q但不能匚w "Windows 3.1" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开始?/td> </tr> <tr valign="top"> <td width="16%">(?!<em>pattern</em>)</td> <td width="84%">负向预查Q在M不匹?<em>pattern</em> 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例?Windows (?!95|98|NT|2000)' 能匹?"Windows 3.1" 中的 "Windows"Q但不能匚w "Windows 2000" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开?/td> </tr> <tr valign="top"> <td width="16%"><em>x</em>|<em>y</em></td> <td width="84%">匚w <em>x</em> ?<em>y</em>。例如,'z|food' 能匹?"z" ?"food"?(z|f)ood' 则匹?"zood" ?"food"?/td> </tr> <tr valign="top"> <td width="16%">[<em>xyz</em>]</td> <td width="84%">字符集合。匹配所包含的Q意一个字W。例如, '[abc]' 可以匚w "plain" 中的 'a'?/td> </tr> <tr valign="top"> <td width="16%">[^<em>xyz</em>]</td> <td width="84%">负值字W集合。匹配未包含的Q意字W。例如, '[^abc]' 可以匚w "plain" 中的'p'?/td> </tr> <tr valign="top"> <td width="16%">[<em>a-z</em>]</td> <td width="84%">字符范围。匹配指定范围内的Q意字W。例如,'[a-z]' 可以匚w 'a' ?'z' 范围内的L写字母字符?/td> </tr> <tr valign="top"> <td width="16%">[^<em>a-z</em>]</td> <td width="84%">负值字W范围。匹配Q何不在指定范围内的Q意字W。例如,'[^a-z]' 可以匚wM不在 'a' ?'z' 范围内的L字符?/td> </tr> <tr valign="top"> <td width="16%">\b</td> <td width="84%">匚w一个单词边界,也就是指单词和空格间的位|。例如, 'er\b' 可以匚w"never" 中的 'er'Q但不能匚w "verb" 中的 'er'?/td> </tr> <tr valign="top"> <td width="16%">\B</td> <td width="84%">匚w非单词边界?er\B' 能匹?"verb" 中的 'er'Q但不能匚w "never" 中的 'er'?/td> </tr> <tr valign="top"> <td width="16%">\c<em>x</em></td> <td width="84%">匚w?<em>x</em> 指明的控制字W。例如, \cM 匚w一?Control-M 或回车符?em>x</em> 的值必Mؓ A-Z ?a-z 之一。否则,?c 视ؓ一个原义的 'c' 字符?/td> </tr> <tr valign="top"> <td width="16%">\d</td> <td width="84%">匚w一个数字字W。等价于 [0-9]?/td> </tr> <tr valign="top"> <td width="16%">\D</td> <td width="84%">匚w一个非数字字符。等价于 [^0-9]?/td> </tr> <tr valign="top"> <td width="16%">\f</td> <td width="84%">匚w一个换늬。等价于 \x0c ?\cL?/td> </tr> <tr valign="top"> <td width="16%">\n</td> <td width="84%">匚w一个换行符。等价于 \x0a ?\cJ?/td> </tr> <tr valign="top"> <td width="16%">\r</td> <td width="84%">匚w一个回车符。等价于 \x0d ?\cM?/td> </tr> <tr valign="top"> <td width="16%">\s</td> <td width="84%">匚wMI白字符Q包括空根{制表符、换늬{等。等价于 [ \f\n\r\t\v]?/td> </tr> <tr valign="top"> <td width="16%">\S</td> <td width="84%">匚wM非空白字W。等价于 [^ \f\n\r\t\v]?/td> </tr> <tr valign="top"> <td width="16%">\t</td> <td width="84%">匚w一个制表符。等价于 \x09 ?\cI?/td> </tr> <tr valign="top"> <td width="16%">\v</td> <td width="84%">匚w一个垂直制表符。等价于 \x0b ?\cK?/td> </tr> <tr valign="top"> <td width="16%">\w</td> <td width="84%">匚w包括下划U的M单词字符。等价于'[A-Za-z0-9_]'?/td> </tr> <tr valign="top"> <td width="16%">\W</td> <td width="84%">匚wM非单词字W。等价于 '[^A-Za-z0-9_]'?/td> </tr> <tr valign="top"> <td width="16%">\x<em>n</em></td> <td width="84%">匚w <em>n</em>Q其?<em>n</em> 为十六进制{义倹{十六进制{义值必Mؓ定的两个数字长。例如,'\x41' 匚w "A"?\x041' 则等价于 '\x04' & "1"。正则表辑ּ中可以?ASCII ~码?</td> </tr> <tr valign="top"> <td width="16%">\<em>num</em></td> <td width="84%">匚w <em>num</em>Q其?<em>num</em> 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匚w两个q箋的相同字W?/td> </tr> <tr valign="top"> <td width="16%">\<em>n</em></td> <td width="84%">标识一个八q制转义值或一个向后引用。如?\<em>n</em> 之前臛_ <em>n</em> 个获取的子表辑ּQ则 <em>n</em> 为向后引用。否则,如果 <em>n</em> 为八q制数字 (0-7)Q则 <em>n</em> Z个八q制转义倹{?/td> </tr> <tr valign="top"> <td width="16%">\<em>nm</em></td> <td width="84%">标识一个八q制转义值或一个向后引用。如?\<em>nm</em> 之前臛_?<em>nm</em> 个获得子表达式,?<em>nm</em> 为向后引用。如?\<em>nm</em> 之前臛_?<em>n</em> 个获取,?<em>n</em> Z个后跟文?<em>m</em> 的向后引用。如果前面的条g都不满Q若 <em>n</em> ?<em>m</em> 均ؓ八进制数?(0-7)Q则 \<em>nm</em> 匹配八q制转义?<em>nm</em>?/td> </tr> <tr valign="top"> <td width="16%">\<em>nml</em></td> <td width="84%">如果 <em>n</em> 为八q制数字 (0-3)Q且 <em>m</em> ?<em>l</em> 均ؓ八进制数?(0-7)Q则匚w八进制{义?<em>nml?/em></td> </tr> <tr valign="top"> <td width="16%">\u<em>n</em></td> <td width="84%">匚w <em>n</em>Q其?<em>n</em> 是一个用四个十六q制数字表示?Unicode 字符。例如, \u00A9 匚w版权W号 (©)?/td> </tr> </tbody> </table> <p><br /> 下面看几个例子:<br /> "^The"Q表C所有以"The"开始的字符Ԍ"There"Q?The cat"{)Q?br /> "of despair$"Q表C所以以"of despair"l尾的字W串Q?br /> "^abc$"Q表C开始和l尾都是"abc"的字W串——呵呵,只有"abc"自己了;<br /> "notice"Q表CZQ何包?notice"的字W串?br /> <br /> '*'Q?+'??'q三个符P表示一个或一序列字符重复出现的次数。它们分别表C?#8220;没有?br /> 更多”Q?#8220;一ơ或更多”q有“没有或一?#8221;。下面是几个例子Q?/p> <p>"ab*"Q表CZ个字W串有一个a后面跟着零个或若q个b。("a", "ab", "abbb",……Q;<br /> "ab+"Q表CZ个字W串有一个a后面跟着臛_一个b或者更多;<br /> "ab?"Q表CZ个字W串有一个a后面跟着零个或者一个bQ?br /> "a?b+$"Q表C在字符串的末尾有零个或一个a跟着一个或几个b?/p> <p>也可以用范_用大括号括vQ用以表C重复次数的范围?/p> <p>"ab{2}"Q表CZ个字W串有一个a跟着2个bQ?abb"Q;<br /> "ab{2,}"Q表CZ个字W串有一个a跟着臛_2个bQ?br /> "ab{3,5}"Q表CZ个字W串有一个a跟着3?个b?/p> <p>h意,你必L定范围的下限Q如Q?{0,2}"而不?{,2}"Q。还有,你可能注意到了,'*'Q?+'?br /> '?'相当?{0,}"Q?{1,}"?{0,1}"?br /> q有一?¦'Q表C?#8220;?#8221;操作Q?/p> <p>"hi¦hello"Q表CZ个字W串里有"hi"或?hello"Q?br /> "(b¦cd)ef"Q表C?bef"?cdef"Q?br /> "(a¦b)*c"Q表CZ?a""b"混合的字W串后面跟一?c"Q?/p> <p>'.'可以替代M字符Q?/p> <p>"a.[0-9]"Q表CZ个字W串有一?a"后面跟着一个Q意字W和一个数字;<br /> "^.{3}$"Q表C有L三个字符的字W串Q长度ؓ3个字W)Q?/p> <p>Ҏ可C某些字W允许在一个字W串中的某一特定位置出现Q?/p> <p>"[ab]"Q表CZ个字W串有一?a"?b"Q相当于"a¦b"Q;<br /> "[a-d]"Q表CZ个字W串包含写?a'?d'中的一个(相当?a¦b¦c¦d"或?[abcd]"Q;<br /> "^[a-zA-Z]"Q表CZ个以字母开头的字符Ԍ<br /> "[0-9]%"Q表CZ个百分号前有一位的数字Q?br /> ",[a-zA-Z0-9]$"Q表CZ个字W串以一个逗号后面跟着一个字母或数字l束?/p> <p>你也可以在方括号里用'^'表示不希望出现的字符Q?^'应在Ҏ号里的第一位。(如:"%[^a-zA-Z]%"?br /> CZ个百分号中不应该出现字母Q?/p> <p>Z逐字表达Q必d"^.$()¦*+?{\"q些字符前加上{UdW?\'?/p> <p>h意在Ҏ号中Q不需要{义字W?/p> </span></div> </td> </tr> </tbody> </table> <img src ="http://www.aygfsteel.com/kingace/aggbug/216906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kingace/" target="_blank">chenkai</a> 2008-07-23 15:11 <a href="http://www.aygfsteel.com/kingace/archive/2008/07/23/216906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ന</a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʲ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">ɽʡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">̳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ƥ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">ǿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">۷</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͳ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>