﻿<?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-樂於JAVA-文章分类-jsp</title><link>http://www.blogjava.net/HappyJava/category/28394.html</link><description>幸福人生(J2EE)</description><language>zh-cn</language><lastBuildDate>Fri, 11 Jan 2008 08:36:16 GMT</lastBuildDate><pubDate>Fri, 11 Jan 2008 08:36:16 GMT</pubDate><ttl>60</ttl><item><title>jsp 返回上一页</title><link>http://www.blogjava.net/HappyJava/articles/174293.html</link><dc:creator>李建軍</dc:creator><author>李建軍</author><pubDate>Thu, 10 Jan 2008 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/HappyJava/articles/174293.html</guid><wfw:comment>http://www.blogjava.net/HappyJava/comments/174293.html</wfw:comment><comments>http://www.blogjava.net/HappyJava/articles/174293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/HappyJava/comments/commentRss/174293.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/HappyJava/services/trackbacks/174293.html</trackback:ping><description><![CDATA[&lt;%String&nbsp;ref&nbsp;=&nbsp;request.getHeader("REFERER");%&gt;<br />
<br />
&lt;input&nbsp;type="button"&nbsp;name="returngo"&nbsp;value="/blog/返回上一页"&nbsp;&nbsp;onclick="javascript:window.location='&lt;%=ref%&gt;'"&nbsp;&gt;<br />
<br />
<span style="color: #000000">1.</span> <br />
<span style="color: #000000">struts Ation中的用法：</span> <br />
<div align="left">Jsp获取上一页的url</div>
<br />
<div align="left">String url=request.getHeader("Referer");</div>
<br />
<div align="left">返回上一页</div>
<br />
<div align="left">mapping.findForward(url);</div>
<br />
<br />
2. <br />
利用javascript <br />
<br />
public&nbsp; String jump( String jump) <br />
{ <br />
&nbsp; String url=null; <br />
&nbsp; <br />
&nbsp; if(jump=="back") <br />
&nbsp; { <br />
&nbsp; &nbsp; url="javascript:history.go(-1);\n";&nbsp; //返回上一页 <br />
&nbsp; } <br />
&nbsp; else if(jump=="home") <br />
&nbsp; { <br />
&nbsp; url="javascript:window.location.href='index.jsp';\n";&nbsp; //返回首页 <br />
&nbsp; } <br />
&nbsp; else if(jump=="") <br />
&nbsp; { <br />
&nbsp; url=""; <br />
&nbsp; } <br />
&nbsp; else <br />
&nbsp; { <br />
&nbsp; url="javascript:window.location.href='"+jump+"';\n";&nbsp; &nbsp; &nbsp; &nbsp; /返回指定页 <br />
&nbsp; } <br />
&nbsp; String script_start="&lt;script language=\"javascript\"&gt;\n";&nbsp; <br />
&nbsp; String script_end="&lt;/script&gt;"; <br />
&nbsp; String go=script_start+url+script_end; <br />
&nbsp; return go; <br />
} <br />
<br />
<br />
在Ation中用法<br />
&nbsp; &nbsp; &nbsp; &nbsp; response.setContentType("text/html; charset=UTF-8");<br />
&nbsp; &nbsp; &nbsp; &nbsp; response.setHeader("Cache-Control", "no-cache");<br />
&nbsp; &nbsp; &nbsp; &nbsp; PrintWriter out = response.getWriter();<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; String jump = ju.jump("home");<br />
&nbsp; &nbsp; &nbsp; &nbsp; out.println(jump);
<img src ="http://www.blogjava.net/HappyJava/aggbug/174293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/HappyJava/" target="_blank">李建軍</a> 2008-01-10 14:56 <a href="http://www.blogjava.net/HappyJava/articles/174293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中文乱码问题解决心得</title><link>http://www.blogjava.net/HappyJava/articles/174272.html</link><dc:creator>李建軍</dc:creator><author>李建軍</author><pubDate>Thu, 10 Jan 2008 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/HappyJava/articles/174272.html</guid><wfw:comment>http://www.blogjava.net/HappyJava/comments/174272.html</wfw:comment><comments>http://www.blogjava.net/HappyJava/articles/174272.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/HappyJava/comments/commentRss/174272.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/HappyJava/services/trackbacks/174272.html</trackback:ping><description><![CDATA[<p>自从接触Java和JSP以来，就不断与Java的中文乱码问题打交道，现在终于得到了彻底的解决，现将我们的解决心得与大家共享。</p>
<p><strong>一、Java中文问题的由来</strong> </p>
<p>Java的内核和class文件是基于unicode的，这使Java程序具有良好的跨平台性，但也带来了一些中文乱码问题的麻烦。原因主要有两方面，Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。</p>
<p>首 先Java（包括JSP）源文件中很可能包含有中文，而Java和JSP源文件的保存方式是基于字节流的，如果Java和JSP编译成class文件过程 中，使用的编码方式与源文件的编码不一致，就会出现乱码。基于这种乱码，建议在Java文件中尽量不要写中文（注释部分不参与编译，写中文没关系），如果 必须写的话，尽量手动带参数－ecoding GBK或－ecoding gb2312编译；对于JSP，在文件头加上&lt;%@ page contentType="text/html;charset=GBK"%&gt;或&lt;%@ page contentType="text/html;charset=gb2312"%&gt;基本上就能解决这类乱码问题。</p>
<p>本文要重点讨论的是第二类乱码，即Java程序与其他存储媒介交互时产生的乱码。很多存储媒介，如数据库，文件，流等的存储方式都是基于字节流的，Java程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换，具体情况如下：</p>
<p>从页面form提交数据到java程序 byte－&gt;char<br />
从java程序到页面显示 char—&gt;byte</p>
<p>从数据库到java程序 byte—&gt;char<br />
从java程序到数据库 char—&gt;byte</p>
<p>从文件到java程序 byte－&gt;char<br />
从java程序到文件 char－&gt;byte</p>
<p>从流到java程序 byte－&gt;char<br />
从java程序到流 char－&gt;byte</p>
<p>如果在以上转换过程中使用的编码方式与字节原有的编码不一致，很可能就会出现乱码。</p>
<p><strong>二、解决方法</strong> <br />
<br />
前面已经提到了Java程序与其他媒介交互时字符和字节的转换过程，如果这些转换过程中容易产生乱码。解决这些乱码问题的关键在于确保转换时使用的编码方式与字节原有的编码方式保持一致，下面分别论述（Java或JSP自身产生的乱码请参看第一部分）。</p>
<p><strong>1、JSP与页面参数之间的乱码</strong> <br />
JSP 获取页面参数时一般采用系统默认的编码方式，如果页面参数的编码类型和系统默认的编码类型不一致，很可能就会出现乱码。解决这类乱码问题的基本方法是在页 面获取参数之前，强制指定request获取参数的编码方式：request.setCharacterEncoding("GBK")或 request.setCharacterEncoding("gb2312")。<br />
如果在JSP将变量输出到页面时出现了乱码，可以通过设置 response.setContentType("text/html;charset=GBK")或response.setContentType ("text/html;charset=gb2312")解决。<br />
如果不想在每个文件里都写这样两句话，更简洁的办法是使用Servlet规范中的过虑器指定编码，过滤器的在web.xml中的典型配置和主要代码如下：<br />
web.xml:</p>
<p>&lt;filter&gt;<br />
&lt;filter-name&gt;encoding&lt;/filter-name&gt;<br />
&lt;filter-class&gt;EncodingFilter&lt;/filter-class&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;encoding&lt;/param-name&gt;<br />
&lt;param-value&gt;GBK&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;/filter&gt;<br />
&lt;filter-mapping&gt;<br />
&lt;filter-name&gt;encoding&lt;/filter-name&gt;<br />
&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&lt;/filter-mapping&gt;</p>
<p>EncodingFilter.java:</p>
<p>import java.io.IOException;<br />
import javax.servlet.FilterChain;<br />
import javax.servlet.ServletRequest;<br />
import javax.servlet.ServletResponse;<br />
import javax.servlet.Filter;<br />
import javax.servlet.http.HttpServletRequest;<br />
import javax.servlet.http.HttpServletResponse;<br />
import javax.servlet.ServletException;<br />
import javax.servlet.FilterConfig;</p>
<p>public class EncodingFilter implements Filter{</p>
<p>protected FilterConfig filterConfig;<br />
private String targetEncoding="GBK";<br />
/**<br />
* 初始化过滤器，获得初始参数<br />
*/<br />
public void init(FilterConfig config)throws ServletException{<br />
this.filterConfig = config;<br />
this.targetEncoding = config.getInitParameter("encoding");<br />
}<br />
/**<br />
* 进行过滤处理，这个方法最重要，所有的过滤处理代码都在此实现<br />
*/<br />
public void doFilter(ServletRequest srequest,ServletResponse sresponse,FilterChain chain)throws IOException,ServletException{<br />
System.out.println("使用一下方法对请求进行编码：encoding="+targetEncoding);<br />
HttpServletRequest request=(HttpServletRequest)srequest;<br />
request.setCharacterEncoding(targetEncoding);<br />
//把处理权发送到下一个<br />
chain.doFilter(srequest,sresponse);<br />
}<br />
public void setFilterConfig(final FilterConfig filterConfig){<br />
this.filterConfig=filterConfig;<br />
}<br />
//销毁过滤器<br />
public void destroy(){<br />
this.filterConfig=null;<br />
}<br />
}</p>
<p><br />
<strong>2、Java与数据库之间的乱码</strong> <br />
大 部分数据库都支持以unicode编码方式，所以解决Java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据 库驱动自动支持unicode，如Microsoft的SQLServer驱动。其他大部分数据库驱动，可以在驱动的url参数中指定，如如mm的 mysql驱动：jdbc:mysql://localhost/WEBCLDB?useUnicode=true&amp; characterEncoding=GBK。</p>
<p><strong>3、Java与文件/流之间的乱码</strong> <br />
Java读写文件最常用的类是 FileInputStream/FileOutputStream和FileReader/FileWriter。其中FileInputStream 和FileOutputStream是基于字节流的，常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和 FileWriter，省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式，如果文件内容与系统编码方式不一致，可能会出现乱码。 在这种情况下，建议使用FileReader和FileWriter的父类： InputStreamReader/OutputStreamWriter，它们也是基于字符的，但在构造函数中可以指定编码类型： InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。 </p>
<p><strong>4、其他</strong> <br />
上 面提到的方法应该能解决大部分乱码问题，如果在其他地方还出现乱码，可能需要手动修改代码。解决Java乱码问题的关键在于在字节与字符的转换过程中，你 必须知道原来字节或转换后的字节的编码方式，转换时采用的编码必须与这个编码方式保持一致。我们以前使用Resin服务器，使用smartUpload组 件上传文件，上传文件同时传递的中文参数获取没有乱码问题。当在Linux中把Resin设置成服务后，上传文件同时的中文参数获取出现了乱码。这个问题 困扰了我们很久，后来我们分析smartUpload组件的源文件，因为文件上传采用的是字节流的方式，里面包含的参数名称和值也是字节流的方式传递的。 smartUpload组件读取字节流后再将参数名称和值从字节流中解析出来，问题就出现在smartUpload将字节流转换成字符串时采用了系统默认 的编码，而将Resin设置成服务后，系统默认的编码可能发生了改变，因此出现了乱码。后来，我们更改了smartUpload的源文件，增加了一个属性 charset和setCharset(String)方法，将upload()方法中提取参数语句：<br />
String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1 );<br />
改成了<br />
String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1, charset );<br />
终于解决了这个乱码问题。</p>
<img src ="http://www.blogjava.net/HappyJava/aggbug/174272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/HappyJava/" target="_blank">李建軍</a> 2008-01-10 14:03 <a href="http://www.blogjava.net/HappyJava/articles/174272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP报表打印的一种简单解决方案</title><link>http://www.blogjava.net/HappyJava/articles/174264.html</link><dc:creator>李建軍</dc:creator><author>李建軍</author><pubDate>Thu, 10 Jan 2008 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/HappyJava/articles/174264.html</guid><wfw:comment>http://www.blogjava.net/HappyJava/comments/174264.html</wfw:comment><comments>http://www.blogjava.net/HappyJava/articles/174264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/HappyJava/comments/commentRss/174264.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/HappyJava/services/trackbacks/174264.html</trackback:ping><description><![CDATA[<span class="t18">&nbsp;
<p>1. 在Word或Excel中<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u5236_u4F5C";KeyGate_ads.ShowGgAds(this,"_u5236_u4F5C",event)' style="border-right: 0px; padding-right: 0px; border-top: 0px; padding-left: 0px; font-weight: normal; padding-bottom: 0px; margin: 0px; border-left: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-bottom: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BEA7WobGFR4iuE4H-6wPfiIisAbv8-CPP89eNA8CNtwHwhA4QERgRIK2F0A0oFDgAUOORzcD______wFgnbHegdgFqgEKMjAwMDAzNzU0MbIBD3d3dy5rbm93c2t5LmNvbcgBAdoBImh0dHA6Ly93d3cua25vd3NreS5jb20vMzAyNDkwLmh0bWypAhkq_TIYfII-yALjtK4BqAMB6AO3BOgD9QI&amp;num=17&amp;adurl=http://www.microbuilding.net/page/product.asp&amp;client=ca-pub-5186439242807756");GgKwClickStat("制作","www.microbuilding.net","afc","2000037541");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u5236_u4F5C"'>制作</strong></nobr><nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u62A5_u8868";KeyGate_ads.ShowGgAds(this,"_u62A5_u8868",event)' style="border-right: 0px; padding-right: 0px; border-top: 0px; padding-left: 0px; font-weight: normal; padding-bottom: 0px; margin: 0px; border-left: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-bottom: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BvcK9obGFR4iuE4H-6wPfiIisAeLn6TiisaW3BcCNtwHgtg0QAhgCIK2F0A0oFDgAUO6d1Kf9_____wFgnbHegdgFoAGKubf-A6oBCjIwMDAwMzc1NDGyAQ93d3cua25vd3NreS5jb23IAQHaASJodHRwOi8vd3d3Lmtub3dza3kuY29tLzMwMjQ5MC5odG1sgAIBqQIZKv0yGHyCPqgDAegDtwToA_UC&amp;num=2&amp;adurl=http://www.report8000.com&amp;client=ca-pub-5186439242807756");GgKwClickStat("报表","www.report8000.com","afc","2000037541");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u62A5_u8868"'>报表</strong></nobr>的样式。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel的行高和列宽单位无法用mm或cm表示。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要计算。在1024*768下，1CM约为38像素。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以此为基准，可计算并控制报表的行列位置。</p>
<p><br />
2. 在Word中设置&#8220;<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u8868_u683C";KeyGate_ads.ShowGgAds(this,"_u8868_u683C",event)' style="border-right: 0px; padding-right: 0px; border-top: 0px; padding-left: 0px; font-weight: normal; padding-bottom: 0px; margin: 0px; border-left: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-bottom: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BvcK9obGFR4iuE4H-6wPfiIisAeLn6TiisaW3BcCNtwHgtg0QAhgCIK2F0A0oFDgAUO6d1Kf9_____wFgnbHegdgFoAGKubf-A6oBCjIwMDAwMzc1NDGyAQ93d3cua25vd3NreS5jb23IAQHaASJodHRwOi8vd3d3Lmtub3dza3kuY29tLzMwMjQ5MC5odG1sgAIBqQIZKv0yGHyCPqgDAegDtwToA_UC&amp;num=2&amp;adurl=http://www.report8000.com&amp;client=ca-pub-5186439242807756");GgKwClickStat("表格","www.report8000.com","afc","2000037541");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u8868_u683C"'>表格</strong></nobr>——<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u6807_u9898";KeyGate_ads.ShowGgAds(this,"_u6807_u9898",event)' style="border-right: 0px; padding-right: 0px; border-top: 0px; padding-left: 0px; font-weight: normal; padding-bottom: 0px; margin: 0px; border-left: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-bottom: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BEatZobGFR4iuE4H-6wPfiIisAYLh4jOqi--vBMCNtwGA0w4QARgBIK2F0A0oFDgAUNvogIb6_____wFgnbHegdgFqgEKMjAwMDAzNzU0MbIBD3d3dy5rbm93c2t5LmNvbcgBAdoBImh0dHA6Ly93d3cua25vd3NreS5jb20vMzAyNDkwLmh0bWyAAgGpAhkq_TIYfII-yAKy9fMDqAMB6AO3BOgD9QI&amp;num=1&amp;adurl=http://www.egrid2000.com&amp;client=ca-pub-5186439242807756");GgKwClickStat("标题","www.egrid2000.com","afc","2000037541");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u6807_u9898"'>标题</strong></nobr>行重复&#8221;。</p>
<p>&nbsp;&nbsp;&nbsp; 在Excel中设置&#8220;文件——页面设置——工作表——打印标题&#8221;。</p>
<p><br />
3. 另存为网页，改后缀名&#8220;htm&#8221;为&#8220;jsp&#8221;。</p>
<p><br />
4. Word报表文件头为：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;">%@page</a> contentType="application/msword;charset=GBK" language="java"%&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Excel报表文件头为：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;% @page&nbsp; contentType="application/vnd.ms-excel;charset=GBK" language="java"%&gt;</p>
<p><br />
5. 在文件头部分定义打印参数变量如下（以Excel为例）：</p>
<p>&lt;%&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp; //需要打印的记录条数<br />
&nbsp;&nbsp; int PrintRowCount=RowCount;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp; //每页打印的记录条数<br />
&nbsp;&nbsp; int PageRowCount=16;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp; //最后一页需要打印的空行的数目<br />
&nbsp;&nbsp; int LoopNum=PageRowCount-PrintRowCount%PageRowCount; </p>
<p>&nbsp;&nbsp; //打印区域的高度，其中2的意思是每页需要重复的标题行的数目<br />
&nbsp;&nbsp; int PrintAreaHeight=(PrintRowCount%PageRowCount==0)?PrintRowCount+2:PrintRowCount+LoopNum+2;</p>
<p>%&gt;</p>
<p><br />
6. 在&lt;style&gt;&lt;/style&gt;后，改动&lt;!--[if gte mso 9]与&lt;![endif]--&gt;<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u6807_u7B7E";KeyGate_ads.ShowGgAds(this,"_u6807_u7B7E",event)' style="border-right: 0px; padding-right: 0px; border-top: 0px; padding-left: 0px; font-weight: normal; padding-bottom: 0px; margin: 0px; border-left: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-bottom: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BVhwcobGFR4iuE4H-6wPfiIisAeuomS_zz_HUBMCNtwHwqisQCBgIIK2F0A0oFDgAUM2v1vb4_____wFgnbHegdgFqgEKMjAwMDAzNzU0MbIBD3d3dy5rbm93c2t5LmNvbcgBAdoBImh0dHA6Ly93d3cua25vd3NreS5jb20vMzAyNDkwLmh0bWyAAgGpAhkq_TIYfII-yALv3bwDqAMB6AO3BOgD9QI&amp;num=8&amp;adurl=http://www.limafw.com.cn&amp;client=ca-pub-5186439242807756");GgKwClickStat("标签","www.limafw.com.cn","afc","2000037541");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u6807_u7B7E"'>标签</strong></nobr>中的XML标签内容，主要是设置动态打印区域（以Excel为例）：</p>
<p>&nbsp;&nbsp;&nbsp; &lt;% </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; out.print(" ......<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;x:ExcelName&gt;"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;x:Name&gt;Print_Area&lt;/x:Name&gt;"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;x:SheetIndex&gt;1&lt;/x:SheetIndex&gt;"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;x:Formula&gt;=Sheet1!$A$1:$G$"+PrintAreaHeight+"&lt;/x:Formula&gt;"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;/x:ExcelName&gt;"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...... ");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; %&gt;</p>
<p><br />
7. JSP其他编码。</p>
<p>下面是主体循环打印部分（以Excel为例）：</p>
<p>&lt;%&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i=1;i&lt;=PrintRowCount; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.print("&lt;tr&gt;"&lt;td&gt;"+i+"&lt;/td&gt;&lt;/tr&gt;"); //有内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (LoopNum!=PageRowCount)&nbsp; //有空行则打印空行补齐最末一页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j=1;j&lt;=LoopNum; j++)<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;&nbsp;&nbsp;&nbsp; out.print("&lt;tr&gt;&lt;td&gt;　&lt;/td&gt;&lt;/tr&gt;");//无内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
%&gt;</p>
<p><br />
8. 测试并继续修改。</span></p>
<img src ="http://www.blogjava.net/HappyJava/aggbug/174264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/HappyJava/" target="_blank">李建軍</a> 2008-01-10 13:50 <a href="http://www.blogjava.net/HappyJava/articles/174264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何将网页数据输出为Excel或Word文件</title><link>http://www.blogjava.net/HappyJava/articles/174263.html</link><dc:creator>李建軍</dc:creator><author>李建軍</author><pubDate>Thu, 10 Jan 2008 05:47:00 GMT</pubDate><guid>http://www.blogjava.net/HappyJava/articles/174263.html</guid><wfw:comment>http://www.blogjava.net/HappyJava/comments/174263.html</wfw:comment><comments>http://www.blogjava.net/HappyJava/articles/174263.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/HappyJava/comments/commentRss/174263.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/HappyJava/services/trackbacks/174263.html</trackback:ping><description><![CDATA[<span class="t18">&nbsp;
<p>将一个JSP页面中的&lt;%@ page contentType="text/html; charset=GBK" language="java" %&gt;替换为</p>
<p>&lt;%@ page contentType="application/vnd.ms-excel;charset=GBK" language="java"%&gt; //Excel</p>
<p>或</p>
<p>&lt;%@ page contentType="application/vnd.ms-word;charset=GBK" language="java"%&gt; //Word</p>
<p>在页面开始<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u8F93_u51FA";KeyGate_ads.ShowGgAds(this,"_u8F93_u51FA",event)' style="border-right: 0px; padding-right: 0px; border-top: 0px; padding-left: 0px; font-weight: normal; padding-bottom: 0px; margin: 0px; border-left: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-bottom: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BXAIZH5iFR8GjBIqo6APqyPWYAbKI1DX6mfyRBMCNtwHgxQgQAhgCIK2F0A0oFDgAUKKduYf8_____wFgnbHegdgFqgEKMjAwMDAzNzU0MbIBD3d3dy5rbm93c2t5LmNvbcgBAdoBImh0dHA6Ly93d3cua25vd3NreS5jb20vMzQ0NzcyLmh0bWypAhkq_TIYfII-yALuypYDqAMB6AMf6APXAg&amp;num=2&amp;adurl=http://sina.allyes.com/main/adfclick%3Fdb%3Dsina%26bid%3D108430,142184,145441%26cid%3D0,0,0%26sid%3D134265%26advid%3D1039%26camid%3D18303%26show%3Dignore%26url%3Dhttp://my2008.sina.com.cn/blog/qinggan/index.shtml&amp;client=ca-pub-5186439242807756");GgKwClickStat("输出","my2008.Sina.com.cn","afc","2000037541");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u8F93_u51FA"'>输出</strong></nobr><nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u6570_u636E";KeyGate_ads.ShowGgAds(this,"_u6570_u636E",event)' style="border-right: 0px; padding-right: 0px; border-top: 0px; padding-left: 0px; font-weight: normal; padding-bottom: 0px; margin: 0px; border-left: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-bottom: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=B0T-mH5iFR8GjBIqo6APqyPWYAd2jmTzhwtSgA8CNtwGAxBMQCRgJIK2F0A0oFDgAUKbn6br-_____wFgnbHegdgFqgEKMjAwMDAzNzU0MbIBD3d3dy5rbm93c2t5LmNvbcgBAdoBImh0dHA6Ly93d3cua25vd3NreS5jb20vMzQ0NzcyLmh0bWypAhkq_TIYfII-yALRlN4DqAMB6AMf6APXAg&amp;num=9&amp;adurl=http://www.china-guigu.com/product/product_1.asp&amp;client=ca-pub-5186439242807756");GgKwClickStat("数据","www.china-guigu.com","afc","2000037541");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u6570_u636E"'>数据</strong></nobr>前中加入一行</p>
<p>&lt;%</p>
<p>response.setHeader("Content-disposition","attachment;filename=result.xls");//Excel</p>
<p>%&gt;</p>
<p>或</p>
<p>&lt;%</p>
<p>response.setHeader("Content-disposition","attachment;filename=result.doc");//Word</p>
<p>%&gt;</p>
<p>对页面中的其它部分的处理：</p>
<p>去掉导入的CSS文件（可以在页面中加入&lt;style type=&#8221;text/css&#8221;&gt;&lt;/style&gt;）</p>
<p>去掉所有的javascript或<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="VBScript";KeyGate_ads.ShowGgAds(this,"VBScript",event)' style="border-right: 0px; padding-right: 0px; border-top: 0px; padding-left: 0px; font-weight: normal; padding-bottom: 0px; margin: 0px; border-left: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-bottom: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BHaaTH5iFR8GjBIqo6APqyPWYAYzOjTikocCXA8CNtwHAlrECEAEYASCthdANKBQ4AFCi1MjW-P____8BYJ2x3oHYBaoBCjIwMDAwMzc1NDGyAQ93d3cua25vd3NreS5jb23IAQHaASJodHRwOi8vd3d3Lmtub3dza3kuY29tLzM0NDc3Mi5odG1sgAIBqQIDYatqgoNDPqgDAegDH-gD1wI&amp;num=1&amp;adurl=http://www.componentsource.co.jp/features/japanese/index.html&amp;client=ca-pub-5186439242807756");GgKwClickStat("VBScript","www.componentsource.co.jp","afc","2000037541");' onmouseout='isShowGg = false;InTextAds_GgLayer="VBScript"'>VBScript</strong></nobr></p>
<p>其它<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u4EE3_u7801";KeyGate_ads.ShowGgAds(this,"_u4EE3_u7801",event)' style="border-right: 0px; padding-right: 0px; border-top: 0px; padding-left: 0px; font-weight: normal; padding-bottom: 0px; margin: 0px; border-left: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-bottom: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BZnVVH5iFR8GjBIqo6APqyPWYAc63hyaa_r_1AsCNtwGQThAIGAggrYXQDSgUOABQr6LW4_v_____AWCdsd6B2AWgAfOav_8DqgEKMjAwMDAzNzU0MbIBD3d3dy5rbm93c2t5LmNvbcgBAdoBImh0dHA6Ly93d3cua25vd3NreS5jb20vMzQ0NzcyLmh0bWyoAwHoAx_oA9cC&amp;num=8&amp;adurl=http://jia-wo.com&amp;client=ca-pub-5186439242807756");GgKwClickStat("代码","jia-wo.com","afc","2000037541");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u4EE3_u7801"'>代码</strong></nobr>不需要更改</p>
</span>
<img src ="http://www.blogjava.net/HappyJava/aggbug/174263.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/HappyJava/" target="_blank">李建軍</a> 2008-01-10 13:47 <a href="http://www.blogjava.net/HappyJava/articles/174263.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp中文乱码问题 </title><link>http://www.blogjava.net/HappyJava/articles/174214.html</link><dc:creator>李建軍</dc:creator><author>李建軍</author><pubDate>Thu, 10 Jan 2008 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/HappyJava/articles/174214.html</guid><wfw:comment>http://www.blogjava.net/HappyJava/comments/174214.html</wfw:comment><comments>http://www.blogjava.net/HappyJava/articles/174214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/HappyJava/comments/commentRss/174214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/HappyJava/services/trackbacks/174214.html</trackback:ping><description><![CDATA[<p>关于jsp乱码问题的解决。</p>
<p>1 最基本的乱码问题。</p>
<p>这个乱码问题是最简单的乱码问题。一般新会出现。就是页面编码不一致导致的乱码。</p>
<p>&lt;%@ page language="java" pageEncoding="UTF-8"%&gt;</p>
<p>&lt;%@ page contentType="text/html;charset=iso8859-1"%&gt;</p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;</p>
<p>&lt;title&gt;中文问题&lt;/title&gt;</p>
<p>&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;</p>
<p>&nbsp; 我是个好人</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>三个地方的编码。</p>
<p>第一个地方的编码格式为jsp文件的存储格式。Eclipse会根据这个编码格式保存文件。并编译jsp文件，包括里面的汉字。</p>
<p>第二处编码为解码格式。因为存为UTF-8的文件被解码为iso8859-1，这样 如有中文肯定出乱码。也就是必须一致。而第二处所在的这一行，可以没有。缺省也是使用iso8859-1的编码格式。所以如果没有这一行的话，&#8220;我是个好人&#8221;也会出现乱码。必须一致才可以。</p>
<p>&nbsp; 第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话，这个编码格式没有关系。有的网页出现乱码，就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面，导致浏览器混淆了编码格式。出现了乱码。</p>
<p>2 表单使用Post方式提交后接收到的乱码问题</p>
<p>这个问题也是一个常见的问题。这个乱码也是tomcat的内部编码格式iso8859-1在捣乱，也就是说post提交时，如果没有设置提交的编码格式，则会以iso8859-1方式进行提交，接受的jsp却以utf-8的方式接受。导致乱码。既然这样的原因，下面有几种解决方式，并比较。</p>
<p>A 接受参数时进行编码转换</p>
<p>String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ； 这样的话，每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。</p>
<p>B 在请求页面上开始处，执行请求的编码代码， request.setCharacterEncoding("UTF-8")，把提交内容的字符集设为UTF－8。这样的话，接受此参数的页面就不必在转码了。直接使用</p>
<p>String str = request.getParameter("something")；即可得到汉字参数。但每页都需要执行这句话。这个方法也就对post提交的有效果，对于get提交和上传文件时的enctype="multipart/form-data"是无效的。稍后下面单独对这个两个的乱码情况再进行说明。</p>
<p>C 为了避免每页都要写request.setCharacterEncoding("UTF-8")，建议使用过滤器对所有jsp</p>
<p>&nbsp; 进行编码处理。这个网上有很多例子。请大家自己查阅。</p>
<p>3 表单get提交方式的乱码处理方式。</p>
<p>如果使用get方式提交中文，接受参数的页面也会出现乱码，这个乱码的原因也是tomcat的内部编码格式iso8859-1导致。Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码，编码后追加到url，导致接受页面得到的参数为乱码/、。</p>
<p>解决办法：</p>
<p>A 使用上例中的第一种方式，对接受到的字符进行解码，再转码。</p>
<p>B Get走的是url提交，而在进入url之前已经进行了iso8859-1的编码处理。要想影响这个编码则需要在server.xml的Connector节点增加useBodyEncodingForURI="true" </p>
<p>属性配置，即可控制tomcat对get方式的汉字编码方式，上面这个属性控制get提交也是用request.setCharacterEncoding("UTF-8")所设置的编码格式进行编码。所以自动编码为utf-8，接受页面正常接受就可以了。但我认为真正的编码过程是，tomcat又要根据</p>
<p>&lt;Connector port="8080" </p>
<p>maxThreads="150" minSpareThreads="25" maxSpareThreads="75" </p>
<p>enableLookups="false" redirectPort="8443" acceptCount="100" </p>
<p>debug="0" connectionTimeout="20000" useBodyEncodingForURI="true" </p>
<p>disableUploadTimeout="true" URIEncoding=&#8221;UTF-8&#8221;/&gt;</p>
<p>里面所设置的URIEncoding=&#8221;UTF-8&#8221;再进行一次编码，但是由于已经编码为utf-8，再编码也不会有变化了。如果是从url获取编码，接受页面则是根据URIEncoding=&#8221;UTF-8&#8221;来进行解码的。</p>
<p>4 上传文件时的乱码解决</p>
<p>&nbsp; 上传文件时，form表单设置的都是enctype="multipart/form-data"。这种方式以流方式提交文件。如果使用apach的上传组件，会发现有很多乱码想象。这是因为apach的先期commons-fileupload.jar有bug，取出汉字后进行解码，因为这种方式提交，编码又自动使用的是tomcat缺省编码格式iso-8859-1。但出现的乱码问题是： 句号，逗号，等特殊符号变成了乱码，汉字如果数量为奇数，则会出现乱码，偶数则解析正常。</p>
<p>&nbsp;&nbsp;&nbsp; 解决方式： 下载commons-fileupload-1.1.1.jar 这个版本的jar已经解决了这些bug。</p>
<p>但是取出内容时仍然需要对取出的字符进行从iso8859-1到utf-8转码。已经能得到正常所有汉字以及字符。</p>
<p>5 Java代码关于url请求，接受参数的乱码</p>
<p>url的编码格式，取决于上面所说的URIEncoding=&#8221;UTF-8&#8221;。 如果设定了这个编码格式，则意味着所有到url的汉字参数，都必须进行编码才可以。否则得到的汉字参数值都是乱码，例如</p>
<p>一个链接 Response.sendDerect（&#8220;/a.jsp?name=张大维&#8221;）；而在a.jsp里面直接使用</p>
<p>String name"）；得到的就是乱码。因为规定了必须是utf-8才可以，所以，这个转向应该这样写： </p>
<p>&nbsp;&nbsp;&nbsp; Response.sendDerect（&#8220;/a.jsp?name=URLEncode.encode(&#8220;张大维&#8221;,&#8221;utf-8&#8221;)；才可以。</p>
<p>如果不设置这个参数URIEncoding=&#8221;UTF-8&#8221;， 会怎么样呢? 不设置则就使用了缺省的编码格式iso8859-1。问题又出来了，第一就是参数值的个数如果是奇数个数，则就可以正常解析，如果使偶数个数，得到最后字符就是乱码。还有就是如果最后一个字符如果是英文，则就能正常解析，但中文的标点符号仍出现乱码。权宜之计，如果您的参数中没有中文标点符号，则可以在参数值最后加一个英文符号来解决乱码问题，得到参数后再去掉这个最后面的符号。也可以凑或使用。</p>
<p>6 脚本代码关于url请求，接受到的参数乱码</p>
<p>脚本中也会进行页面转向的控制，也会涉及到附带参数，并在接受页面解析这个参数的情况。如果这个汉字参数不进行URIEncoding=&#8221;UTF-8&#8221;所指定的编码处理，则接受页面接受到的汉字也是乱码。脚本处理编码比较麻烦，必须有相应的编码脚本对应文件，然后调用脚本中的方法对汉字进行编码即可。</p>
<p>7 关于jsp在MyEclipse中打开的乱码问题</p>
<p>对于一个已经存在的项目，Jsp文件的存储格式可能是utf-8。如果新安装的eclipse，则缺省打开使用的编码格式都是iso8859-1。所以导致jsp里面的汉字出现乱码。这个乱码比较容易解决，直接到eclipse3.1的偏好设置里面找到general-〉edidor，设置为您的文件打开编码为utf-8即可。Eclipse会自动重新以新的编码格式打开。汉字即可正常显示。</p>
<p>8 关于html页面在eclipse中打开出现乱码情况</p>
<p>由于大部分页面都是由dreamweaver制作，其存储格式跟eclipse的识别有差别导致。</p>
<p>一般这种情况，在eclipse中新建一个jsp，直接从dreamweaver复制页面内容粘贴到jsp即可。</p>
 <img src ="http://www.blogjava.net/HappyJava/aggbug/174214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/HappyJava/" target="_blank">李建軍</a> 2008-01-10 11:18 <a href="http://www.blogjava.net/HappyJava/articles/174214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>