﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-szhswl-文章分类-JAVA</title><link>http://www.blogjava.net/szhswl/category/27780.html</link><description>宋针还的个人空间</description><language>zh-cn</language><lastBuildDate>Thu, 10 Jan 2008 10:26:05 GMT</lastBuildDate><pubDate>Thu, 10 Jan 2008 10:26:05 GMT</pubDate><ttl>60</ttl><item><title>jsp页面转换成htm页面</title><link>http://www.blogjava.net/szhswl/articles/174379.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Thu, 10 Jan 2008 09:56:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/174379.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/174379.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/174379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/174379.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/174379.html</trackback:ping><description><![CDATA[ToHtml.java
<p>import java.io.ByteArrayOutputStream; <br />
import java.io.FileOutputStream; <br />
import java.io.IOException; <br />
import java.io.OutputStreamWriter; <br />
import java.io.PrintWriter; <br />
import javax.servlet.RequestDispatcher; <br />
import javax.servlet.ServletContext; <br />
import javax.servlet.ServletException; <br />
import javax.servlet.ServletOutputStream; <br />
import javax.servlet.http.HttpServlet; <br />
import javax.servlet.http.HttpServletRequest; <br />
import javax.servlet.http.HttpServletResponse; <br />
import javax.servlet.http.HttpServletResponseWrapper; <br />
public class ToHtml extends HttpServlet { </p>
<p>&nbsp;&nbsp;&nbsp; public void service(HttpServletRequest request, HttpServletResponse response) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws ServletException, IOException { <br />
&nbsp;&nbsp;&nbsp;&nbsp; String url = ""; <br />
&nbsp;&nbsp;&nbsp;&nbsp; String name = ""; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; ServletContext sc = getServletContext(); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; String htmName = request.getParameter("htmName");// 要生成的htm文件名 <br />
&nbsp;&nbsp;&nbsp;&nbsp; String jspUrl = request.getParameter("jspUrl");//访问的jsp路径<br />
&nbsp;&nbsp;&nbsp;&nbsp; String htmUrl = request.getParameter("htmUrl");//存放生成htm文件的路径</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; // 则你访问这个servlet时加参数.如<a href="http://localhost/test/toHtml?file_name=index">http://localhost/test/toHtml?file_name=index</a> </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; //url = "/" + file_name + ".jsp";// 你要生成的页面的文件名。<br />
&nbsp;&nbsp;&nbsp; 我的扩展名为jsf . <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; name = sc.getRealPath(htmUrl)+"\\"+ htmName + ".htm";<br />
&nbsp;&nbsp;&nbsp;&nbsp; //System.out.println(name);<br />
&nbsp;&nbsp;&nbsp;&nbsp; //name = ConfConstants.CONTEXT_PATH+"\\"+ file_name + ".htm";// 这是生成的html文件名,如index.htm.文件名字与源文件名相同。扩展名为htm </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; //ConfConstants.CONTEXT_PATH为你的应用的上下文路径。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; RequestDispatcher rd = sc.getRequestDispatcher(jspUrl);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; final ByteArrayOutputStream os = new ByteArrayOutputStream(); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; final ServletOutputStream stream = new ServletOutputStream() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void write(byte[] data, int offset, int length) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; os.write(data, offset, length); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void write(int b) throws IOException { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; os.write(b); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp; }; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os)); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; HttpServletResponse rep = new HttpServletResponseWrapper(response) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public ServletOutputStream getOutputStream() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return stream; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public PrintWriter getWriter() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return pw; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp; }; <br />
&nbsp;&nbsp;&nbsp;&nbsp; rd.include(request, rep); <br />
&nbsp;&nbsp;&nbsp;&nbsp; pw.flush(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream fos = new FileOutputStream(name); // 把jsp输出的内容写到xxx.htm <br />
&nbsp;&nbsp;&nbsp;&nbsp; os.writeTo(fos); <br />
&nbsp;&nbsp;&nbsp;&nbsp; fos.close(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("页面已经成功生成");<br />
&nbsp;&nbsp;&nbsp;&nbsp; //PrintWriter out = response.getWriter(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; //out.print("&lt;p align=center&gt;&lt;font size=3 color=red&gt;页面已经成功生成！single&lt;br&gt;http://www.agilejava.org/space/? 233&lt;/font&gt;&lt;/p&gt;"); <br />
&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp; } </p>
<p>&nbsp;</p>
<p>CallHtml.java</p>
<p>&nbsp;</p>
<p>import java.net.HttpURLConnection;<br />
import java.net.URL;<br />
import java.net.URLConnection;</p>
<p>public class CallHtml { </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void callOnePage(String htmName,String jspUrl,String htmUrl) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str = "<a href='http://127.0.0.1:8000/test/toHtml?htmName="+htmName+"&amp;jspUrl="+jspUrl+"&amp;htmUrl="+htmUrl' href_cetemp='http://127.0.0.1:8000/test/toHtml?htmName="+htmName+"&amp;jspUrl="+jspUrl+"&amp;htmUrl="+htmUrl'>http://127.0.0.1:8000/test/toHtml?htmName="+htmName+"&amp;jspUrl="+jspUrl+"&amp;htmUrl="+htmUrl</a> ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int httpResult; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL url = new URL(str); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URLConnection connection = url.openConnection(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connection.connect(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpURLConnection httpURLConnection = (HttpURLConnection) connection; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpResult = httpURLConnection.getResponseCode(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (httpResult != HttpURLConnection.HTTP_OK) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("没有连接成功"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("连接成功了　"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO: handle exception <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这个方法适当重载，就可以省去一些参数传递。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;</p>
<p>web.xml</p>
<p>&nbsp;</p>
<p>&lt;servlet&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;toHtml&lt;/servlet-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;com.test.filter.ToHtml&lt;/servlet-class&gt;<br />
&lt;/servlet&gt; <br />
</p>
<p>&lt;servlet-mapping&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;toHtml&lt;/servlet-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/toHtml&lt;/url-pattern&gt; <br />
&lt;/servlet-mapping&gt; <br />
</p>
<p>_______________________________________下面是网上找的方法：</p>
<p>这几天公司需要生成静态的HTML页面以减小数据库与服务器的压力和负担，于是在网络上一阵狂搜，找到几篇相当不错的文章和一些相当有用的资料。为了方便，我整理在自己的BLOG，以供参考！<br />
<br />
在接下来的应用中，我自己想到另一种解决方案，就是通过Ajax + Struts + XML解决静态页面方案，一并写下来，与大家分享！<br />
<br />
1.生成静态页面技术解决方案之一（转载） <br />
2.生成静态页面技术解决方案之二（转载） <br />
3.一个实现将动态页面转为静态的方案（转载） <br />
4.JSP生成静态HTML页面范例（转载） <br />
5.利用XML＋XSL生成静态页面技术方案（转载） <br />
6.Ajax + Struts + XML解决静态页面方案（原创） <br />
随着网站访问量的加大，每次从数据库读取都是以效率作为代价的，静态页加在搜索时，也会被优先考虑。互联网上流行的做法是将数据源代码写入数据库再从数据库读取生成静态面，这样无形间就加大了数据库。将现有的JSP页直接生成静态页，将会节省很多。 <br />
为什么要生成静态首页？ <br />
1、如果你首页读取的数据库次数比较多，速度很慢，而且占用很多服务器资源。使用静态页面访问速度当然快多了 <br />
2、搜索引擎容易搜索到 <br />
3、如果程序出问题，也能保证首页能访问<br />
诸如此类等等好处，那么下面几篇文章给大家几个完整的解决方案！<br />
----------------------------------------------------------------------------------------------------<br />
<br />
生成静态页面技术解决方案之一<br />
<br />
转载者前言：这是一个全面的jsp动态页面静态化方案，本站的帖子静态化方案将借鉴这篇帖子中方法。向<a href="http://www.agilejava.org/" target="_blank">http://www.agilejava.org</a>的single的共享精神致敬。 <br />
<br />
转帖正文： <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相信很多人都希望自己的页面越快越好，最好是能静态的，提高客户访问速度。也便于搜索引擎搜索。所以，就希望我们的动态读取数据库的页面，尽可能的生成静态页面。一下系列文章，介绍一下个人的解决方案。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本系列将介绍个人的一种方法，在不改变原来jsp文件的基础上，只需要加入少量的代码，就让你的新闻发布系统，很容易就完全变成静态的页面。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本文假设你是用java开发的web动态页面。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第一步，加入servlet.代码如下。 <br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div class="UBBPanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px" alt="程序代码" src="http://www.newbooks.com.cn/infos/pic/200712/175377/20071220011950430.gif" /> 程序代码</div>
<div class="UBBContent">public class ToHtml extends HttpServlet { <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void service(HttpServletRequest request, HttpServletResponse response) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws ServletException, IOException { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String url = ""; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String name = ""; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletContext sc = getServletContext(); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String file_name = request.getParameter("file_name");// 你要访问的jsp文件名,如index，不包括扩展名 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 则你访问这个servlet时加参数.如<a href="http://localhost/test/toHtml?file_name=index" target="_blank">http://localhost/test/toHtml?file_name=index</a> <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url = "/" + file_name + ".jsf";// 你要生成的页面的文件名。我的扩展名为jsf . <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name = ConfConstants.CONTEXT_PATH+"\\"+ file_name + ".htm";// 这是生成的html文件名,如index.htm.文件名字与源文件名相同。扩展名为htm <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ConfConstants.CONTEXT_PATH为你的应用的上下文路径。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RequestDispatcher rd = sc.getRequestDispatcher(url); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final ByteArrayOutputStream ōs = new ByteArrayOutputStream(); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final ServletOutputStream stream = new ServletOutputStream() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void write(byte[] data, int offset, int length) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.write(data, offset, length); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void write(int b) throws IOException { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.write(b); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os)); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse rep = new HttpServletResponseWrapper(response) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public ServletOutputStream getOutputStream() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return stream; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public PrintWriter getWriter() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return pw; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rd.include(request, rep); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.flush(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream fos = new FileOutputStream(name); // 把jsp输出的内容写到xxx.htm <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.writeTo(fos); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos.close(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintWriter ōut = response.getWriter(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.print("&lt;p align=center&gt;&lt;font size=3 color=red&gt;页面已经成功生成！single&lt;br&gt;<a href="http://www.agilejava.org/space/?" target="_blank">http://www.agilejava.org/space/?</a> 233&lt;/font&gt;&lt;/p&gt;"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </div>
</div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第二步、配置你的web.xml <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div class="UBBPanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px" alt="程序代码" src="http://www.newbooks.com.cn/infos/pic/200712/175377/20071220011950430.gif" /> 程序代码</div>
<div class="UBBContent">&lt;servlet&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;toHtml&lt;/servlet-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-class&gt;mj.util.html.ToHtml&lt;/servlet-class&gt;//你的servlet的类。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;toHtml&lt;/servlet-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;/toHtml&lt;/url-pattern&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt; </div>
</div>
<p><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第三步、运行servlet。如：<a href="http://localhost:8080/test/toHtml?file_name=index" target="_blank">http://localhost:8080/test/toHtml?file_name=index</a> <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK,这就在你的test项目的根目录下，生成了一个index.htm的静态文件。　 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;局限性：本文只能生成一个文件！访问一次，生成一个文件。并且生成的文件名也与原来的文件名相同。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比较适合主页生成静态页面。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本系列的后续文章将解决更多的问题。使之在新闻发布系统中，很容易就集成应用。 <br />
<br />
----------------------------------------------------------------------------------------------------<br />
<br />
生成静态页面技术解决方案之二 <br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：转贴本文，请加上本文链接<a href="http://www.agilejava.org/space/?233/action_viewspace_itemid_21.html" target="_blank">http://www.agilejava.org/space/?233/action_viewspace_itemid_21.html</a>&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在上一篇文章中，生成静态页面，是有一定的局限性的。生成主页是很方便，但要生成二级页面，就不方便了。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本文假设一个新闻发布系统。希望后台发布的，前台显示的是静态的文档。这就涉及，主页要是静态的，同时二级列表也是静态的，新闻内容也是静态的。也就是说， 在发布一篇新闻的时候，可能涉及到三个地方生成静态文档。并且，要生成一个网页，必须访问一个servlet。在大量生成静态网页的时候， <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以下方法，可以解决这些问题。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div class="UBBPanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px" alt="程序代码" src="http://www.newbooks.com.cn/infos/pic/200712/175377/20071220011950430.gif" /> 程序代码</div>
<div class="UBBContent">一、加入一下servelet <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/** <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @file_name 文件名及文件之后的参数.最好为a.jsf?fileId=aaaa <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @path 文件所在的路径.相对于根目录而言的. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @realName文件要保存的名字 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @realPath文件要保存的真实路径。默认与文件所在的目录相同。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public class ToHtmlPath extends HttpServlet { <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void service(HttpServletRequest request, HttpServletResponse response) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws ServletException, IOException { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String url = ""; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String name = ""; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletContext sc = getServletContext(); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String file_name = request.getParameter("file_name");// 你要访问的jsp文件,如news.jsf。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// file_name如：fileDetail.jsf?fileId=56.要是有参数， 只有一个参数。并且以参数名作为文件名。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String realName = request.getParameter("realName");// 要保存的文件名。如aaa;注意可以没有这个参数。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String path = request.getParameter("path");// 你要访问的jsp文件路径。如news。注意可以没有这个参数。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String realPath = request.getParameter("realPath");// 你要保存的文件路径,如htmlNews.注意可以没有这个参数。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 下面确定要保存的文件名字。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (realName == null || realName == "") { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int a = 0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = file_name.indexOf("=") + 1; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; realName = file_name.substring(a); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (realName.indexOf(".")&gt;0) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;realName = file_name.substring(0, file_name.indexOf(".")); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 下面构造要访问的页面。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (path == null || path == "") { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url = "/" + file_name;// 这是你要生成HTML的jsp文件,如 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url = "/" + path + "/" + file_name;// 这是你要生成HTML的jsp文件,如 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 下面构造要保存的文件名，及路径。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 1、如果有realPath，则保存在realPath下。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 2、如果有path则保存在path下。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 3、否则，保存在根目录下。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (realPath == null || realPath == "") { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (path == null || path == "") { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name = ConfConstants.CONTEXT_PATH + "\\" + realName + ".htm";// 这是生成的html文件名,如index.htm.说明： ConfConstants.CONTEXT_PATH为你的上下文路径。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name = ConfConstants.CONTEXT_PATH + "\\" + path + "\\" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ realName + ".htm";// 这是生成的html文件名,如index.htm. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name = ConfConstants.CONTEXT_PATH + "\\" + realPath + "\\" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + realName + ".htm";// 这是生成的html文件名,如index.htm. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 访问请求的页面，并生成指定的文件。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RequestDispatcher rd = sc.getRequestDispatcher(url); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final ByteArrayOutputStream ōs = new ByteArrayOutputStream(); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final ServletOutputStream stream = new ServletOutputStream() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void write(byte[] data, int offset, int length) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.write(data, offset, length); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void write(int b) throws IOException { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.write(b); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os)); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse rep = new HttpServletResponseWrapper(response) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public ServletOutputStream getOutputStream() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return stream; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public PrintWriter getWriter() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return pw; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rd.include(request, rep); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.flush(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream fos = new FileOutputStream(name); // 把jsp输出的内容写到xxx.htm <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.writeTo(fos); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos.close(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintWriter ōut = response.getWriter(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print("&lt;p align=center&gt;&lt;font size=3 color=red&gt;success！&lt;/font&gt;&lt;/p&gt;"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </div>
</div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;二、在web.xml里面配置你的servlet <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div class="UBBPanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px" alt="程序代码" src="http://www.newbooks.com.cn/infos/pic/200712/175377/20071220011950430.gif" /> 程序代码</div>
<div class="UBBContent">&lt;servlet&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;toHtmlPath&lt;/servlet-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-class&gt;mj.util.html.ToHtmlPath&lt;/servlet-class&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;toHtmlPath&lt;/servlet-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;/toHtmlPath&lt;/url-pattern&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt; </div>
</div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;三、写一个通用的方法，　供调用。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div class="UBBPanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px" alt="程序代码" src="http://www.newbooks.com.cn/infos/pic/200712/175377/20071220011950430.gif" /> 程序代码</div>
<div class="UBBContent">public class CallHtml { <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void callOnePage(String fileName, String path, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String realName, String realPath) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str = "<a href="http://localhost:8080/test/toHtmlPath?file_name=" target="_blank">http://localhost:8080/test/toHtmlPath?file_name=</a>" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + fileName + "&amp;&amp;path=" + path + "&amp;&amp;realName=" + realName <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + "&amp;&amp;realPath=" + realPath; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int httpResult; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL url = new URL(str); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URLConnection connection = url.openConnection(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connection.connect(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpURLConnection httpURLConnection = (HttpURLConnection) connection; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpResult = httpURLConnection.getResponseCode(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (httpResult != HttpURLConnection.HTTP_OK) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("没有连接成功"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("连接成功了　"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (Exception e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO: handle exception <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这个方法适当重载，就可以省去一些参数传递。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </div>
</div>
<p><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;四、在你的新闻发布save时，调用方法。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div class="UBBPanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px" alt="程序代码" src="http://www.newbooks.com.cn/infos/pic/200712/175377/20071220011950430.gif" /> 程序代码</div>
<div class="UBBContent">1、CallHtml.callOnePage("info.jsf?file_id=aaa",news,"", "");//将在news目录下生成一个aaa.htm的静态文件 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、CallHtml.callOnePage("newsList.jsf",news,"", "");//将在news目录下生成一个newsList.htm的静态文件,显示最新的新闻。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;３、CallHtml.callOnePage("index.jsf","","", "");//生成主页。</div>
</div>
<p><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好了，这就保持了，主页、列表、新闻内容都是最新的静态页面了。 <br />
<br />
<br />
----------------------------------------------------------------------------------------------------<br />
<br />
一个实现将动态页面转为静态的方案<br />
<br />
1.前言<br />
为了能深入浅出的理解这个框架的由来，我们首先来了解一下JSP解析器将我们写的JSP代码转换成的JAVA文件的内容。<br />
下面是一个JSP文件test.jsp<br />
经过TOMCAT转换出的JAVA文件test$jsp.java内容如下：<br />
</p>
<div class="UBBPanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px" alt="程序代码" src="http://www.newbooks.com.cn/infos/pic/200712/175377/20071220011950430.gif" /> 程序代码</div>
<div class="UBBContent">package org.apache.jsp;<br />
import javax.servlet.*;<br />
import javax.servlet.http.*;<br />
import javax.servlet.jsp.*;<br />
import org.apache.jasper.runtime.*;<br />
<br />
public class test$jsp extends HttpJspBase {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;static {<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;public testOutRedir$jsp( ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;private static boolean _jspx_inited = false;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;public final void _jspx_init() throws org.apache.jasper.runtime.JspException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;public void _jspService(HttpServletRequest request, HttpServletResponse&nbsp;&nbsp;response)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws java.io.IOException, ServletException {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JspFactory _jspxFactory = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PageContext pageContext = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpSession session = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletContext application = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletConfig config = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JspWriter out = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object page = this;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;_value = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (_jspx_inited == false) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;synchronized (this) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (_jspx_inited == false) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_jspx_init();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_jspx_inited = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_jspxFactory = JspFactory.getDefaultFactory();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(text/html;charset=GB2312);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageContext = _jspxFactory.getPageContext(this, request, response,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, true, 8192, true);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;application = pageContext.getServletContext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config = pageContext.getServletConfig();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session = pageContext.getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out = pageContext.getOut();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//为了节省篇幅，我删除了解释器添加的注释<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.write(\r\n);<br />
//上一句是由于后面的换行产生的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.write();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.write(\r\n\r\n\r\n\r\n);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print( 输出 );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.write(\r\n\r\n\r\n\r\n);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (Throwable t) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (out != null &amp;&amp; out.getBufferSize() != 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.clearBuffer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (pageContext != null) pageContext.handlePageException(t);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} finally {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</div>
</div>
<p><br />
<br />
从上面的代码中可以清晰的看到JSP内建的几个对象（out、request、response、session、pageContext、application、config、page）是怎么产生的，懂servlet的朋友一看就能明白。<br />
下面重点理解一下out对象，它被声明为JspWriter类型，JspWriter是一个抽象类，在包javax.servlet.jsp中可以找到它的定义。<br />
</p>
<div class="UBBPanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px" alt="程序代码" src="http://www.newbooks.com.cn/infos/pic/200712/175377/20071220011950430.gif" /> 程序代码</div>
<div class="UBBContent">abstract public class javax.servlet.jsp.JspWriter extends java.io.Writer{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final public static int NO_BUFFER = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final public static int DEFAULT_BUFFER = -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final public static int UNBOUNDED_BUFFER = -2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected int bufferSize;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected Boolean autoFlush;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected javax.servlet.jsp.JspWriter(int arg1, boolean arg2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void newLine() throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void print(boolean arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void print(char arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void print(int arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void print(long arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void print(float arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void print(double arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void print(char[] arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void print(String arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void print(Object arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void println() throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void println(boolean arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void println(char arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void println(int arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void println(long arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void println(float arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void println(double arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void println(char[] arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void println(String arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abtract public void println(Object arg0) throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void clear() throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void clearBuffer() throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void flush() throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public void close() throws IOException ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;public int getBufferSize() ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract public int getRemaining() ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;public boolean isAutoFlush() ;<br />
}</div>
</div>
<p><br />
我相信当我写到这里你可能已经知道我想怎么做了。是的，来个偷天换日，继承JspWriter类，然后实现其定义的虚函数，然后把out变量替换成你自己实现的类的实例就ok了。<br />
2.实现替换<br />
假设<br />
3.更新问题<br />
下面就讨论一下如何更新生成静态文件，其实从上面实现中你可以看到，很简单的就是将生成的静态文件删除即可，至于什么时候删除，要看你的需求了。我能想到的几种情况如下<br />
当用来生成页面的数据更新时<br />
如果不需要很提供时时的数据可以定时更新<br />
永远不更新<br />
----------------------------------------------------------------------------------------------------<br />
JSP生成静态HTML页面范例<br />
<br />
先建立一个模本页面:template.htm<br />
<br />
</p>
<div class="UBBPanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px" alt="程序代码" src="http://www.newbooks.com.cn/infos/pic/200712/175377/20071220011950430.gif" /> 程序代码</div>
<div class="UBBContent">&lt;Html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;###title###&lt;/title&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />
&lt;LINK href="../Css.css" rel=stylesheet type=text/css&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table width="500" border="0" align="center" cellpadding="0" cellspacing="2"&gt;<br />
&lt;tr&gt; <br />
&lt;td align="center"&gt;###title###&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt; <br />
&lt;td align="center"&gt;作者：###author###&nbsp;&nbsp;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;###content###<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</div>
</div>
<p><br />
=========================================<br />
再写一个jsp页面: buildhtml.jsp<br />
<br />
</p>
<div class="UBBPanel">
<div class="UBBTitle"><img style="margin: 0px 2px -3px 0px" alt="程序代码" src="http://www.newbooks.com.cn/infos/pic/200712/175377/20071220011950430.gif" /> 程序代码</div>
<div class="UBBContent">&lt;%@ page contentType="text/html; charset=gb2312" import="Java.util.*,java.io.*"%&gt;<br />
&lt;%<br />
try{<br />
String title="jsp生成静态html文件";<br />
String content="小样，还搞不定你？";<br />
String editer="webjxcom";<br />
String filePath = "";<br />
filePath = request.getRealPath("/")+"template.htm";<br />
out.print(filePath);<br />
String templateContent="";<br />
FileInputStream fileinputstream = new FileInputStream(filePath);//读取模块文件<br />
int lenght = fileinputstream.available();<br />
byte bytes[] = new byte[lenght];<br />
fileinputstream.read(bytes);<br />
fileinputstream.close();<br />
templateContent = new String(bytes);<br />
out.print(templateContent);<br />
templateContent=templateContent.replaceAll("###title###",title);<br />
templateContent=templateContent.replaceAll("###content###",content);<br />
templateContent=templateContent.replaceAll("###author###",editer);//替换掉模块中相应的地方<br />
out.print(templateContent);<br />
// 根据时间得文件名<br />
Calendar calendar = Calendar.getInstance();<br />
String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";<br />
fileame = request.getRealPath("/")+fileame;//生成的html文件保存路径<br />
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//建立文件输出流<br />
out.print("文件输出路径:&lt;br&gt;");<br />
out.print(fileame);<br />
byte tag_bytes[] = templateContent.getBytes();<br />
fileoutputstream.write(tag_bytes);<br />
fileoutputstream.close();<br />
}<br />
catch(Exception e){<br />
out.print(e.toString());<br />
}<br />
%&gt;</div>
</div>
<p><br />
----------------------------------------------------------------------------------------------------<br />
<br />
Ajax + Struts + XML解决静态页面方案（原创）<br />
<br />
对于其他几位前辈提出的方案，我也是受益良深，所以方案中，最简单的就是将JSP输出为HTML，最麻烦的是利用IO将输出信息组成HTML文件，最难的对我来说应该是生成XML的方案。我没有学XSL，但据说比较难，远不如HTML那么容易。尽管如此，生成XML这种方案却是我最欣赏的，原因有四:<br />
<br />
第一是实现了表示与数据的分离；<br />
<br />
第二是易于操作，增删改都相当方便；<br />
<br />
第三是跨平台特性让它应用领域更广；<br />
<br />
第四XML本身就可以当数据库使用，使得它可以合理组织数据。<br />
<br />
OK，基于这些原因，小弟在推敲中想到一个解决方案：如果我们在服务器生成若干XML文档，由统一的HTML装载，然后客户端执行HTML时，通过AJAX异步载入XML文档数据，那么结果是否会达到达人心动的效果呢？<br />
<br />
<br />
实现此技术需要解决的问题：<br />
<br />
1．&nbsp;&nbsp;从数据库取数据动态生成并写入XML文件<br />
<br />
2．&nbsp;&nbsp;利用URL传入XML文档名<br />
<br />
3．&nbsp;&nbsp;客户端使用JS解析URL取XML文档名然后使用AJAX载入文件，最后动态组织数据到页面中<br />
<br />
以上分析是小弟一些拙见，高手勿笑！小弟在想到这个方案时，便马上写了一个Demo测试了一下，程序采用的是Strut框架写的，完成功能就是以上三点的描述，不过为了测试方便，并未使用数据库，而是自己定义了用于构造XML文件的类手动输入的，程序打包的下载地址：<a href="http://download.csdn.net/user/rodgersnow" target="_blank">http://download.csdn.net/user/rodgersnow</a> 大家找到利用AJAX生成静态HTML的Demo就可以下载了<br />
<br />
<br />
本文转自：<a href="http://blog.csdn.net/noove_001/archive/2007/12/19/1953682.aspx" target="_blank">http://blog.csdn.net/noove_001/archive/2007/12/19/1953682.aspx</a></p>
<img src ="http://www.blogjava.net/szhswl/aggbug/174379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2008-01-10 17:56 <a href="http://www.blogjava.net/szhswl/articles/174379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>post请求方式发送数据</title><link>http://www.blogjava.net/szhswl/articles/170650.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Wed, 26 Dec 2007 09:37:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/170650.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/170650.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/170650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/170650.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/170650.html</trackback:ping><description><![CDATA[private String postTest(HttpServletRequest request)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL url = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader in = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStreamReader isr = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream is = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpURLConnection huc = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer s = new StringBuffer(333);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url = new URL("http://www.v246.net/info.jsp");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; huc = (HttpURLConnection)url.openConnection();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; huc.setRequestMethod("POST");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; huc.setDoOutput(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String param = "type=domain&amp;site=" + request.getServerName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; huc.getOutputStream().write(param.getBytes());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; huc.getOutputStream().flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; huc.getOutputStream().close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is = huc.getInputStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isr = new InputStreamReader(is);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in = new BufferedReader(isr);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String line = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while((line = in.readLine()) != null) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.append(line);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(Exception e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; huc.disconnect();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isr.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(Exception e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return s.toString();;<br />
&nbsp;&nbsp;&nbsp; } 
<img src ="http://www.blogjava.net/szhswl/aggbug/170650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-26 17:37 <a href="http://www.blogjava.net/szhswl/articles/170650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web webservice</title><link>http://www.blogjava.net/szhswl/articles/168923.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Thu, 20 Dec 2007 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/168923.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/168923.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/168923.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/168923.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/168923.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/szhswl/articles/168923.html'>阅读全文</a><img src ="http://www.blogjava.net/szhswl/aggbug/168923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-20 09:22 <a href="http://www.blogjava.net/szhswl/articles/168923.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试缓存对象</title><link>http://www.blogjava.net/szhswl/articles/166792.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Mon, 10 Dec 2007 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/166792.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/166792.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/166792.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/166792.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/166792.html</trackback:ping><description><![CDATA[<p>一个测试程序来估算1M内存能够缓存多少个对象，代码如下：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;testSpike(){<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">　print(</span><span style="color: #000000">"</span><span style="color: #000000">最大的内存为：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;Runtime.getRuntime().maxMemory()</span><span style="color: #000000">/</span><span style="color: #000000">1024</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">　print(</span><span style="color: #000000">"</span><span style="color: #000000">总的内存为：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;Runtime.getRuntime().totalMemory()</span><span style="color: #000000">/</span><span style="color: #000000">1024</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">　print(</span><span style="color: #000000">"</span><span style="color: #000000">==================================</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">　</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;currMemory</span><span style="color: #000000">=</span><span style="color: #000000">Runtime.getRuntime().freeMemory();<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">　print(</span><span style="color: #000000">"</span><span style="color: #000000">目前可用的内存为：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;currMemory</span><span style="color: #000000">/</span><span style="color: #000000">1024</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">　print(</span><span style="color: #000000">"</span><span style="color: #000000">==================================</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">　Map&nbsp;cache</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HashMap();<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">　</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">500000</span><span style="color: #000000">;&nbsp;i&nbsp;)&nbsp;{<br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">　　MockBean&nbsp;bean</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MockBean();<br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">　　bean.setId(i);<br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">　　bean.setName(</span><span style="color: #000000">"</span><span style="color: #000000">jerry</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;i);<br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">　　bean.setValue(i&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">jerry</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">　　cache.put(String.valueOf(i),&nbsp;bean);<br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">　　</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;tempMemory</span><span style="color: #000000">=</span><span style="color: #000000">Runtime.getRuntime().freeMemory();<br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">　　</span><span style="color: #0000ff">if</span><span style="color: #000000">((currMemory</span><span style="color: #000000">-</span><span style="color: #000000">tempMemory)</span><span style="color: #000000">/</span><span style="color: #000000">1024</span><span style="color: #000000">==</span><span style="color: #000000">1024</span><span style="color: #000000">){<br />
</span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">　　　print(</span><span style="color: #000000">"</span><span style="color: #000000">此时可用的内存为：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;tempMemory</span><span style="color: #000000">/</span><span style="color: #000000">1024</span><span style="color: #000000">);<br />
</span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">　　　print(</span><span style="color: #000000">"</span><span style="color: #000000">此时缓存了：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">个对象</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">　　　</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
</span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">　　}<br />
</span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">　}<br />
</span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">　print(</span><span style="color: #000000">"</span><span style="color: #000000">==================================</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">　cache.clear();<br />
</span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">　</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;tempMemory</span><span style="color: #000000">=</span><span style="color: #000000">Runtime.getRuntime().freeMemory();<br />
</span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">　print(</span><span style="color: #000000">"</span><span style="color: #000000">目前可用的内存为：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;tempMemory</span><span style="color: #000000">/</span><span style="color: #000000">1024</span><span style="color: #000000">);<br />
</span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">　print(</span><span style="color: #000000">"</span><span style="color: #000000">消耗的内存为：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;(currMemory</span><span style="color: #000000">-</span><span style="color: #000000">tempMemory)</span><span style="color: #000000">/</span><span style="color: #000000">1024</span><span style="color: #000000">);<br />
</span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">　print(</span><span style="color: #000000">"</span><span style="color: #000000">==================================</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">　Runtime.getRuntime().gc();<br />
</span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">　tempMemory</span><span style="color: #000000">=</span><span style="color: #000000">Runtime.getRuntime().freeMemory();<br />
</span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">　print(</span><span style="color: #000000">"</span><span style="color: #000000">目前可用的内存为：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;tempMemory</span><span style="color: #000000">/</span><span style="color: #000000">1024</span><span style="color: #000000">);<br />
</span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">　print(</span><span style="color: #000000">"</span><span style="color: #000000">消耗的内存为：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;(currMemory</span><span style="color: #000000">-</span><span style="color: #000000">tempMemory)</span><span style="color: #000000">/</span><span style="color: #000000">1024</span><span style="color: #000000">);<br />
</span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">}<br />
</span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">34</span>&nbsp;<span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;print(String&nbsp;msg){<br />
</span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000">　System.out.println(msg);<br />
</span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">}<br />
</span><span style="color: #008080">37</span>&nbsp;</div>
<p><br />
　　结果大概是1M内存可缓存大概4479个对象，同时可以看到，在cache.clear后内存并没有变化，因为gc是没那么及时的，这个时候显式的调用gc则会发现可用的内存量甚至比最初都多。</p>
<p>　　当然，这里只是个简单的测试，这里测试的也只是缓存一个非常简单的bean对象，缓存的对象消耗的内存大小还需要根据这个对象中具体的内容而定，比如当缓存的是blob类型的字段的时候，可想而知，这个时候消耗的内存量绝对是不同的。</p>
<p>　　这里只是建议大家在对系统性能做优化时最好根据需要缓存的内容做一个估算，设置好应用所需要的jvm的内存值，以便充分利用服务器的硬件资源。</p>
<img src ="http://www.blogjava.net/szhswl/aggbug/166792.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-10 21:04 <a href="http://www.blogjava.net/szhswl/articles/166792.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>String.split方法时要注意的问题</title><link>http://www.blogjava.net/szhswl/articles/165511.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Wed, 05 Dec 2007 06:38:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/165511.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/165511.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/165511.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/165511.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/165511.html</trackback:ping><description><![CDATA[<p><span style="font-family: SimSun"><font size="3">在使用String.split方法分隔字符串时，分隔符如果用到一些特殊字符，可能会得不到我们预期的结果。</font></span></p>
<p><span lang="EN-US" style="font-family: SimSun"><font size="2">public </font><a title="class in java.lang" href="file:///D:/jdk15/docs/api/java/lang/String.html"><font size="2">String</font></a><font size="2">[] <strong>split</strong>(</font><a title="class in java.lang" href="file:///D:/jdk15/docs/api/java/lang/String.html"><font size="2">String</font></a><font size="2">&nbsp;regex)</p>
<p></font></span><span lang="EN-US" style="font-family: SimSun"><font size="2"> Splits this string around matches of the given </font><a href="file:///D:/jdk15/docs/api/java/util/regex/Pattern.html#sum"><font size="2">regular expression</font></a><font size="2">. </p>
<p>&nbsp;</p>
</font></span>
<p><span style="font-size: 10.5pt; font-family: SimSun; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">参数<span lang="EN-US">regex是一个<!--startfragment --> regular-expression的匹配模式而不是一个简单的String，他对一些特殊的字符可能会出现你预想不到的结果，下面几个比较特殊字符的分隔例子：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.</span></span><span style="font-size: 10.5pt; font-family: SimSun; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><span lang="EN-US"><span style="font-size: 10.5pt; font-family: SimSun; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><span lang="EN-US">用竖线 | 分隔字符串，你将得不到预期的结果，用 . 也是一样。</span></span></p>
<p><span style="font-size: 10.5pt; font-family: SimSun; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><span lang="EN-US">&nbsp;&nbsp;&nbsp; String[] aa = "aaa|bbb|ccc".split("|"); //"aaa.bbb.ccc".split(".");<br />
&nbsp;&nbsp;&nbsp; //String[] aa = "aaa|bbb|ccc".split("\\|"); //"aaa.bbb.ccc".split("\\.");&nbsp;这样才能得到正确的结果</span></span></p>
<p><span style="font-size: 10.5pt; font-family: SimSun; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><span lang="EN-US">&nbsp;&nbsp;&nbsp; for (int i = 0 ; i &lt;aa.length ; i++ ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("--"+aa[i]); <br />
&nbsp;&nbsp;&nbsp; } </span></span></p>
</span></span>
<p><span style="font-size: 10.5pt; font-family: SimSun; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><span lang="EN-US"><span style="font-size: 10.5pt; font-family: SimSun; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;2.用竖 * 分隔字符串运行将抛出java.util.regex.PatternSyntaxException异常，用加号 + 也是如此。</span></span></span></span></p>
<p><span style="font-size: 10.5pt; font-family: SimSun; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><span lang="EN-US">&nbsp;&nbsp;&nbsp; String[] aa = "aaa*bbb*ccc".split("*");<br />
&nbsp;&nbsp;&nbsp; //String[] aa = "aaa|bbb|ccc".split("\\*"); 这样才能得到正确的结果&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span style="font-size: 10.5pt; font-family: SimSun; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><span lang="EN-US">&nbsp;&nbsp;&nbsp; for (int i = 0 ; i &lt;aa.length ; i++ ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("--"+aa[i]); <br />
&nbsp;&nbsp;&nbsp; } </span></span></p>
<p><span style="font-size: 10.5pt; font-family: SimSun; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;3.还有如果想在串中使用"\"字符，则也需要转义.首先要表达"aaaa\bbbb"这个串就应该用"aaaa\\bbbb",如果要分隔就应该这样才能得到正确结果：</span></span></p>
<p><span style="font-size: 10.5pt; font-family: SimSun; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;String[] aa = "aaa\\bbb\\bccc".split("<a>\\\\</a>");<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;此外还有别的一些特殊字符串的分隔都得转义，要特别注意。</span></span></p>
<img src ="http://www.blogjava.net/szhswl/aggbug/165511.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-05 14:38 <a href="http://www.blogjava.net/szhswl/articles/165511.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>提升JSP应用程序的七大绝招</title><link>http://www.blogjava.net/szhswl/articles/165200.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Tue, 04 Dec 2007 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/165200.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/165200.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/165200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/165200.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/165200.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;方法一：在servlet的init()方法中缓存数据<br />
<br />
　　当应用服务器初始化servlet实例之后，为客户端请求提供服务之前，它会调用这个servlet的init()方法。在一个servlet的生命周期中，init()方法只会被调用一次。通过在init()方法中缓存一些静态的数据或完成一些只需要执行一次的、耗时的操作，就可大大地提高系统性能。<br />
<br />
　　例如，通过在init()方法中建立一个JDBC连接池是一个最佳例子，假设我们是用jdbc2.0的DataSource接口来取得数据库连接，在通常的情况下，我们需要通过JNDI来取得具体的数据源。我们可以想象在一个具体的应用中，如果每次SQL请求都要执行一次JNDI查询的话，那系统性能将会急剧下降。解决方法是如下代码，它通过缓存DataSource，使得下一次SQL调用时仍然可以继续利用它：<br />
public class ControllerServlet extends HttpServlet<br />
{<br />
　private javax.sql.DataSource testDS = null; <br />
　public void init(ServletConfig config) throws ServletException<br />
　{<br />
　　super.init(config); <br />
　　Context ctx = null;<br />
　　try<br />
　　{ <br />
　　　ctx = new InitialContext();<br />
　　　testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");<br />
　　}<br />
　　catch(NamingException ne)<br />
　　{<br />
　　　ne.printStackTrace(); <br />
　　}<br />
　　catch(Exception e)<br />
　　{<br />
　　　e.printStackTrace();<br />
　　}<br />
　}<br />
<br />
　public javax.sql.DataSource getTestDS()<br />
　{<br />
　　return testDS;<br />
　}<br />
　...<br />
　... <br />
}
<p><font face="verdana, arial, helvetica" size="2"><br />
</font></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;方法 2:禁止servlet和JSP 自动重载(auto-reloading)<br />
<br />
　　Servlet/JSP提供了一个实用的技术，即自动重载技术，它为开发人员提供了一个好的开发环境，当你改变servlet和JSP页面后而不必重启应用服务器。然而，这种技术在产品运行阶段对系统的资源是一个极大的损耗，因为它会给JSP引擎的类装载器(classloader)带来极大的负担。因此关闭自动重载功能对系统性能的提升是一个极大的帮助。<br />
<br />
　　方法 3: 不要滥用HttpSession <br />
<br />
　　在很多应用中，我们的程序需要保持客户端的状态，以便页面之间可以相互联系。但不幸的是由于HTTP具有天生无状态性，从而无法保存客户端的状态。因此一般的应用服务器都提供了session来保存客户的状态。在JSP应用服务器中，是通过HttpSession对像来实现session的功能的，但在方便的同时，它也给系统带来了不小的负担。因为每当你获得或更新session时，系统者要对它进行费时的序列化操作。你可以通过对HttpSession的以下几种处理方式来提升系统的性能：<br />
<br />
　　?如果没有必要，就应该关闭JSP页面中对HttpSession的缺省设置： 如果你没有明确指定的话，每个JSP页面都会缺省地创建一个HttpSession。如果你的JSP中不需要使用session的话，那可以通过如下的JSP页面指示符来禁止它：<br />
<br />
<br />
<br />
<br />
<br />
＜%@ page session="false"%＞ <br />
<br />
　　不要在HttpSession中存放大的数据对像：如果你在HttpSession中存放大的数据对像的话，每当对它进行读写时，应用服务器都将对其进行序列化，从而增加了系统的额外负担。你在HttpSession中存放的数据对像越大，那系统的性能就下降得越快。<br />
<br />
　　当你不需要HttpSession时，尽快地释放它：当你不再需要session时，你可以通过调用HttpSession.invalidate()方法来释放它。<br />
<br />
　　尽量将session的超时时间设得短一点：在JSP应用服务器中，有一个缺省的session的超时时间。当客户在这个时间之后没有进行任何操作的话，系统会将相关的session自动从内存中释放。超时时间设得越大，系统的性能就会越低，因此最好的方法就是尽量使得它的值保持在一个较低的水平。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;方法 4: 将页面输出进行压缩<br />
<br />
　　压缩是解决数据冗余的一个好的方法，特别是在网络带宽不够发达的今天。有的浏览器支持gzip(GNU zip)进行来对HTML文件进行压缩，这种方法可以戏剧性地减少HTML文件的下载时间。因此，如果你将servlet或JSP页面生成的HTML页面进行压缩的话，那用户就会觉得页面浏览速度会非常快。但不幸的是，不是所有的浏览器都支持gzip压缩，但你可以通过在你的程序中检查客户的浏览器是否支持它。下面就是关于这种方法实现的一个代码片段：<br />
<br />
<br />
<br />
<br />
<br />
public void doGet(HttpServletRequest request, HttpServletResponse response)<br />
throws IOException, ServletException <br />
{<br />
　OutputStream out = null<br />
　String encoding = request.getHeader("Accept-Encoding"); <br />
　if (encoding != null &amp;&amp; encoding.indexOf("gzip") != -1)<br />
　{<br />
　　request.setHeader("Content-Encoding" , "gzip");<br />
　　out = new GZIPOutputStream(request.getOutputStream());<br />
　}<br />
　else if (encoding != null &amp;&amp; encoding.indexOf("compress") != -1)<br />
　{<br />
　　request.setHeader("Content-Encoding" , "compress");<br />
　　out = new ZIPOutputStream(request.getOutputStream());<br />
　} <br />
　else<br />
　{<br />
　　out = request.getOutputStream();<br />
　}<br />
　...<br />
　... <br />
} <br />
<br />
　　方法 5: 使用线程池<br />
<br />
　　应用服务器缺省地为每个不同的客户端请求创建一个线程进行处理，并为它们分派service()方法，当service()方法调用完成后，与之相应的线程也随之撤消。由于创建和撤消线程会耗费一定的系统资源，这种缺省模式降低了系统的性能。但所幸的是我们可以通过创建一个线程池来改变这种状况。另外，我们还要为这个线程池设置一个最小线程数和一个最大线程数。在应用服务器启动时，它会创建数量等于最小线程数的一个线程池，当客户有请求时，相应地从池从取出一个线程来进行处理，当处理完成后，再将线程重新放入到池中。如果池中的线程不够地话，系统会自动地增加池中线程的数量，但总量不能超过最大线程数。通过使用线程池，当客户端请求急剧增加时，系统的负载就会呈现的平滑的上升曲线，从而提高的系统的可伸缩性。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;方法 6: 选择正确的页面包含机制<br />
<br />
　　在JSP中有两种方法可以用来包含另一个页面：1、使用include指示符(＜%@ includee file=&#8221;test.jsp&#8221; %＞)。2、使用jsp指示符(＜jsp:includee page=&#8221;test.jsp&#8221; flush=&#8221;true&#8221;/＞)。在实际中我发现，如果使用第一种方法的话，可以使得系统性能更高。<br />
<br />
　　方法 7:正确地确定javabean的生命周期<br />
<br />
　　JSP的一个强大的地方就是对javabean的支持。通过在JSP页面中使用＜jsp:useBean＞标签，可以将javabean直接插入到一个JSP页面中。它的使用方法如下：<br />
<br />
<br />
<br />
<br />
<br />
＜jsp:useBean id="name" scope="page|request|session|application" class=<br />
"package.className" type="typeName"＞<br />
＜/jsp:useBean＞ <br />
<br />
　　其中scope属性指出了这个bean的生命周期。缺省的生命周期为page。如果你没有正确地选择bean的生命周期的话，它将影响系统的性能。<br />
<br />
　　举例来说，如果你只想在一次请求中使用某个bean，但你却将这个bean的生命周期设置成了session，那当这次请求结束后，这个bean将仍然保留在内存中，除非session超时或用户关闭浏览器。这样会耗费一定的内存，并无谓的增加了JVM垃圾收集器的工作量。因此为bean设置正确的生命周期，并在bean的使命结束后尽快地清理它们，会使用系统性能有一个提高。<br />
<br />
其它一些有用的方法 <br />
<br />
　　在字符串连接操作中尽量不使用&#8220;＋&#8221;操作符：在java编程中，我们常常使用&#8220;＋&#8221;操作符来将几个字符串连接起来，但你或许从来没有想到过它居然会对系统性能造成影响吧？由于字符串是常量，因此JVM会产生一些临时的对像。你使用的&#8220;＋&#8221;越多，生成的临时对像就越多，这样也会给系统性能带来一些影响。解决的方法是用StringBuffer对像来代替&#8220;＋&#8221;操作符。<br />
<br />
　　避免使用System.out.println()方法：由于System.out.println()是一种同步调用，即在调用它时，磁盘I/O操作必须等待它的完成，因此我们要尽量避免对它的调用。但我们在调试程序时它又是一个必不可少的方便工具，为了解决这个矛盾，我建议你最好使用Log4j工具(<a href="http://jakarta.apache.org/" target="_blank">http://jakarta.apache.org/</a> )，它既可以方便调试，而不会产生System.out.println()这样的方法。<br />
<br />
　　ServletOutputStream 与 PrintWriter的权衡:使用PrintWriter可能会带来一些小的开销，因为它将所有的原始输出都转换为字符流来输出，因此如果使用它来作为页面输出的话，系统要负担一个转换过程。而使用ServletOutputStream作为页面输出的话就不存在一个问题，但它是以二进制进行输出的。因此在实际应用中要权衡两者的利弊。<br />
<br />
　　总结<br />
<br />
　　本文的目的是通过对servlet和JSP的一些调优技术来极大地提高你的应用程序的性能，并因此提升整个J2EE应用的性能。通过这些调优技术，你可以发现其实并不是某种技术平台（比如J2EE和.NET之争）决定了你的应用程序的性能，重要是你要对这种平台有一个较为深入的了解，这样你才能从根本上对自己的应用程序做一个优化！
<img src ="http://www.blogjava.net/szhswl/aggbug/165200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-04 15:10 <a href="http://www.blogjava.net/szhswl/articles/165200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Acegi＋hibernate 动态实现基于角色的权限管理</title><link>http://www.blogjava.net/szhswl/articles/165002.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Mon, 03 Dec 2007 12:37:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/165002.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/165002.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/165002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/165002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/165002.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自:http://www.cublog.cn/u/11905/showart_162625.html最近在做项目遇到了权限管理，用户要求可以自己建立不同的角色对系统的资源进行控制， 不同的用户有不同的角色，又恰恰框架中用到了struts＋spring＋hibernate，要求在web层调用 业务逻辑层 时不考虑权限，web层可以控制用户的显示界面，逻辑层处理用户权限问题。 想来想去好...&nbsp;&nbsp;<a href='http://www.blogjava.net/szhswl/articles/165002.html'>阅读全文</a><img src ="http://www.blogjava.net/szhswl/aggbug/165002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-03 20:37 <a href="http://www.blogjava.net/szhswl/articles/165002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>日期</title><link>http://www.blogjava.net/szhswl/articles/164938.html</link><dc:creator>宋针还</dc:creator><author>宋针还</author><pubDate>Mon, 03 Dec 2007 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/szhswl/articles/164938.html</guid><wfw:comment>http://www.blogjava.net/szhswl/comments/164938.html</wfw:comment><comments>http://www.blogjava.net/szhswl/articles/164938.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/szhswl/comments/commentRss/164938.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/szhswl/services/trackbacks/164938.html</trackback:ping><description><![CDATA[<p>1. 怎样计算两个时间之间的间隔？ </p>
<p>间隔=date1.gettime()-date2.gettime();得出来的是毫秒数. <br />
除1000是秒,再除60是分,再除60是小时.............................. </p>
<p>记住java标准库中所有时间类都以此为基础转化的,只是他写好了一些 <br />
转化的方法给你用而已.但都离不开这个毫秒数为基础. </p>
<p>2. t=calendar.getinstance();m=t.get(t.month)+1;这里为什么要加一？ </p>
<p>在java语言里，date的month的取值范围是：0～11，与人们的自然表达上相差1。 </p>
<p><br />
3. 系统时间与当前日期的区别？ </p>
<p>系统时间确切的说应该是 <br />
system.currenttimemillis(); <br />
new date()是当前日期,虽然它gettime();和system.currenttimemillis(); <br />
一样,但system.currenttimemillis(); </p>
<p><br />
4. 如何计算两个日期的天数差值？ </p>
<p>long begintime = begindate.gettime(); <br />
long endtime2 = enddate.gettime(); <br />
long betweendays = (long)((endtime - begintime) / (1000 * 60 * 60 *24) + 0.5); </p>
<p>5. 如何比较日期时间大小？ </p>
<p>第一种方法： <br />
use calendar object to compare <br />
java.util.calendar class can be used to compare date. in order to do this, <br />
you guy should parse that string into int year, month, day and construct a <br />
calendar object, and then do comparison. </p>
<p>below is a sample </p>
<p>stringtokenizer token = new stringtokenizer(your string,"-"); <br />
int year = integer.parseint(token.nexttoken()); <br />
int month = integer.parseint(token.nexttoken()); <br />
int day = integer.parseint(token.nexttoken()); <br />
calendar date = calendar.getinstance(); <br />
date.set(year,month,day); <br />
calendar today = calendar.getinstacne(); <br />
if(date.after(today)){ <br />
//...... <br />
} <br />
第二种方法 <br />
date nowdate=new date();//当前时间\r <br />
long nowtime=nowdate.gettime; <br />
long lasttime=usertime.longvalue();//以前的时间\r <br />
long time=nowtime-lasttime;//时间相减比较。 <br />
if(time&gt;(long)60000)//1分钟{} </p>
<p><br />
另外可用以下参考 <br />
用时间戳，date.gettime()可以把当前时间改成时间戳， <br />
用compareto(); <br />
用before(),after(),equals(); </p>
<p>6. 格式化日期的问题\r </p>
<p>目的： <br />
第一次求日期 <br />
java.text.simpledateformat formatter = new java.text.simpledateformat("yyyy-mm-dd"); <br />
string riqi=formatter.format(currenttime_1); <br />
第二次求时间\r <br />
java.text.dateformat format1 = new java.text.simpledateformat("hhmmss"); <br />
java.util.date currenttime_2 = new java.util.date(); <br />
string shijian=format1.format(currenttime_2); <br />
得到的结果是 <br />
2002-02-19和115324(11点53分24秒） </p>
<p>实现： <br />
java.text.simpledateformat formatter = new java.text.simpledateformat("yyyy-mm-dd-h-mm-ss"); <br />
java.util.date currenttime_1 = new java.util.date(); <br />
string str_date = formatter.format(currenttime_1); <br />
stringtokenizer token = new stringtokenizer(str_date,"-"); <br />
string year = token.nexttoken(); <br />
string month= token.nexttoken(); <br />
string day = token.nexttoken(); <br />
string hh = token.nexttoken(); <br />
string mm = token.nexttoken(); <br />
string ss = token.nexttoken(); <br />
string riqi=year+"年\\"+month+"月"+day+"日"+" "+hh+"点\\"+mm+"分"+ss+"秒\\"; <br />
string newdir=year+month+day; <br />
string wenjian = hh+mm+ss; </p>
<p>7. 怎么得到一个月的天数？ </p>
<p>java.util.calendar date = java.util.calendar.getinstance(); <br />
system.out.println(date.getactualmaximum(date.day_of_month)); <br />
</p>
<img src ="http://www.blogjava.net/szhswl/aggbug/164938.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/szhswl/" target="_blank">宋针还</a> 2007-12-03 17:16 <a href="http://www.blogjava.net/szhswl/articles/164938.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>