<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>宇托的狗窝 &#187; Java</title>
	<atom:link href="http://yutuo.net/category/program/java/feed" rel="self" type="application/rss+xml" />
	<link>http://yutuo.net</link>
	<description>匍匐地跪着，头仰得再高也无法显示你的高度；挺起胸脯站着，低下头，亦能显得伟岸！</description>
	<lastBuildDate>Sat, 04 Feb 2012 15:46:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Servlet的线程安全</title>
		<link>http://yutuo.net/archives/e180c988fce8ae2c.html</link>
		<comments>http://yutuo.net/archives/e180c988fce8ae2c.html#comments</comments>
		<pubDate>Sun, 22 Jan 2012 09:10:45 +0000</pubDate>
		<dc:creator>yutuo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Servlet]]></category>

		<guid isPermaLink="false">http://yutuo.net/?p=157</guid>
		<description><![CDATA[　　在一般情况下，Servlet容器只创建一个实例，如果有多个客户请求同时访问这个Servlet，会采用多线程来访问这一个Servlet。在这种情况下，就会有线程安全问题。 　　比如，定义一个Servlet的类变量user，然后在doPost或者doGet里处理的话，当线程转换时就会出现很怪的情况。如下代码： 123456789101112131415161718192021222324 import java.io.IOException;import java.io.PrintWriter;&#160;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;&#160;&#160;@WebServlet("/ServletSecurity")public&#160;class ServletSecurity extends HttpServlet {&#160;&#160;&#160; private&#160;static&#160;final&#160;long serialVersionUID =&#160;-1841665725196115690L;&#160;&#160;&#160;&#160; private String user;&#160;&#160;&#160;&#160; protected&#160;void doGet(HttpServletRequest request, HttpServletResponse response)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; throws ServletException, IOException {&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.user = request.getParameter("user");&#160;&#160;&#160;&#160;&#160;&#160;&#160; PrintWriter out = response.getWriter();&#160;&#160;&#160;&#160;&#160;&#160;&#160; out.println(this.user +&#160;", Welcome.");&#160;&#160;&#160; }} 　　在上面这段代码里，有些人认为没有把user变量设为静态变量就不会出现线程问题了。其实不是的，因为Servlet容器只建一个实例，在线程间切换时就会出问题。如A和B两个人同时登录时，A先执行，在this.user = request.getParameter("user");把user设为A；然后线程切换了，B把user设为B，执行完之后再执行A，就会输出B, Welcome。 　　解决上面问题的方法就是，不要在Servlet定义可写的类变量，当然可写的静态变量就更不能定义了。 参考资料：孙鑫《Java Web开发详解——XML XSLT Servlet JSP深入剖析实例应用》第11章 开发线程安全的Servlet]]></description>
			<content:encoded><![CDATA[<p>　　在一般情况下，Servlet容器只创建一个实例，如果有多个客户请求同时访问这个Servlet，会采用多线程来访问这一个Servlet。在这种情况下，就会有线程安全问题。</p>
<p>　　比如，定义一个Servlet的类变量user，然后在doPost或者doGet里处理的话，当线程转换时就会出现很怪的情况。如下代码：</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-right-width: 0px; border-collapse: collapse; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><b><span style="color: #0000ff">import</span></b><span> java</span><b><span style="color: #000080">.</span></b><span>io</span><b><span style="color: #000080">.</span></b><span>IOException</span><b><span style="color: #000080">;</span></b><br /><b><span style="color: #0000ff">import</span></b><span> java</span><b><span style="color: #000080">.</span></b><span>io</span><b><span style="color: #000080">.</span></b><span>PrintWriter</span><b><span style="color: #000080">;</span></b><br />&nbsp;<br /><b><span style="color: #0000ff">import</span></b><span> javax</span><b><span style="color: #000080">.</span></b><span>servlet</span><b><span style="color: #000080">.</span></b><span>ServletException</span><b><span style="color: #000080">;</span></b><br /><b><span style="color: #0000ff">import</span></b><span> javax</span><b><span style="color: #000080">.</span></b><span>servlet</span><b><span style="color: #000080">.</span></b><span>annotation</span><b><span style="color: #000080">.</span></b><span>WebServlet</span><b><span style="color: #000080">;</span></b><br /><b><span style="color: #0000ff">import</span></b><span> javax</span><b><span style="color: #000080">.</span></b><span>servlet</span><b><span style="color: #000080">.</span></b><span>http</span><b><span style="color: #000080">.</span></b><span>HttpServlet</span><b><span style="color: #000080">;</span></b><br /><b><span style="color: #0000ff">import</span></b><span> javax</span><b><span style="color: #000080">.</span></b><span>servlet</span><b><span style="color: #000080">.</span></b><span>http</span><b><span style="color: #000080">.</span></b><span>HttpServletRequest</span><b><span style="color: #000080">;</span></b><br /><b><span style="color: #0000ff">import</span></b><span> javax</span><b><span style="color: #000080">.</span></b><span>servlet</span><b><span style="color: #000080">.</span></b><span>http</span><b><span style="color: #000080">.</span></b><span>HttpServletResponse</span><b><span style="color: #000080">;</span></b><br />&nbsp;<br />&nbsp;<br /><span>@WebServlet</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"/ServletSecurity"</span><b><span style="color: #000080">)</span></b><br /><span style="color: #8000ff">public</span><span>&nbsp;</span><span style="color: #8000ff">class</span><span> ServletSecurity </span><b><span style="color: #0000ff">extends</span></b><span> HttpServlet </span><b><span style="color: #000080">{</span></b><br />&nbsp;&nbsp;&nbsp; <span style="color: #8000ff">private</span><span>&nbsp;</span><span style="color: #8000ff">static</span><span>&nbsp;</span><span style="color: #8000ff">final</span><span>&nbsp;</span><span style="color: #8000ff">long</span><span> serialVersionUID </span><b><span style="color: #000080">=</span></b><span>&nbsp;</span><b><span style="color: #000080">-</span></b><span style="color: #ff8000">1841665725196115690L</span><b><span style="color: #000080">;</span></b><br />&nbsp;<br />&nbsp;&nbsp;&nbsp; <span style="color: #8000ff">private</span><span> String user</span><b><span style="color: #000080">;</span></b><br />&nbsp;<br />&nbsp;&nbsp;&nbsp; <span style="color: #8000ff">protected</span><span>&nbsp;</span><span style="color: #8000ff">void</span><span> doGet</span><b><span style="color: #000080">(</span></b><span>HttpServletRequest request</span><b><span style="color: #000080">,</span></b><span> HttpServletResponse response</span><b><span style="color: #000080">)</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><span style="color: #0000ff">throws</span></b><span> ServletException</span><b><span style="color: #000080">,</span></b><span> IOException </span><b><span style="color: #000080">{</span></b><br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><span style="color: #0000ff">this</span></b><b><span style="color: #000080">.</span></b><span>user </span><b><span style="color: #000080">=</span></b><span> request</span><b><span style="color: #000080">.</span></b><span>getParameter</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"user"</span><b><span style="color: #000080">);</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>PrintWriter out </span><b><span style="color: #000080">=</span></b><span> response</span><b><span style="color: #000080">.</span></b><span>getWriter</span><b><span style="color: #000080">();</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><b><span style="color: #0000ff">this</span></b><b><span style="color: #000080">.</span></b><span>user </span><b><span style="color: #000080">+</span></b><span>&nbsp;</span><span style="color: #808080">", Welcome."</span><b><span style="color: #000080">);</span></b><br />&nbsp;&nbsp;&nbsp; <b><span style="color: #000080">}</span></b><br /><b><span style="color: #000080">}</span></b><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p>　　在上面这段代码里，有些人认为没有把user变量设为静态变量就不会出现线程问题了。其实不是的，因为Servlet容器只建一个实例，在线程间切换时就会出问题。如A和B两个人同时登录时，A先执行，在this.user = request.getParameter("user");把user设为A；然后线程切换了，B把user设为B，执行完之后再执行A，就会输出B, Welcome。</p>
<p>　　解决上面问题的方法就是，不要在Servlet定义可写的类变量，当然可写的静态变量就更不能定义了。</p>
<p>参考资料：孙鑫《Java Web开发详解——XML XSLT Servlet JSP深入剖析实例应用》第11章 开发线程安全的Servlet</p>
]]></content:encoded>
			<wfw:commentRss>http://yutuo.net/archives/e180c988fce8ae2c.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Servlet的异常处理</title>
		<link>http://yutuo.net/archives/571ef5e8ea91be55.html</link>
		<comments>http://yutuo.net/archives/571ef5e8ea91be55.html#comments</comments>
		<pubDate>Sun, 15 Jan 2012 06:22:22 +0000</pubDate>
		<dc:creator>yutuo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Exception]]></category>
		<category><![CDATA[Servlet]]></category>

		<guid isPermaLink="false">http://yutuo.net/?p=154</guid>
		<description><![CDATA[　　在之前，我一般用Try…Catch…来处理Servlet的异常。最近在看孙鑫老师写的《Java Web开发详解——XML XSLT Servlet JSP深入剖析实例应用》，发现还可以通过web.xml来配置Servlet的异常处理。觉得这个方法还是最好的。 　　主要是通过配置WEB-INF下web.xml的error-page来达到我们的异常处理。error-page下有三个标签error-code，exception-type，location。其中location是必需的，用于指定异常处理画面；error-code，exception-type在一个error-page有且只能有一个，用于指定异常或者错误码。 　　如果处理画面是Servlet，我们可以通过service来处理异常。其中request参数属性里，能取到javax.servlet.error.status_code, javax.servlet.error.exception_type, javax.servlet.error.message, javax.servlet.error.exception, javax.servlet.error.request_uri, javax.servlet.error.servlet_name这六个值，具体的说明和类型，请参考测试代码。 比如，测试用的web.xml配置如下： 123456789101112131415161718192021 &#60;?xml&#160;version="1.0"&#160;encoding="UTF-8"?&#62;&#160;&#60;web-app&#160;&#160;&#160;&#160;&#160;&#160;&#160; version="3.0"&#160;&#160;&#160;&#160;&#160;&#160;&#160; xmlns="http://java.sun.com/xml/ns/javaee"&#160;&#160;&#160;&#160;&#160;&#160;&#160; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&#160;&#160;&#160;&#160;&#160;&#160;&#160; xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"&#62;&#160;&#160;&#160;&#160; &#60;error-page&#62;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;error-code&#62;404&#60;/error-code&#62;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;location&#62;/ErrorPage&#60;/location&#62;&#160;&#160;&#160;&#160; &#60;/error-page&#62;&#160;&#160;&#160;&#160; &#60;error-page&#62;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;error-code&#62;500&#60;/error-code&#62;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;location&#62;/ErrorPage&#60;/location&#62;&#160;&#160;&#160;&#160; &#60;/error-page&#62;&#160;&#160;&#160;&#160; &#60;error-page&#62;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;exception-type&#62;java.io.IOException&#60;/exception-type&#62;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;location&#62;/ErrorPage&#60;/location&#62;&#160;&#160;&#160;&#160; &#60;/error-page&#62;&#160;&#60;/web-app&#62; 测试用的Servlet如下： 123456789101112131415161718192021222324252627282930313233343536373839 import java.io.IOException;import java.io.PrintWriter;&#160;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;&#160;/*** Servlet implementation class ErrorPage*/@WebServlet("/ErrorPage")public&#160;class ErrorPage extends HttpServlet {&#160;&#160;&#160; private&#160;static&#160;final&#160;long serialVersionUID =&#160;1L;&#160;&#160;&#160;&#160; protected&#160;void service(HttpServletRequest [...]]]></description>
			<content:encoded><![CDATA[<p>　　在之前，我一般用Try…Catch…来处理Servlet的异常。最近在看孙鑫老师写的《Java Web开发详解——XML XSLT Servlet JSP深入剖析实例应用》，发现还可以通过web.xml来配置Servlet的异常处理。觉得这个方法还是最好的。</p>
<p>　　主要是通过配置WEB-INF下web.xml的error-page来达到我们的异常处理。error-page下有三个标签error-code，exception-type，location。其中location是必需的，用于指定异常处理画面；error-code，exception-type在一个error-page有且只能有一个，用于指定异常或者错误码。</p>
<p>　　如果处理画面是Servlet，我们可以通过service来处理异常。其中request参数属性里，能取到javax.servlet.error.status_code, javax.servlet.error.exception_type, javax.servlet.error.message, javax.servlet.error.exception, javax.servlet.error.request_uri, javax.servlet.error.servlet_name这六个值，具体的说明和类型，请参考测试代码。</p>
<p>比如，测试用的web.xml配置如下：</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-right-width: 0px; border-collapse: collapse; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><span style="color: #ff0000">&lt;?</span><span style="color: #0000ff">xml</span><span>&nbsp;</span><span style="color: #ff0000">version</span><span>=</span><b><span style="color: #8000ff">"1.0"</span></b><span>&nbsp;</span><span style="color: #ff0000">encoding</span><span>=</span><b><span style="color: #8000ff">"UTF-8"</span></b><span style="color: #ff0000">?&gt;</span><br />&nbsp;<br /><span style="color: #0000ff">&lt;web-app</span><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #ff0000">version</span><span>=</span><b><span style="color: #8000ff">"3.0"</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #ff0000">xmlns</span><span>=</span><b><span style="color: #8000ff">"http://java.sun.com/xml/ns/javaee"</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #ff0000">xmlns:xsi</span><span>=</span><b><span style="color: #8000ff">"http://www.w3.org/2001/XMLSchema-instance"</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #ff0000">xsi:schemaLocation</span><span>=</span><b><span style="color: #8000ff">"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"</span></b><span style="color: #0000ff">&gt;</span><br /><b><span>&nbsp;&nbsp;&nbsp;&nbsp; </span></b><span style="color: #0000ff">&lt;error-page&gt;</span><br /><b><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></b><span style="color: #0000ff">&lt;error-code&gt;</span><b><span>404</span></b><span style="color: #0000ff">&lt;/error-code&gt;</span><br /><b><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></b><span style="color: #0000ff">&lt;location&gt;</span><b><span>/ErrorPage</span></b><span style="color: #0000ff">&lt;/location&gt;</span><br /><b><span>&nbsp;&nbsp;&nbsp;&nbsp; </span></b><span style="color: #0000ff">&lt;/error-page&gt;</span><br /><b><span>&nbsp;&nbsp;&nbsp;&nbsp; </span></b><span style="color: #0000ff">&lt;error-page&gt;</span><br /><b><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></b><span style="color: #0000ff">&lt;error-code&gt;</span><b><span>500</span></b><span style="color: #0000ff">&lt;/error-code&gt;</span><br /><b><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></b><span style="color: #0000ff">&lt;location&gt;</span><b><span>/ErrorPage</span></b><span style="color: #0000ff">&lt;/location&gt;</span><br /><b><span>&nbsp;&nbsp;&nbsp;&nbsp; </span></b><span style="color: #0000ff">&lt;/error-page&gt;</span><br /><b><span>&nbsp;&nbsp;&nbsp;&nbsp; </span></b><span style="color: #0000ff">&lt;error-page&gt;</span><br /><b><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></b><span style="color: #0000ff">&lt;exception-type&gt;</span><b><span>java.io.IOException</span></b><span style="color: #0000ff">&lt;/exception-type&gt;</span><br /><b><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></b><span style="color: #0000ff">&lt;location&gt;</span><b><span>/ErrorPage</span></b><span style="color: #0000ff">&lt;/location&gt;</span><br /><b><span>&nbsp;&nbsp;&nbsp;&nbsp; </span></b><span style="color: #0000ff">&lt;/error-page&gt;</span><br />&nbsp;<br /><span style="color: #0000ff">&lt;/web-app&gt;</span><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p>测试用的Servlet如下：</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-right-width: 0px; border-collapse: collapse; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><b><span style="color: #0000ff">import</span></b><span> java</span><b><span style="color: #000080">.</span></b><span>io</span><b><span style="color: #000080">.</span></b><span>IOException</span><b><span style="color: #000080">;</span></b><br /><b><span style="color: #0000ff">import</span></b><span> java</span><b><span style="color: #000080">.</span></b><span>io</span><b><span style="color: #000080">.</span></b><span>PrintWriter</span><b><span style="color: #000080">;</span></b><br />&nbsp;<br /><b><span style="color: #0000ff">import</span></b><span> javax</span><b><span style="color: #000080">.</span></b><span>servlet</span><b><span style="color: #000080">.</span></b><span>ServletException</span><b><span style="color: #000080">;</span></b><br /><b><span style="color: #0000ff">import</span></b><span> javax</span><b><span style="color: #000080">.</span></b><span>servlet</span><b><span style="color: #000080">.</span></b><span>annotation</span><b><span style="color: #000080">.</span></b><span>WebServlet</span><b><span style="color: #000080">;</span></b><br /><b><span style="color: #0000ff">import</span></b><span> javax</span><b><span style="color: #000080">.</span></b><span>servlet</span><b><span style="color: #000080">.</span></b><span>http</span><b><span style="color: #000080">.</span></b><span>HttpServlet</span><b><span style="color: #000080">;</span></b><br /><b><span style="color: #0000ff">import</span></b><span> javax</span><b><span style="color: #000080">.</span></b><span>servlet</span><b><span style="color: #000080">.</span></b><span>http</span><b><span style="color: #000080">.</span></b><span>HttpServletRequest</span><b><span style="color: #000080">;</span></b><br /><b><span style="color: #0000ff">import</span></b><span> javax</span><b><span style="color: #000080">.</span></b><span>servlet</span><b><span style="color: #000080">.</span></b><span>http</span><b><span style="color: #000080">.</span></b><span>HttpServletResponse</span><b><span style="color: #000080">;</span></b><br />&nbsp;<br /><span style="color: #008080">/**</span><br /><span style="color: #008080">* Servlet implementation class ErrorPage</span><br /><span style="color: #008080">*/</span><br /><span>@WebServlet</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"/ErrorPage"</span><b><span style="color: #000080">)</span></b><br /><span style="color: #8000ff">public</span><span>&nbsp;</span><span style="color: #8000ff">class</span><span> ErrorPage </span><b><span style="color: #0000ff">extends</span></b><span> HttpServlet </span><b><span style="color: #000080">{</span></b><br />&nbsp;&nbsp;&nbsp; <span style="color: #8000ff">private</span><span>&nbsp;</span><span style="color: #8000ff">static</span><span>&nbsp;</span><span style="color: #8000ff">final</span><span>&nbsp;</span><span style="color: #8000ff">long</span><span> serialVersionUID </span><b><span style="color: #000080">=</span></b><span>&nbsp;</span><span style="color: #ff8000">1L</span><b><span style="color: #000080">;</span></b><br />&nbsp;<br />&nbsp;&nbsp;&nbsp; <span style="color: #8000ff">protected</span><span>&nbsp;</span><span style="color: #8000ff">void</span><span> service</span><b><span style="color: #000080">(</span></b><span>HttpServletRequest request</span><b><span style="color: #000080">,</span></b><span> HttpServletResponse response</span><b><span style="color: #000080">)</span></b><span>&nbsp;</span><b><span style="color: #0000ff">throws</span></b><span> ServletException</span><b><span style="color: #000080">,</span></b><span> IOException </span><b><span style="color: #000080">{</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>PrintWriter out </span><b><span style="color: #000080">=</span></b><span> response</span><b><span style="color: #000080">.</span></b><span>getWriter</span><b><span style="color: #000080">();</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">// HTTP</span><span style="color: #008000">协议的状态码</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>Integer statusCode </span><b><span style="color: #000080">=</span></b><span>&nbsp;</span><b><span style="color: #000080">(</span></b><span>Integer</span><b><span style="color: #000080">)</span></b><span>request</span><b><span style="color: #000080">.</span></b><span>getAttribute</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"javax.servlet.error.status_code"</span><b><span style="color: #000080">);</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>String</span><b><span style="color: #000080">.</span></b><span>format</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"status_code: %s"</span><b><span style="color: #000080">,</span></b><span> statusCode</span><b><span style="color: #000080">));</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">// </span><span style="color: #008000">未捕获的异常类名</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>Class</span><b><span style="color: #000080">&lt;?&gt;</span></b><span> exceptionType </span><b><span style="color: #000080">=</span></b><span>&nbsp;</span><b><span style="color: #000080">(</span></b><span>Class</span><b><span style="color: #000080">&lt;?&gt;)</span></b><span>request</span><b><span style="color: #000080">.</span></b><span>getAttribute</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"javax.servlet.error.exception_type"</span><b><span style="color: #000080">);</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>String</span><b><span style="color: #000080">.</span></b><span>format</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"exception_type: %s"</span><b><span style="color: #000080">,</span></b><span> exceptionType</span><b><span style="color: #000080">));</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">// </span><span style="color: #008000">错误发生画面</span><span style="color: #008000">response.sendError</span><span style="color: #008000">设置的消息</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">// </span><span style="color: #008000">或者未捕获的异常的消息</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>String message </span><b><span style="color: #000080">=</span></b><span>&nbsp;</span><b><span style="color: #000080">(</span></b><span>String</span><b><span style="color: #000080">)</span></b><span>request</span><b><span style="color: #000080">.</span></b><span>getAttribute</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"javax.servlet.error.message"</span><b><span style="color: #000080">);</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>String</span><b><span style="color: #000080">.</span></b><span>format</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"message: %s"</span><b><span style="color: #000080">,</span></b><span> message</span><b><span style="color: #000080">));</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">// </span><span style="color: #008000">未捕获的异常</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>Throwable throwable </span><b><span style="color: #000080">=</span></b><span>&nbsp;</span><b><span style="color: #000080">(</span></b><span>Throwable</span><b><span style="color: #000080">)</span></b><span>request</span><b><span style="color: #000080">.</span></b><span>getAttribute</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"javax.servlet.error.exception"</span><b><span style="color: #000080">);</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>String</span><b><span style="color: #000080">.</span></b><span>format</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"Throwable: %s"</span><b><span style="color: #000080">,</span></b><span> throwable</span><b><span style="color: #000080">));</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">// </span><span style="color: #008000">当前请求</span><span style="color: #008000">URI</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>String requestUri </span><b><span style="color: #000080">=</span></b><span>&nbsp;</span><b><span style="color: #000080">(</span></b><span>String</span><b><span style="color: #000080">)</span></b><span>request</span><b><span style="color: #000080">.</span></b><span>getAttribute</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"javax.servlet.error.request_uri"</span><b><span style="color: #000080">);</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>String</span><b><span style="color: #000080">.</span></b><span>format</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"request_uri: %s"</span><b><span style="color: #000080">,</span></b><span> requestUri</span><b><span style="color: #000080">));</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">// </span><span style="color: #008000">错误画面的</span><span style="color: #008000">Servlet</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>String servletName </span><b><span style="color: #000080">=</span></b><span>&nbsp;</span><b><span style="color: #000080">(</span></b><span>String</span><b><span style="color: #000080">)</span></b><span>request</span><b><span style="color: #000080">.</span></b><span>getAttribute</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"javax.servlet.error.servlet_name"</span><b><span style="color: #000080">);</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>String</span><b><span style="color: #000080">.</span></b><span>format</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"servlet_name: %s"</span><b><span style="color: #000080">,</span></b><span> servletName</span><b><span style="color: #000080">));</span></b><br />&nbsp;&nbsp;&nbsp; <b><span style="color: #000080">}</span></b><br /><b><span style="color: #000080">}</span></b><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p>测试1：当提求画面不存在时，结果如下：</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-right-width: 0px; border-collapse: collapse; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><span>status_code: 404</span><br /><span>exception_type: null</span><br /><span>message: /JavaWeb/HelloWorld1</span><br /><span>Throwable: null</span><br /><span>request_uri: /JavaWeb/HelloWorld1</span><br /><span>servlet_name: default</span><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p>测试2：当提求画面发生IOException(web.xml配置)时，结果如下：</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-right-width: 0px; border-collapse: collapse; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><span>status_code: 500</span><br /><span>exception_type: class java.io.IOException</span><br /><span>message: Test Error Msg</span><br /><span>Throwable: java.io.IOException: Test Error Msg</span><br /><span>request_uri: /JavaWeb/HelloWorld</span><br /><span>servlet_name: net.yutuo.javaweb.servlet.HelloWorld</span><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p>测试3：当提求画面发生其它异常时，结果如下：</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-right-width: 0px; border-collapse: collapse; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><span>status_code: 500</span><br /><span>exception_type: null</span><br /><span>message: </span><br /><span>Throwable: javax.servlet.ServletException: Test Error Msg</span><br /><span>request_uri: /JavaWeb/HelloWorldInput</span><br /><span>servlet_name: net.yutuo.javaweb.servlet.HelloWorldInput</span><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p>根据以上的信息，写一个自己的异常画面应该是学过一点Java的就没问题了，呵呵。</p>
<p>参考资料：孙鑫《Java Web开发详解——XML XSLT Servlet JSP深入剖析实例应用》第10章 Servlet的异常处理机制</p>
]]></content:encoded>
			<wfw:commentRss>http://yutuo.net/archives/571ef5e8ea91be55.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用ResourceBundle来读取配置文件</title>
		<link>http://yutuo.net/archives/8f159033620d469f.html</link>
		<comments>http://yutuo.net/archives/8f159033620d469f.html#comments</comments>
		<pubDate>Sun, 15 Jan 2012 05:27:51 +0000</pubDate>
		<dc:creator>yutuo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Properties]]></category>

		<guid isPermaLink="false">http://yutuo.net/?p=153</guid>
		<description><![CDATA[　　之前不知道Java还有ResourceBundle这个类，最近一个项目，别人用了ResourceBundle来读取配置文件，还真的很方便。它可以读取相对Class目录的任何配置文件。测试代码如下： 我在包net.yutuo.java下建了一个test.properties的配置文件，内容如下： 1 test=testValue 测试用的Java文件如下： 1234567891011121314151617181920212223242526272829303132 import java.util.MissingResourceException;import java.util.ResourceBundle;&#160;public&#160;class PropertyTest {&#160;&#160;&#160;&#160; private&#160;static ResourceBundle resbun;&#160;&#160;&#160;&#160;&#160; static&#160;{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 绑定配置文件&#160;&#160;&#160;&#160;&#160;&#160;&#160; resbun = ResourceBundle.getBundle("net.yutuo.java.test");&#160;&#160;&#160;&#160; }&#160;&#160;&#160;&#160;&#160; /**&#160;&#160;&#160;&#160;&#160; * 读取配置值，如果取值失败，则返回defaultValue&#160;&#160;&#160;&#160;&#160; * @param key 索引&#160;&#160;&#160;&#160;&#160; * @param defaultValue 默认值&#160;&#160;&#160;&#160;&#160; * @return&#160;配置值&#160;&#160;&#160;&#160;&#160; */&#160;&#160;&#160;&#160; public&#160;static String getString(String key, String defaultValue)&#160;{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; try&#160;{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return resbun.getString(key);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&#160;catch&#160;(MissingResourceException ex)&#160;{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return defaultValue;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&#160;&#160;&#160;&#160; }&#160;&#160;&#160;&#160;&#160; public&#160;static&#160;void main(String[] arg)&#160;{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 读取一个配置文件存在的值&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>　　之前不知道Java还有ResourceBundle这个类，最近一个项目，别人用了ResourceBundle来读取配置文件，还真的很方便。它可以读取相对Class目录的任何配置文件。测试代码如下：</p>
<p>我在包net.yutuo.java下建了一个test.properties的配置文件，内容如下：</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-bottom: 0px; border-left: 0px; border-collapse: collapse; border-top: 0px; border-right: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><span>test=</span><span style="color: #2a00ff">testValue</span><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p>测试用的Java文件如下：</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-bottom: 0px; border-left: 0px; border-collapse: collapse; border-top: 0px; border-right: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><b><span style="color: #0000ff">import</span></b><span> java</span><b><span style="color: #000080">.</span></b><span>util</span><b><span style="color: #000080">.</span></b><span>MissingResourceException</span><b><span style="color: #000080">;</span></b><br /><b><span style="color: #0000ff">import</span></b><span> java</span><b><span style="color: #000080">.</span></b><span>util</span><b><span style="color: #000080">.</span></b><span>ResourceBundle</span><b><span style="color: #000080">;</span></b><br />&nbsp;<br /><span style="color: #8000ff">public</span><span>&nbsp;</span><span style="color: #8000ff">class</span><span> PropertyTest </span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">private</span><span>&nbsp;</span><span style="color: #8000ff">static</span><span> ResourceBundle resbun</span><b><span style="color: #000080">;</span></b><br />&nbsp;<br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">static</span><span>&nbsp;</span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// </span><span style="color: #008000">绑定配置文件</span><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resbun </span><b><span style="color: #000080">=</span></b><span> ResourceBundle</span><b><span style="color: #000080">.</span></b><span>getBundle</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"net.yutuo.java.test"</span><b><span style="color: #000080">);</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #000080">}</span></b><br />&nbsp;<br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008080">/**</span><br /><span style="color: #008080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * </span><span style="color: #008080">读取配置值，如果取值失败，则返回</span><span style="color: #008080">defaultValue</span><br /><span style="color: #008080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * </span><b><span style="color: #008080">@param</span></b><span style="color: #008080"> key </span><span style="color: #008080">索引</span><br /><span style="color: #008080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * </span><b><span style="color: #008080">@param</span></b><span style="color: #008080"> defaultValue </span><span style="color: #008080">默认值</span><br /><span style="color: #008080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * </span><b><span style="color: #008080">@return</span></b><span style="color: #008080">&nbsp;</span><span style="color: #008080">配置值</span><br /><span style="color: #008080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</span><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">public</span><span>&nbsp;</span><span style="color: #8000ff">static</span><span> String getString</span><b><span style="color: #000080">(</span></b><span>String key</span><b><span style="color: #000080">,</span></b><span> String defaultValue</span><b><span style="color: #000080">)</span></b><span>&nbsp;</span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #0000ff">try</span></b><span>&nbsp;</span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #0000ff">return</span></b><span> resbun</span><b><span style="color: #000080">.</span></b><span>getString</span><b><span style="color: #000080">(</span></b><span>key</span><b><span style="color: #000080">);</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #000080">}</span></b><span>&nbsp;</span><b><span style="color: #0000ff">catch</span></b><span>&nbsp;</span><b><span style="color: #000080">(</span></b><span>MissingResourceException ex</span><b><span style="color: #000080">)</span></b><span>&nbsp;</span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #0000ff">return</span></b><span> defaultValue</span><b><span style="color: #000080">;</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #000080">}</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #000080">}</span></b><br />&nbsp;<br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">public</span><span>&nbsp;</span><span style="color: #8000ff">static</span><span>&nbsp;</span><span style="color: #8000ff">void</span><span> main</span><b><span style="color: #000080">(</span></b><span>String</span><b><span style="color: #000080">[]</span></b><span> arg</span><b><span style="color: #000080">)</span></b><span>&nbsp;</span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// </span><span style="color: #008000">读取一个配置文件存在的值</span><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System</span><b><span style="color: #000080">.</span></b><span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>getString</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"test"</span><b><span style="color: #000080">,</span></b><span>&nbsp;</span><span style="color: #808080">"error"</span><b><span style="color: #000080">));</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// </span><span style="color: #008000">读取一个配置文件不存在的值</span><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System</span><b><span style="color: #000080">.</span></b><span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>getString</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"test1"</span><b><span style="color: #000080">,</span></b><span>&nbsp;</span><span style="color: #808080">"error"</span><b><span style="color: #000080">));</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #000080">}</span></b><br /><b><span style="color: #000080">}</span></b><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p>结果如下：</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-bottom: 0px; border-left: 0px; border-collapse: collapse; border-top: 0px; border-right: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><span>testValue</span><br /><span>error</span><br /></code></td>
</tr>
</tbody>
</table>
</div>
]]></content:encoded>
			<wfw:commentRss>http://yutuo.net/archives/8f159033620d469f.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>web.xml各个版本模板</title>
		<link>http://yutuo.net/archives/7048a006eeb2ac85.html</link>
		<comments>http://yutuo.net/archives/7048a006eeb2ac85.html#comments</comments>
		<pubDate>Thu, 12 Jan 2012 15:10:10 +0000</pubDate>
		<dc:creator>yutuo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Servlet]]></category>

		<guid isPermaLink="false">http://yutuo.net/?p=143</guid>
		<description><![CDATA[J2EE 2.3 123456 &#60;?xml&#160;version="1.0"&#160;encoding="ISO-8859-1"?&#62;&#160; &#60;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"&#62;&#160; &#160;&#160; &#60;web-app&#62;&#160; &#160;&#160; &#60;/web-app&#62; &#160; J2EE 2.4 123456 &#60;?xml&#160;version="1.0"&#160;encoding="UTF-8"?&#62;&#60;web-app&#160;id="WebApp_9"&#160;version="2.4"&#160;xmlns="http://java.sun.com/xml/ns/j2ee"&#160;&#160;&#160;&#160; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&#160;&#160;&#160;&#160; xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&#62;&#160;&#60;/web-app&#62; J2EE 2.5 1234567 &#60;?xml&#160;version="1.0"&#160;encoding="UTF-8"?&#62;&#160;&#160; &#60;web-app&#160;xmlns="http://java.sun.com/xml/ns/javaee"&#160;&#160;&#160;&#160; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&#160;&#160; &#160;&#160;&#160;&#160; xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&#160;&#160;&#160;&#160; version="2.5"&#62;&#160; &#160;&#160; &#60;/web-app&#62;&#160; J2EE3.0 1234567 &#60;?xml&#160;version="1.0"&#160;encoding="UTF-8"?&#62;&#60;web-app&#160;version="3.0"&#160;&#160;&#160;&#160; xmlns="http://java.sun.com/xml/ns/javaee"&#160;&#160;&#160;&#160; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&#160;&#160;&#160;&#160; xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"&#62;&#160;&#160; &#60;/web-app&#62; 参考地址：http://jlcon.iteye.com/blog/890964]]></description>
			<content:encoded><![CDATA[<p>J2EE 2.3</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-right-width: 0px; border-collapse: collapse; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><span style="color: #ff0000">&lt;?</span><span style="color: #0000ff">xml</span><span>&nbsp;</span><span style="color: #ff0000">version</span><span>=</span><b><span style="color: #8000ff">"1.0"</span></b><span>&nbsp;</span><span style="color: #ff0000">encoding</span><span>=</span><b><span style="color: #8000ff">"ISO-8859-1"</span></b><span style="color: #ff0000">?&gt;</span><b><span>&nbsp; </span></b><br /><span>&lt;!</span><span>DOCTYPE web-app PUBLIC "</span><span>-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN</span><span>" "</span><span>http://java.sun.com/dtd/web-app_2_3.dtd</span><span>"</span><span>&gt;</span><b><span>&nbsp; </span></b><br /><b><span>&nbsp;&nbsp; </span></b><br /><span style="color: #0000ff">&lt;web-app&gt;</span><b><span>&nbsp; </span></b><br /><b><span>&nbsp;&nbsp; </span></b><br /><span style="color: #0000ff">&lt;/web-app&gt;</span><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>J2EE 2.4</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-bottom: 0px; border-left: 0px; border-collapse: collapse; border-top: 0px; border-right: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><span style="color: #ff0000">&lt;?</span><span style="color: #0000ff">xml</span><span>&nbsp;</span><span style="color: #ff0000">version</span><span>=</span><b><span style="color: #8000ff">"1.0"</span></b><span>&nbsp;</span><span style="color: #ff0000">encoding</span><span>=</span><b><span style="color: #8000ff">"UTF-8"</span></b><span style="color: #ff0000">?&gt;</span><br /><span style="color: #0000ff">&lt;web-app</span><span>&nbsp;</span><span style="color: #ff0000">id</span><span>=</span><b><span style="color: #8000ff">"WebApp_9"</span></b><span>&nbsp;</span><span style="color: #ff0000">version</span><span>=</span><b><span style="color: #8000ff">"2.4"</span></b><span>&nbsp;</span><span style="color: #ff0000">xmlns</span><span>=</span><b><span style="color: #8000ff">"http://java.sun.com/xml/ns/j2ee"</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #ff0000">xmlns:xsi</span><span>=</span><b><span style="color: #8000ff">"http://www.w3.org/2001/XMLSchema-instance"</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #ff0000">xsi:schemaLocation</span><span>=</span><b><span style="color: #8000ff">"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</span></b><span style="color: #0000ff">&gt;</span><br /><b><span>&nbsp;</span></b><br /><span style="color: #0000ff">&lt;/web-app&gt;</span><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p>J2EE 2.5</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-bottom: 0px; border-left: 0px; border-collapse: collapse; border-top: 0px; border-right: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br />7<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><span style="color: #ff0000">&lt;?</span><span style="color: #0000ff">xml</span><span>&nbsp;</span><span style="color: #ff0000">version</span><span>=</span><b><span style="color: #8000ff">"1.0"</span></b><span>&nbsp;</span><span style="color: #ff0000">encoding</span><span>=</span><b><span style="color: #8000ff">"UTF-8"</span></b><span style="color: #ff0000">?&gt;</span><b><span>&nbsp;&nbsp; </span></b><br /><span style="color: #0000ff">&lt;web-app</span><span>&nbsp;</span><span style="color: #ff0000">xmlns</span><span>=</span><b><span style="color: #8000ff">"http://java.sun.com/xml/ns/javaee"</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #ff0000">xmlns:xsi</span><span>=</span><b><span style="color: #8000ff">"http://www.w3.org/2001/XMLSchema-instance"</span></b><span>&nbsp;&nbsp; </span><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #ff0000">xsi:schemaLocation</span><span>=</span><b><span style="color: #8000ff">"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #ff0000">version</span><span>=</span><b><span style="color: #8000ff">"2.5"</span></b><span style="color: #0000ff">&gt;</span><b><span>&nbsp; </span></b><br /><b><span>&nbsp;&nbsp; </span></b><br /><span style="color: #0000ff">&lt;/web-app&gt;</span><b><span>&nbsp; </span></b><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p>J2EE3.0</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-bottom: 0px; border-left: 0px; border-collapse: collapse; border-top: 0px; border-right: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br />7<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><span style="color: #ff0000">&lt;?</span><span style="color: #0000ff">xml</span><span>&nbsp;</span><span style="color: #ff0000">version</span><span>=</span><b><span style="color: #8000ff">"1.0"</span></b><span>&nbsp;</span><span style="color: #ff0000">encoding</span><span>=</span><b><span style="color: #8000ff">"UTF-8"</span></b><span style="color: #ff0000">?&gt;</span><br /><span style="color: #0000ff">&lt;web-app</span><span>&nbsp;</span><span style="color: #ff0000">version</span><span>=</span><b><span style="color: #8000ff">"3.0"</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #ff0000">xmlns</span><span>=</span><b><span style="color: #8000ff">"http://java.sun.com/xml/ns/javaee"</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #ff0000">xmlns:xsi</span><span>=</span><b><span style="color: #8000ff">"http://www.w3.org/2001/XMLSchema-instance"</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #ff0000">xsi:schemaLocation</span><span>=</span><b><span style="color: #8000ff">"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"</span></b><span style="color: #0000ff">&gt;</span><br /><b><span>&nbsp;&nbsp; </span></b><br /><span style="color: #0000ff">&lt;/web-app&gt;</span><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p>参考地址：<a href="http://jlcon.iteye.com/blog/890964">http://jlcon.iteye.com/blog/890964</a></p>
]]></content:encoded>
			<wfw:commentRss>http://yutuo.net/archives/7048a006eeb2ac85.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>通过反射动态调用类的属性和方法</title>
		<link>http://yutuo.net/archives/625d654bcffd078d.html</link>
		<comments>http://yutuo.net/archives/625d654bcffd078d.html#comments</comments>
		<pubDate>Wed, 11 Jan 2012 14:02:58 +0000</pubDate>
		<dc:creator>yutuo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[reflect]]></category>

		<guid isPermaLink="false">http://yutuo.net/?p=142</guid>
		<description><![CDATA[　　在实际应用中，反射还是很有用的。不过反射不能访问任何公共以外的东西。也就是说反射只能访问public定义的方法和属性。 　　如下两个类，测试类TestMethod： 12345678910111213141516171819202122232425262728293031323334 public&#160;class TestMethod {&#160;&#160;&#160;&#160; private&#160;int a;&#160;&#160;&#160;&#160; private&#160;int b;&#160;&#160;&#160;&#160; // 公共属性&#160;&#160;&#160; public String c =&#160;"public c";&#160;&#160;&#160;&#160; // 不带参数的构造方法&#160;&#160;&#160; public TestMethod()&#160;{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; this(0,&#160;0);&#160;&#160;&#160;&#160; }&#160;&#160;&#160;&#160; // 带参数的构造方法&#160;&#160;&#160; public TestMethod(int a,&#160;int b)&#160;{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.a = a;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.b = b;&#160;&#160;&#160;&#160; }&#160;&#160;&#160;&#160; // 静态函数&#160;&#160;&#160; public&#160;static&#160;int add(int a,&#160;int b)&#160;{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return a + b;&#160;&#160;&#160;&#160; }&#160;&#160;&#160;&#160; // 不带参数的实例函数&#160;&#160;&#160; public&#160;int time()&#160;{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return a * b;&#160;&#160;&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>　　在实际应用中，反射还是很有用的。不过反射不能访问任何公共以外的东西。也就是说<font color="#ff0000">反射只能访问public定义的方法和属性</font>。</p>
<p>　　如下两个类，测试类TestMethod：<br /> 
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-bottom: 0px; border-left: 0px; border-collapse: collapse; border-top: 0px; border-right: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><span style="color: #8000ff">public</span><span>&nbsp;</span><span style="color: #8000ff">class</span><span> TestMethod </span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">private</span><span>&nbsp;</span><span style="color: #8000ff">int</span><span> a</span><b><span style="color: #000080">;</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">private</span><span>&nbsp;</span><span style="color: #8000ff">int</span><span> b</span><b><span style="color: #000080">;</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// 公共属性</span><br /><span>&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">public</span><span> String c </span><b><span style="color: #000080">=</span></b><span>&nbsp;</span><span style="color: #808080">"public c"</span><b><span style="color: #000080">;</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// 不带参数的构造方法</span><br /><span>&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">public</span><span> TestMethod</span><b><span style="color: #000080">()</span></b><span>&nbsp;</span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #0000ff">this</span></b><b><span style="color: #000080">(</span></b><span style="color: #ff8000">0</span><b><span style="color: #000080">,</span></b><span>&nbsp;</span><span style="color: #ff8000">0</span><b><span style="color: #000080">);</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #000080">}</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// 带参数的构造方法</span><br /><span>&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">public</span><span> TestMethod</span><b><span style="color: #000080">(</span></b><span style="color: #8000ff">int</span><span> a</span><b><span style="color: #000080">,</span></b><span>&nbsp;</span><span style="color: #8000ff">int</span><span> b</span><b><span style="color: #000080">)</span></b><span>&nbsp;</span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #0000ff">this</span></b><b><span style="color: #000080">.</span></b><span>a </span><b><span style="color: #000080">=</span></b><span> a</span><b><span style="color: #000080">;</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #0000ff">this</span></b><b><span style="color: #000080">.</span></b><span>b </span><b><span style="color: #000080">=</span></b><span> b</span><b><span style="color: #000080">;</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #000080">}</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// 静态函数</span><br /><span>&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">public</span><span>&nbsp;</span><span style="color: #8000ff">static</span><span>&nbsp;</span><span style="color: #8000ff">int</span><span> add</span><b><span style="color: #000080">(</span></b><span style="color: #8000ff">int</span><span> a</span><b><span style="color: #000080">,</span></b><span>&nbsp;</span><span style="color: #8000ff">int</span><span> b</span><b><span style="color: #000080">)</span></b><span>&nbsp;</span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #0000ff">return</span></b><span> a </span><b><span style="color: #000080">+</span></b><span> b</span><b><span style="color: #000080">;</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #000080">}</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// 不带参数的实例函数</span><br /><span>&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">public</span><span>&nbsp;</span><span style="color: #8000ff">int</span><span> time</span><b><span style="color: #000080">()</span></b><span>&nbsp;</span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #0000ff">return</span></b><span> a </span><b><span style="color: #000080">*</span></b><span> b</span><b><span style="color: #000080">;</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #000080">}</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// 带参数的实例函数</span><br /><span>&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">public</span><span>&nbsp;</span><span style="color: #8000ff">int</span><span> plus</span><b><span style="color: #000080">(</span></b><span style="color: #8000ff">int</span><span> c</span><b><span style="color: #000080">)</span></b><span>&nbsp;</span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #0000ff">return</span></b><span> a </span><b><span style="color: #000080">+</span></b><span> b </span><b><span style="color: #000080">+</span></b><span> c</span><b><span style="color: #000080">;</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #000080">}</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// 带参数的实例函数</span><br /><span>&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">protected</span><span>&nbsp;</span><span style="color: #8000ff">int</span><span> plus</span><b><span style="color: #000080">()</span></b><span>&nbsp;</span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #0000ff">return</span></b><span> a </span><b><span style="color: #000080">+</span></b><span> b</span><b><span style="color: #000080">;</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #000080">}</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">public</span><span> String toString</span><b><span style="color: #000080">()</span></b><span>&nbsp;</span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #0000ff">return</span></b><span> String</span><b><span style="color: #000080">.</span></b><span>format</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"TestMethod[a=%d, b=%d]"</span><b><span style="color: #000080">,</span></b><span> a</span><b><span style="color: #000080">,</span></b><span> b</span><b><span style="color: #000080">);</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #000080">}</span></b><br /><b><span style="color: #000080">}</span></b><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p></p>
<p>　　如下两个类，Main测试类：</p>
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-bottom: 0px; border-left: 0px; border-collapse: collapse; border-top: 0px; border-right: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><span style="color: #8000ff">public</span><span>&nbsp;</span><span style="color: #8000ff">class</span><span> CallTestMethod </span><b><span style="color: #000080">{</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #8000ff">public</span><span>&nbsp;</span><span style="color: #8000ff">static</span><span>&nbsp;</span><span style="color: #8000ff">void</span><span> main</span><b><span style="color: #000080">(</span></b><span>String</span><b><span style="color: #000080">[]</span></b><span> avg</span><b><span style="color: #000080">)</span></b><span>&nbsp;</span><b><span style="color: #0000ff">throws</span></b><span> Exception </span><b><span style="color: #000080">{</span></b><br />&nbsp;<br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class</span><b><span style="color: #000080">&lt;?&gt;</span></b><span> testMethodClass </span><b><span style="color: #000080">=</span></b><span> Class</span><b><span style="color: #000080">.</span></b><span>forName</span><b><span style="color: #000080">(</span></b><span>TestMethod</span><b><span style="color: #000080">.</span></b><span style="color: #8000ff">class</span><b><span style="color: #000080">.</span></b><span>getName</span><b><span style="color: #000080">());</span></b><br />&nbsp;<br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// 用不带参数的构造方法创建实例</span><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestMethod objA </span><b><span style="color: #000080">=</span></b><span>&nbsp;</span><b><span style="color: #000080">(</span></b><span>TestMethod</span><b><span style="color: #000080">)</span></b><span> testMethodClass</span><b><span style="color: #000080">.</span></b><span>newInstance</span><b><span style="color: #000080">();</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System</span><b><span style="color: #000080">.</span></b><span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>objA</span><b><span style="color: #000080">);</span></b><br />&nbsp;<br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// 用带参数的构造方法创建实例</span><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Constructor</span><b><span style="color: #000080">&lt;?&gt;</span></b><span> constr </span><b><span style="color: #000080">=</span></b><span> testMethodClass</span><b><span style="color: #000080">.</span></b><span>getConstructor</span><b><span style="color: #000080">(</span></b><b><span style="color: #0000ff">new</span></b><span> Class</span><b><span style="color: #000080">[]{</span></b><span style="color: #8000ff">int</span><b><span style="color: #000080">.</span></b><span style="color: #8000ff">class</span><b><span style="color: #000080">,</span></b><span>&nbsp;</span><span style="color: #8000ff">int</span><b><span style="color: #000080">.</span></b><span style="color: #8000ff">class</span><b><span style="color: #000080">});</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestMethod objB </span><b><span style="color: #000080">=</span></b><span>&nbsp;</span><b><span style="color: #000080">(</span></b><span>TestMethod</span><b><span style="color: #000080">)</span></b><span> constr</span><b><span style="color: #000080">.</span></b><span>newInstance</span><b><span style="color: #000080">(</span></b><b><span style="color: #0000ff">new</span></b><span> Object</span><b><span style="color: #000080">[]{</span></b><span style="color: #ff8000">1</span><b><span style="color: #000080">,</span></b><span>&nbsp;</span><span style="color: #ff8000">2</span><b><span style="color: #000080">});</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System</span><b><span style="color: #000080">.</span></b><span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>objB</span><b><span style="color: #000080">);</span></b><br />&nbsp;<br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// 访问属性</span><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field field </span><b><span style="color: #000080">=</span></b><span> testMethodClass</span><b><span style="color: #000080">.</span></b><span>getDeclaredField</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"c"</span><b><span style="color: #000080">);</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System</span><b><span style="color: #000080">.</span></b><span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>field</span><b><span style="color: #000080">.</span></b><span>get</span><b><span style="color: #000080">(</span></b><span>objB</span><b><span style="color: #000080">));</span></b><br />&nbsp;<br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// 调用静态函数</span><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method method1 </span><b><span style="color: #000080">=</span></b><span> testMethodClass</span><b><span style="color: #000080">.</span></b><span>getMethod</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"add"</span><b><span style="color: #000080">,</span></b><span>&nbsp;</span><b><span style="color: #0000ff">new</span></b><span> Class</span><b><span style="color: #000080">[]{</span></b><span style="color: #8000ff">int</span><b><span style="color: #000080">.</span></b><span style="color: #8000ff">class</span><b><span style="color: #000080">,</span></b><span>&nbsp;</span><span style="color: #8000ff">int</span><b><span style="color: #000080">.</span></b><span style="color: #8000ff">class</span><b><span style="color: #000080">});</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// invoke函数的第一个参数为实例，所以在静态函数调用时，第一个参数为空</span><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System</span><b><span style="color: #000080">.</span></b><span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>method1</span><b><span style="color: #000080">.</span></b><span>invoke</span><b><span style="color: #000080">(</span></b><b><span style="color: #0000ff">null</span></b><b><span style="color: #000080">,</span></b><span>&nbsp;</span><b><span style="color: #0000ff">new</span></b><span> Object</span><b><span style="color: #000080">[]{</span></b><span style="color: #ff8000">3</span><b><span style="color: #000080">,</span></b><span>&nbsp;</span><span style="color: #ff8000">4</span><b><span style="color: #000080">}));</span></b><br />&nbsp;<br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// 调用不带参数的实例函数</span><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method method2 </span><b><span style="color: #000080">=</span></b><span> testMethodClass</span><b><span style="color: #000080">.</span></b><span>getMethod</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"time"</span><b><span style="color: #000080">);</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System</span><b><span style="color: #000080">.</span></b><span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>method2</span><b><span style="color: #000080">.</span></b><span>invoke</span><b><span style="color: #000080">(</span></b><span>objB</span><b><span style="color: #000080">));</span></b><br />&nbsp;<br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">// 调用带参数的实例函数</span><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method method3 </span><b><span style="color: #000080">=</span></b><span> testMethodClass</span><b><span style="color: #000080">.</span></b><span>getMethod</span><b><span style="color: #000080">(</span></b><span style="color: #808080">"plus"</span><b><span style="color: #000080">,</span></b><span>&nbsp;</span><b><span style="color: #0000ff">new</span></b><span> Class</span><b><span style="color: #000080">[]{</span></b><span style="color: #8000ff">int</span><b><span style="color: #000080">.</span></b><span style="color: #8000ff">class</span><b><span style="color: #000080">});</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System</span><b><span style="color: #000080">.</span></b><span>out</span><b><span style="color: #000080">.</span></b><span>println</span><b><span style="color: #000080">(</span></b><span>method3</span><b><span style="color: #000080">.</span></b><span>invoke</span><b><span style="color: #000080">(</span></b><span>objB</span><b><span style="color: #000080">,</span></b><span>&nbsp;</span><b><span style="color: #0000ff">new</span></b><span> Object</span><b><span style="color: #000080">[]{</span></b><span style="color: #ff8000">3</span><b><span style="color: #000080">}));</span></b><br /><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><b><span style="color: #000080">}</span></b><br /><b><span style="color: #000080">}</span></b><br /></code></td>
</tr>
</tbody>
</table>
</div>
<p>执行后，结果如下：<br /> 
<div style="border-bottom: silver 1px solid; border-left: silver 1px solid; line-height: 130%; overflow-y: hidden; width: 98%; overflow: auto; border-top: silver 1px solid; border-right: silver 1px solid" class="ytCode">
<table style="border-bottom: 0px; border-left: 0px; border-collapse: collapse; border-top: 0px; border-right: 0px">
<tbody>
<tr>
<td style="text-align: right; padding-bottom: 2px; background-color: #def; padding-left: 10px; padding-right: 4px; color: gray; vertical-align: top; overflow: visible; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px">1<br />2<br />3<br />4<br />5<br />6<br /></code></td>
<td style="background-color: #6ce26c; padding-left: 3px"></td>
<td style="padding-bottom: 2px; background-color: #f9f9f9; padding-left: 3px; width: 100%; padding-right: 4px; vertical-align: top; padding-top: 3px"><code style="font-family: consolas, courier new, monospace; white-space: nowrap; font-size: 12px"><span>TestMethod[a=0, b=0]</span><br /><span>TestMethod[a=1, b=2]</span><br /><span>7</span><br /><span>2</span><br /><span>6</span><br /><span>public c</span><br /></code></td>
</tr>
</tbody>
</table>
</div>
]]></content:encoded>
			<wfw:commentRss>http://yutuo.net/archives/625d654bcffd078d.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Servlet获取URL地址</title>
		<link>http://yutuo.net/archives/44b3d84a3d483427.html</link>
		<comments>http://yutuo.net/archives/44b3d84a3d483427.html#comments</comments>
		<pubDate>Sat, 03 Dec 2011 05:55:29 +0000</pubDate>
		<dc:creator>yutuo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Servlet]]></category>

		<guid isPermaLink="false">http://yutuo.net/archives/44b3d84a3d483427.html</guid>
		<description><![CDATA[　　最近在做一个系统，是在原有系统上改修的，有单独的服务器，所以不需要用数据库。而且有现成的HTML，所以基本上用一个Servlet就可以实现。根据请求的URL再调对应的Server函数，再把取到的值替换到HTML就行。 　　这里来说说用Servlet获取URL地址。在HttpServletRequest类里，有以下六个取URL的函数： getContextPath 取得项目名&#160; getServletPath 取得Servlet名 getPathInfo 取得Servlet后的URL名，不包括URL参数 getRequestURL 取得不包括参数的URL getRequestURI 取得不包括参数的URI，即去掉协议和服务器名的URL &#160; 　　具体如下图： 相对应的函数的值如下： getContextPath：/ServletTestgetServletPath：/maingetPathInfo：/index/testpage/testgetRequestURL：http://localhost:8080/ServletTest/main/index/testpage/testgetRequestURI：/ServletTest/main/index/testpage/test]]></description>
			<content:encoded><![CDATA[<p>　　最近在做一个系统，是在原有系统上改修的，有单独的服务器，所以不需要用数据库。而且有现成的HTML，所以基本上用一个Servlet就可以实现。根据请求的URL再调对应的Server函数，再把取到的值替换到HTML就行。</p>
<p>　　这里来说说用Servlet获取URL地址。在HttpServletRequest类里，有以下六个取URL的函数：</p>
<ul>
<li>getContextPath 取得项目名&nbsp;
<li>getServletPath 取得Servlet名
<li>getPathInfo 取得Servlet后的URL名，不包括URL参数
<li>getRequestURL 取得不包括参数的URL
<li>getRequestURI 取得不包括参数的URI，即去掉协议和服务器名的URL</li>
</ul>
<p>&nbsp;</p>
<p>　　具体如下图：</p>
<p><img src="http://yutuo.net/uploads/images/201112/2011-12-03_145130.jpg"></p>
<p>相对应的函数的值如下：</p>
<p>getContextPath：/ServletTest<br />getServletPath：/main<br />getPathInfo：/index/testpage/test<br />getRequestURL：http://localhost:8080/ServletTest/main/index/testpage/test<br />getRequestURI：/ServletTest/main/index/testpage/test</p>
]]></content:encoded>
			<wfw:commentRss>http://yutuo.net/archives/44b3d84a3d483427.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于线程Start的异常问题</title>
		<link>http://yutuo.net/archives/16818c764f707100.html</link>
		<comments>http://yutuo.net/archives/16818c764f707100.html#comments</comments>
		<pubDate>Wed, 20 Jan 2010 19:24:57 +0000</pubDate>
		<dc:creator>yutuo</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://yutuo.net/archives/16818c764f707100.html</guid>
		<description><![CDATA[　　在线程启动后，很可能出现预计外的异常。比如RuntimeException，一般我们在程序中很少捕捉这种异常，但一旦出现，我们很希望在Log文件里能看到异常，这样的分析程序就会方便很多。 　　在Java中，可以通过setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler e)来实现对未捕捉的异常进行处理。其中UncaughtExceptionHandler的实例必须实现uncaughtException函数。在uncaughtException(Thread t, Throwable e)中实现用异常的处理。 如下程序： 12345678910111213141516171819202122232425 import java.lang.Thread.UncaughtExceptionHandler; &#160; public class UncaughtExceptionTest { &#160; public static void main(String[] args) { Thread tt = new Thread() { @Override public void start() { int[] t = new int[1]; for (int i = 0; i &#38;lt; 2; i++) { System.out.println(t[i]); } } }; &#160; Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() [...]]]></description>
			<content:encoded><![CDATA[<p>　　在线程启动后，很可能出现预计外的异常。比如RuntimeException，一般我们在程序中很少捕捉这种异常，但一旦出现，我们很希望在Log文件里能看到异常，这样的分析程序就会方便很多。<br />
　　在Java中，可以通过setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler e)来实现对未捕捉的异常进行处理。其中UncaughtExceptionHandler的实例必须实现uncaughtException函数。在uncaughtException(Thread t, Throwable e)中实现用异常的处理。<br />
<span id="more-19"></span><br />
如下程序：</p>
<div style="border: 1px solid silver;margin: 10px 0 10px 0;background-color: #f9f9f9;line-height: 130%;font-size: 12px;font-family:Consolas;Courier New;monospace;FixedSys">
<div style="float: left;width: 4%;padding-right: 0.5%;background-color: #def;color: gray;text-align: right">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25</div>
<div style="float: left;width: 94%;padding-left: 0.5%">
<pre style="margin: 0;width: auto;float: none;overflow: visible;font-family:Consolas;Courier New;monospace;FixedSys"><span style="color: #000000;font-weight: bold">import</span> <span style="color: #006699">java.lang.Thread.UncaughtExceptionHandler</span><span style="color: #339933">;</span>
&nbsp;
<span style="color: #000000;font-weight: bold">public</span> <span style="color: #000000;font-weight: bold">class</span> UncaughtExceptionTest <span style="color: #339933">{</span>
&nbsp;
    <span style="color: #000000;font-weight: bold">public</span> <span style="color: #000000;font-weight: bold">static</span> <span style="color: #000066;font-weight: bold">void</span> main<span style="color: #339933">(</span><span style="color: #003399">String</span><span style="color: #339933">[]</span> args<span style="color: #339933">)</span> <span style="color: #339933">{</span>
        <span style="color: #003399">Thread</span> tt <span style="color: #339933">=</span> <span style="color: #000000;font-weight: bold">new</span> <span style="color: #003399">Thread</span><span style="color: #339933">()</span> <span style="color: #339933">{</span>
            @Override
            <span style="color: #000000;font-weight: bold">public</span> <span style="color: #000066;font-weight: bold">void</span> start<span style="color: #339933">()</span> <span style="color: #339933">{</span>
                <span style="color: #000066;font-weight: bold">int</span><span style="color: #339933">[]</span> t <span style="color: #339933">=</span> <span style="color: #000000;font-weight: bold">new</span> <span style="color: #000066;font-weight: bold">int</span><span style="color: #339933">[</span><span style="color: #cc66cc">1</span><span style="color: #339933">];</span>
                <span style="color: #000000;font-weight: bold">for</span> <span style="color: #339933">(</span><span style="color: #000066;font-weight: bold">int</span> i <span style="color: #339933">=</span> <span style="color: #cc66cc">0</span><span style="color: #339933">;</span> i <span style="color: #339933">&amp;</span>lt<span style="color: #339933">;</span> <span style="color: #cc66cc">2</span><span style="color: #339933">;</span> i<span style="color: #339933">++)</span> <span style="color: #339933">{</span>
                    <span style="color: #003399">System</span>.<span style="color: #006633">out</span>.<span style="color: #006633">println</span><span style="color: #339933">(</span>t<span style="color: #339933">[</span>i<span style="color: #339933">]);</span>
                <span style="color: #339933">}</span>
            <span style="color: #339933">}</span>
        <span style="color: #339933">};</span>
&nbsp;
        <span style="color: #003399">Thread</span>.<span style="color: #006633">setDefaultUncaughtExceptionHandler</span><span style="color: #339933">(</span><span style="color: #000000;font-weight: bold">new</span> UncaughtExceptionHandler<span style="color: #339933">()</span> <span style="color: #339933">{</span>
            @Override
            <span style="color: #000000;font-weight: bold">public</span> <span style="color: #000066;font-weight: bold">void</span> uncaughtException<span style="color: #339933">(</span><span style="color: #003399">Thread</span> t, <span style="color: #003399">Throwable</span> e<span style="color: #339933">)</span> <span style="color: #339933">{</span>
                <span style="color: #003399">System</span>.<span style="color: #006633">out</span>.<span style="color: #006633">println</span><span style="color: #339933">(</span>e<span style="color: #339933">);</span>
            <span style="color: #339933">}</span>
        <span style="color: #339933">});</span>
&nbsp;
        tt.<span style="color: #006633">start</span><span style="color: #339933">();</span>
    <span style="color: #339933">}</span>
<span style="color: #339933">}</span></pre>
</div>
</div>
<p>程序结果如下：</p>
<div style="border: 1px solid silver;margin: 10px 0 10px 0;background-color: #f9f9f9;line-height: 130%;font-size: 12px;font-family:Consolas;Courier New;monospace;FixedSys">
<div style="float: left;width: 4%;padding-right: 0.5%;background-color: #def;color: gray;text-align: right">1<br />2</div>
<div style="float: left;width: 94%;padding-left: 0.5%">
<pre style="margin: 0;width: auto;float: none;overflow: visible;font-family:Consolas;Courier New;monospace;FixedSys">0
java.lang.ArrayIndexOutOfBoundsException: 1</pre>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://yutuo.net/archives/16818c764f707100.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java文件列表的方法</title>
		<link>http://yutuo.net/archives/65073d58a0ca550c.html</link>
		<comments>http://yutuo.net/archives/65073d58a0ca550c.html#comments</comments>
		<pubDate>Tue, 12 Jan 2010 19:24:23 +0000</pubDate>
		<dc:creator>yutuo</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://yutuo.net/archives/65073d58a0ca550c.html</guid>
		<description><![CDATA[　　以前写Java程序时，对于文件目录的列表，总喜欢把所有文件列表，然后一个一个地比较后缀名以及是不是文件。这两天，看《Core Jave》时，发现可以用FilenameFilter来实现。比如，看D:\下的TXT文件，代码如下： 12345678910111213141516 import java.io.File; import java.io.FilenameFilter; &#160; public class FilenameFilterTest { public static final String EXT_TXT = &#34;.txt&#34;; public static void main(String[] args) { File dir = new File(&#34;D:\\&#34;); String[] filenames = dir.list(new FilenameFilter() { public boolean accept(File dir, String name) { File file = new File(dir, name); return file.isFile() &#38;amp;&#38;amp; name.toLowerCase().endsWith(EXT_TXT); } }); [...]]]></description>
			<content:encoded><![CDATA[<p>　　以前写Java程序时，对于文件目录的列表，总喜欢把所有文件列表，然后一个一个地比较后缀名以及是不是文件。这两天，看《Core Jave》时，发现可以用FilenameFilter来实现。比如，看D:\下的TXT文件，代码如下：</p>
<div style="border: 1px solid silver;margin: 10px 0 10px 0;background-color: #f9f9f9;line-height: 130%;font-size: 12px;font-family:Consolas;Courier New;monospace;FixedSys">
<div style="float: left;width: 4%;padding-right: 0.5%;background-color: #def;color: gray;text-align: right">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16</div>
<div style="float: left;width: 94%;padding-left: 0.5%">
<pre style="margin: 0;width: auto;float: none;overflow: visible;font-family:Consolas;Courier New;monospace;FixedSys"><span style="color: #000000;font-weight: bold">import</span> <span style="color: #006699">java.io.File</span><span style="color: #339933">;</span>
<span style="color: #000000;font-weight: bold">import</span> <span style="color: #006699">java.io.FilenameFilter</span><span style="color: #339933">;</span>
&nbsp;
<span style="color: #000000;font-weight: bold">public</span> <span style="color: #000000;font-weight: bold">class</span> FilenameFilterTest <span style="color: #339933">{</span>
    <span style="color: #000000;font-weight: bold">public</span> <span style="color: #000000;font-weight: bold">static</span> <span style="color: #000000;font-weight: bold">final</span> <span style="color: #003399">String</span> EXT_TXT <span style="color: #339933">=</span> <span style="color: #0000ff">&quot;.txt&quot;</span><span style="color: #339933">;</span>
    <span style="color: #000000;font-weight: bold">public</span> <span style="color: #000000;font-weight: bold">static</span> <span style="color: #000066;font-weight: bold">void</span> main<span style="color: #339933">(</span><span style="color: #003399">String</span><span style="color: #339933">[]</span> args<span style="color: #339933">)</span> <span style="color: #339933">{</span>
        <span style="color: #003399">File</span> dir <span style="color: #339933">=</span> <span style="color: #000000;font-weight: bold">new</span> <span style="color: #003399">File</span><span style="color: #339933">(</span><span style="color: #0000ff">&quot;D:<span style="color: #000099;font-weight: bold">\\</span>&quot;</span><span style="color: #339933">);</span>
        <span style="color: #003399">String</span><span style="color: #339933">[]</span> filenames <span style="color: #339933">=</span> dir.<span style="color: #006633">list</span><span style="color: #339933">(</span><span style="color: #000000;font-weight: bold">new</span> <span style="color: #003399">FilenameFilter</span><span style="color: #339933">()</span> <span style="color: #339933">{</span>
            <span style="color: #000000;font-weight: bold">public</span> <span style="color: #000066;font-weight: bold">boolean</span> accept<span style="color: #339933">(</span><span style="color: #003399">File</span> dir, <span style="color: #003399">String</span> name<span style="color: #339933">)</span> <span style="color: #339933">{</span>
                <span style="color: #003399">File</span> file <span style="color: #339933">=</span> <span style="color: #000000;font-weight: bold">new</span> <span style="color: #003399">File</span><span style="color: #339933">(</span>dir, name<span style="color: #339933">);</span>
                <span style="color: #000000;font-weight: bold">return</span> file.<span style="color: #006633">isFile</span><span style="color: #339933">()</span> <span style="color: #339933">&amp;</span>amp<span style="color: #339933">;&amp;</span>amp<span style="color: #339933">;</span> name.<span style="color: #006633">toLowerCase</span><span style="color: #339933">()</span>.<span style="color: #006633">endsWith</span><span style="color: #339933">(</span>EXT_TXT<span style="color: #339933">);</span>
            <span style="color: #339933">}</span>
        <span style="color: #339933">});</span>
        <span style="color: #000000;font-weight: bold">for</span> <span style="color: #339933">(</span><span style="color: #003399">String</span> filename <span style="color: #339933">:</span> filenames<span style="color: #339933">)</span> <span style="color: #003399">System</span>.<span style="color: #006633">out</span>.<span style="color: #006633">println</span><span style="color: #339933">(</span>filename<span style="color: #339933">);</span>
    <span style="color: #339933">}</span>
<span style="color: #339933">}</span></pre>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://yutuo.net/archives/65073d58a0ca550c.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于带分隔符文件的读取方法</title>
		<link>http://yutuo.net/archives/50bd94a4e5946c78.html</link>
		<comments>http://yutuo.net/archives/50bd94a4e5946c78.html#comments</comments>
		<pubDate>Mon, 11 Jan 2010 19:23:40 +0000</pubDate>
		<dc:creator>yutuo</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://yutuo.net/archives/50bd94a4e5946c78.html</guid>
		<description><![CDATA[　　在系统中，经常有批量输入和输出的操作。比如以CVS输入一个文件到数据库，输出一个文件到数据库。对于这种处理，以前总喜欢用Java的字符串分割的方法来做。今天看了《Core Java2》，发现还可以用Java自带的分隔符读入方法来实现。如下文本： 123 Harry Hacker,35500,1989,10,1 Carl Crecker,75000,1987,12,15 Tony Tester,38000,1990,3,15 对于这种文件，可以使用StringTokenizer来读入。代码如下： 1234567891011121314151617181920212223242526272829303132333435363738 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.Date; import java.util.GregorianCalendar; import java.util.StringTokenizer; &#160; public class StringTokenizerTest { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new FileReader(&#34;E:\\Test.txt&#34;)); &#160; while(true) { String data = in.readLine(); if (data == null &#124;&#124; data.length() [...]]]></description>
			<content:encoded><![CDATA[<p>　　在系统中，经常有批量输入和输出的操作。比如以CVS输入一个文件到数据库，输出一个文件到数据库。对于这种处理，以前总喜欢用Java的字符串分割的方法来做。今天看了《Core Java2》，发现还可以用Java自带的分隔符读入方法来实现。如下文本：</p>
<div style="border: 1px solid silver;margin: 10px 0 10px 0;background-color: #f9f9f9;line-height: 130%;font-size: 12px;font-family:Consolas;Courier New;monospace;FixedSys">
<div style="float: left;width: 4%;padding-right: 0.5%;background-color: #def;color: gray;text-align: right">1<br />2<br />3</div>
<div style="float: left;width: 94%;padding-left: 0.5%">
<pre style="margin: 0;width: auto;float: none;overflow: visible;font-family:Consolas;Courier New;monospace;FixedSys">Harry Hacker,35500,1989,10,1
Carl Crecker,75000,1987,12,15
Tony Tester,38000,1990,3,15</pre>
</div>
</div>
<p><span id="more-17"></span>对于这种文件，可以使用StringTokenizer来读入。代码如下：</p>
<div style="border: 1px solid silver;margin: 10px 0 10px 0;background-color: #f9f9f9;line-height: 130%;font-size: 12px;font-family:Consolas;Courier New;monospace;FixedSys">
<div style="float: left;width: 4%;padding-right: 0.5%;background-color: #def;color: gray;text-align: right">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38</div>
<div style="float: left;width: 94%;padding-left: 0.5%">
<pre style="margin: 0;width: auto;float: none;overflow: visible;font-family:Consolas;Courier New;monospace;FixedSys"><span style="color: #000000;font-weight: bold">import</span> <span style="color: #006699">java.io.BufferedReader</span><span style="color: #339933">;</span>
<span style="color: #000000;font-weight: bold">import</span> <span style="color: #006699">java.io.FileReader</span><span style="color: #339933">;</span>
<span style="color: #000000;font-weight: bold">import</span> <span style="color: #006699">java.io.IOException</span><span style="color: #339933">;</span>
<span style="color: #000000;font-weight: bold">import</span> <span style="color: #006699">java.util.Date</span><span style="color: #339933">;</span>
<span style="color: #000000;font-weight: bold">import</span> <span style="color: #006699">java.util.GregorianCalendar</span><span style="color: #339933">;</span>
<span style="color: #000000;font-weight: bold">import</span> <span style="color: #006699">java.util.StringTokenizer</span><span style="color: #339933">;</span>
&nbsp;
<span style="color: #000000;font-weight: bold">public</span> <span style="color: #000000;font-weight: bold">class</span> StringTokenizerTest <span style="color: #339933">{</span>
    <span style="color: #000000;font-weight: bold">public</span> <span style="color: #000000;font-weight: bold">static</span> <span style="color: #000066;font-weight: bold">void</span> main<span style="color: #339933">(</span><span style="color: #003399">String</span><span style="color: #339933">[]</span> args<span style="color: #339933">)</span> <span style="color: #000000;font-weight: bold">throws</span> <span style="color: #003399">IOException</span> <span style="color: #339933">{</span>
        <span style="color: #003399">BufferedReader</span> in <span style="color: #339933">=</span> <span style="color: #000000;font-weight: bold">new</span> <span style="color: #003399">BufferedReader</span><span style="color: #339933">(</span><span style="color: #000000;font-weight: bold">new</span> <span style="color: #003399">FileReader</span><span style="color: #339933">(</span><span style="color: #0000ff">&quot;E:<span style="color: #000099;font-weight: bold">\\</span>Test.txt&quot;</span><span style="color: #339933">));</span>
&nbsp;
        <span style="color: #000000;font-weight: bold">while</span><span style="color: #339933">(</span><span style="color: #000066;font-weight: bold">true</span><span style="color: #339933">)</span> <span style="color: #339933">{</span>
            <span style="color: #003399">String</span> data <span style="color: #339933">=</span> in.<span style="color: #006633">readLine</span><span style="color: #339933">();</span>
            <span style="color: #000000;font-weight: bold">if</span> <span style="color: #339933">(</span>data <span style="color: #339933">==</span> <span style="color: #000066;font-weight: bold">null</span> <span style="color: #339933">||</span> data.<span style="color: #006633">length</span><span style="color: #339933">()</span> <span style="color: #339933">==</span> <span style="color: #cc66cc">0</span><span style="color: #339933">)</span> <span style="color: #000000;font-weight: bold">break</span><span style="color: #339933">;</span>
            <span style="color: #003399">System</span>.<span style="color: #006633">out</span>.<span style="color: #006633">println</span><span style="color: #339933">(</span>readData<span style="color: #339933">(</span>data<span style="color: #339933">));</span>
        <span style="color: #339933">}</span>
    <span style="color: #339933">}</span>
&nbsp;
    <span style="color: #000000;font-weight: bold">private</span> <span style="color: #000000;font-weight: bold">static</span> Employee readData<span style="color: #339933">(</span><span style="color: #003399">String</span> in<span style="color: #339933">)</span> <span style="color: #339933">{</span>
        Employee em <span style="color: #339933">=</span> <span style="color: #000000;font-weight: bold">new</span> Employee<span style="color: #339933">();</span>
        <span style="color: #003399">StringTokenizer</span> t <span style="color: #339933">=</span> <span style="color: #000000;font-weight: bold">new</span> <span style="color: #003399">StringTokenizer</span><span style="color: #339933">(</span>in, <span style="color: #0000ff">&quot;,&quot;</span><span style="color: #339933">);</span>
        em.<span style="color: #006633">name</span> <span style="color: #339933">=</span> t.<span style="color: #006633">nextToken</span><span style="color: #339933">();</span>
        em.<span style="color: #006633">salary</span> <span style="color: #339933">=</span> <span style="color: #003399">Long</span>.<span style="color: #006633">parseLong</span><span style="color: #339933">(</span>t.<span style="color: #006633">nextToken</span><span style="color: #339933">());</span>
        em.<span style="color: #006633">hireDay</span> <span style="color: #339933">=</span> <span style="color: #000000;font-weight: bold">new</span> <span style="color: #003399">GregorianCalendar</span><span style="color: #339933">(</span><span style="color: #003399">Integer</span>.<span style="color: #006633">parseInt</span><span style="color: #339933">(</span>t.<span style="color: #006633">nextToken</span><span style="color: #339933">())</span>, <span style="color: #003399">Integer</span>.<span style="color: #006633">parseInt</span><span style="color: #339933">(</span>t.<span style="color: #006633">nextToken</span><span style="color: #339933">())</span> <span style="color: #339933">-</span> <span style="color: #cc66cc">1</span>,
                <span style="color: #003399">Integer</span>.<span style="color: #006633">parseInt</span><span style="color: #339933">(</span>t.<span style="color: #006633">nextToken</span><span style="color: #339933">()))</span>.<span style="color: #006633">getTime</span><span style="color: #339933">();</span>
        <span style="color: #000000;font-weight: bold">return</span> em<span style="color: #339933">;</span>
    <span style="color: #339933">}</span>
<span style="color: #339933">}</span>
&nbsp;
<span style="color: #000000;font-weight: bold">class</span> Employee <span style="color: #339933">{</span>
    <span style="color: #000000;font-weight: bold">public</span> <span style="color: #003399">String</span> name<span style="color: #339933">;</span>
    <span style="color: #000000;font-weight: bold">public</span> <span style="color: #000066;font-weight: bold">long</span> salary<span style="color: #339933">;</span>
    <span style="color: #000000;font-weight: bold">public</span> <span style="color: #003399">Date</span> hireDay<span style="color: #339933">;</span>
&nbsp;
    <span style="color: #000000;font-weight: bold">public</span> <span style="color: #003399">String</span> toString<span style="color: #339933">()</span> <span style="color: #339933">{</span>
        <span style="color: #000000;font-weight: bold">return</span> name <span style="color: #339933">+</span> <span style="color: #0000ff">&quot;,&quot;</span> <span style="color: #339933">+</span> salary <span style="color: #339933">+</span> <span style="color: #0000ff">&quot;,&quot;</span> <span style="color: #339933">+</span> hireDay<span style="color: #339933">;</span>
    <span style="color: #339933">}</span>
<span style="color: #339933">}</span></pre>
</div>
</div>
<p>结果为：</p>
<div style="border: 1px solid silver;margin: 10px 0 10px 0;background-color: #f9f9f9;line-height: 130%;font-size: 12px;font-family:Consolas;Courier New;monospace;FixedSys">
<div style="float: left;width: 4%;padding-right: 0.5%;background-color: #def;color: gray;text-align: right">1<br />2<br />3</div>
<div style="float: left;width: 94%;padding-left: 0.5%">
<pre style="margin: 0;width: auto;float: none;overflow: visible;font-family:Consolas;Courier New;monospace;FixedSys">Harry Hacker,35500,Sun Oct 01 00:00:00 JST 1989
Carl Crecker,75000,Tue Dec 15 00:00:00 JST 1987
Tony Tester,38000,Thu Mar 15 00:00:00 JST 1990</pre>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://yutuo.net/archives/50bd94a4e5946c78.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于Java的编码形式</title>
		<link>http://yutuo.net/archives/7f31799f105cd447.html</link>
		<comments>http://yutuo.net/archives/7f31799f105cd447.html#comments</comments>
		<pubDate>Sun, 10 Jan 2010 19:22:50 +0000</pubDate>
		<dc:creator>yutuo</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://yutuo.net/archives/7f31799f105cd447.html</guid>
		<description><![CDATA[在Java里支持各种各样的编码形式，如GB2312,UTF-8等。以下的程序可以查看Java的所有支持的编码。编码的使用主要用于文件的输入和输出。 1234567891011 import java.nio.charset.Charset; import java.util.Map; &#160; public class AvailableCharsets { public static void main(String[] args) { Map&#60;String, Charset&#62; charsets = Charset.availableCharsets(); for(String name : charsets.keySet()) { System.out.println(charsets.get(name)); } } } 上面的程序的结果为： 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 Big5 Big5-HKSCS EUC-JP EUC-KR GB18030 GB2312 GBK IBM-Thai IBM00858 IBM01140 IBM01141 IBM01142 IBM01143 IBM01144 IBM01145 IBM01146 IBM01147 IBM01148 IBM01149 IBM037 IBM1026 IBM1047 [...]]]></description>
			<content:encoded><![CDATA[<p>在Java里支持各种各样的编码形式，如GB2312,UTF-8等。以下的程序可以查看Java的所有支持的编码。编码的使用主要用于文件的输入和输出。</p>
<div style="border: 1px solid silver;margin: 10px 0 10px 0;background-color: #f9f9f9;line-height: 130%;font-size: 12px;font-family:Consolas;Courier New;monospace;FixedSys">
<div style="float: left;width: 4%;padding-right: 0.5%;background-color: #def;color: gray;text-align: right">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11</div>
<div style="float: left;width: 94%;padding-left: 0.5%">
<pre style="margin: 0;width: auto;float: none;overflow: visible;font-family:Consolas;Courier New;monospace;FixedSys"><span style="color: #000000;font-weight: bold">import</span> <span style="color: #006699">java.nio.charset.Charset</span><span style="color: #339933">;</span>
<span style="color: #000000;font-weight: bold">import</span> <span style="color: #006699">java.util.Map</span><span style="color: #339933">;</span>
&nbsp;
<span style="color: #000000;font-weight: bold">public</span> <span style="color: #000000;font-weight: bold">class</span> AvailableCharsets <span style="color: #339933">{</span>
    <span style="color: #000000;font-weight: bold">public</span> <span style="color: #000000;font-weight: bold">static</span> <span style="color: #000066;font-weight: bold">void</span> main<span style="color: #339933">(</span><span style="color: #003399">String</span><span style="color: #339933">[]</span> args<span style="color: #339933">)</span> <span style="color: #339933">{</span>
        Map<span style="color: #339933">&lt;</span>String, Charset<span style="color: #339933">&gt;</span> charsets <span style="color: #339933">=</span> Charset.<span style="color: #006633">availableCharsets</span><span style="color: #339933">();</span>
        <span style="color: #000000;font-weight: bold">for</span><span style="color: #339933">(</span><span style="color: #003399">String</span> name <span style="color: #339933">:</span> charsets.<span style="color: #006633">keySet</span><span style="color: #339933">())</span> <span style="color: #339933">{</span>
            <span style="color: #003399">System</span>.<span style="color: #006633">out</span>.<span style="color: #006633">println</span><span style="color: #339933">(</span>charsets.<span style="color: #006633">get</span><span style="color: #339933">(</span>name<span style="color: #339933">));</span>
        <span style="color: #339933">}</span>
    <span style="color: #339933">}</span>
<span style="color: #339933">}</span></pre>
</div>
</div>
<p><span id="more-16"></span>上面的程序的结果为：</p>
<div style="border: 1px solid silver;margin: 10px 0 10px 0;background-color: #f9f9f9;line-height: 130%;font-size: 12px;font-family:Consolas;Courier New;monospace;FixedSys">
<div style="float: left;width: 4%;padding-right: 0.5%;background-color: #def;color: gray;text-align: right">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162</div>
<div style="float: left;width: 94%;padding-left: 0.5%">
<pre style="margin: 0;width: auto;float: none;overflow: visible;font-family:Consolas;Courier New;monospace;FixedSys">Big5
Big5-HKSCS
EUC-JP
EUC-KR
GB18030
GB2312
GBK
IBM-Thai
IBM00858
IBM01140
IBM01141
IBM01142
IBM01143
IBM01144
IBM01145
IBM01146
IBM01147
IBM01148
IBM01149
IBM037
IBM1026
IBM1047
IBM273
IBM277
IBM278
IBM280
IBM284
IBM285
IBM297
IBM420
IBM424
IBM437
IBM500
IBM775
IBM850
IBM852
IBM855
IBM857
IBM860
IBM861
IBM862
IBM863
IBM864
IBM865
IBM866
IBM868
IBM869
IBM870
IBM871
IBM918
ISO-2022-CN
ISO-2022-JP
ISO-2022-JP-2
ISO-2022-KR
ISO-8859-1
ISO-8859-13
ISO-8859-15
ISO-8859-2
ISO-8859-3
ISO-8859-4
ISO-8859-5
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
JIS_X0201
JIS_X0212-1990
KOI8-R
KOI8-U
Shift_JIS
TIS-620
US-ASCII
UTF-16
UTF-16BE
UTF-16LE
UTF-32
UTF-32BE
UTF-32LE
UTF-8
windows-1250
windows-1251
windows-1252
windows-1253
windows-1254
windows-1255
windows-1256
windows-1257
windows-1258
windows-31j
x-Big5-Solaris
x-euc-jp-linux
x-EUC-TW
x-eucJP-Open
x-IBM1006
x-IBM1025
x-IBM1046
x-IBM1097
x-IBM1098
x-IBM1112
x-IBM1122
x-IBM1123
x-IBM1124
x-IBM1381
x-IBM1383
x-IBM33722
x-IBM737
x-IBM834
x-IBM856
x-IBM874
x-IBM875
x-IBM921
x-IBM922
x-IBM930
x-IBM933
x-IBM935
x-IBM937
x-IBM939
x-IBM942
x-IBM942C
x-IBM943
x-IBM943C
x-IBM948
x-IBM949
x-IBM949C
x-IBM950
x-IBM964
x-IBM970
x-ISCII91
x-ISO-2022-CN-CNS
x-ISO-2022-CN-GB
x-iso-8859-11
x-JIS0208
x-JISAutoDetect
x-Johab
x-MacArabic
x-MacCentralEurope
x-MacCroatian
x-MacCyrillic
x-MacDingbat
x-MacGreek
x-MacHebrew
x-MacIceland
x-MacRoman
x-MacRomania
x-MacSymbol
x-MacThai
x-MacTurkish
x-MacUkraine
x-MS932_0213
x-MS950-HKSCS
x-mswin-936
x-PCK
x-SJIS_0213
x-UTF-16LE-BOM
X-UTF-32BE-BOM
X-UTF-32LE-BOM
x-windows-50220
x-windows-50221
x-windows-874
x-windows-949
x-windows-950
x-windows-iso2022jp</pre>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://yutuo.net/archives/7f31799f105cd447.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

