亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP動態輸出Excel及中文亂碼的解決

2019-11-18 19:39:11
字體:
來源:轉載
供稿:網友

  最近在網上看到一個用java來操縱Excel的open source,在weblogic上試用了一下,覺得很不錯,特此向大家推薦一下。

  首先去http://www.andykhan.com/jexcelapi/index.html下載最新的JExcelApi,把jxl.jar置于你的classpath中。

  寫一個javaBean,利用JExcelApi來動態生成excel文檔,我這里寫一個最簡單的,示意性的。復雜的你可能還要查詢數據庫什么的。

///////////////////////////Test.java///////////////////////////////////////////
package com.jagie.test;
import java.io.*;
import jxl.*;
import jxl.write.*;
import jxl.format.*;
import java.util.*;
import java.awt.Color;

public class Test{
 public static void writeExcel(OutputStream os) throws Exception {
  jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);
  jxl.write.WritableSheet ws = wwb.createSheet("TestSheet1", 0);
  jxl.write.Label labelC = new jxl.write.Label(0, 0, "我愛中國");
  ws.addCell(labelC);
  jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL,20, WritableFont.BOLD, false,
  UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.GREEN);
  jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
  wcfFC.setBackground(jxl.format.Colour.RED);
  labelC = new jxl.write.Label(6, 0, "中國愛我",wcfFC);
  ws.addCell(labelC);
  //寫入Exel工作表
  wwb.write();
  //關閉Excel工作薄對象
  wwb.close();
 }

 //最好寫一個這樣的main方法來測試一下你的這個class是否寫好了。
 public static void main(String[] args)throws Exception{
  File f=new File("kk.xls");
  f.createNewFile();
  writeExcel(new FileOutputStream(f));
 }
}

  寫一個jsp,來利用Test這個javabean輸出excel文檔。

///////////////////////////test_excel.jsp//////////////////////////

%@page import="com.jagie.test.Test" %>
<%
 response.reset();
 response.setContentType("application/vnd.ms-excel");
 Test.writeExcel(response.getOutputStream());
%>

  這樣就大功告成了,你用ie訪問test_excel.jsp就能在ie里面打開動態生成的excel文檔了。一點亂碼也沒有。

  也許有人會問:response.reset();可不可以不要這一句,我的建議是一定要寫,除非你能保證response的buffer里面沒有別的東西。

  還有人也許會問:我在jsp開頭加上<%@page contentType="application/vnd.ms-excel;charset=GBK" %>這一句,去掉response.setContentType("application/vnd.ms-excel");行不行?回答這個問題很簡單,就是查看jsp服務器編譯jsp后生成的java代碼,如果改成這樣,我的welogic7編譯test_excel.jsp后生成的java文件的示意性代碼是這樣的:

public void _jspService(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) throws java.io.IOException,
javax.servlet.ServletException {

 // declare and set well-known variables:
 javax.servlet.ServletConfig config = getServletConfig();
 javax.servlet.ServletContext application = config.getServletContext();
 javax.servlet.jsp.tagext.Tag _activeTag = null;
 // variables for Tag extension PRotocol

 Object page = this;
 javax.servlet.jsp.JspWriter out;
 javax.servlet.jsp.PageContext pageContext =
 javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this,
 request, response, null, true, 8192, true);

 response.setHeader("Content-Type", "application/vnd.ms-excel; charset=GBK");
 out = pageContext.getOut();
 JspWriter _originalOut = out;

 javax.servlet.http.Httpsession session = request.getSession(true);

 try { // error page try block
  response.setContentType("application/vnd.ms-excel;charset=GBK");
  out.print("/r/n/r/n/r/n/r/n");
  out.print("/r/n");
  //[ /test_excel.jsp; Line: 6]
  response.reset(); //[ /test_excel.jsp; Line: 7]
  //response.setContentType("application/vnd.ms-excel");
  //[ /test_excel.jsp; Line: 8]
  Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp; Line: 9]
  } catch (Throwable __ee) {
   while (out != null && out != _originalOut) out = pageContext.popBody();
  ((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
 }

 //before final close brace...
}

  很明顯,屏蔽response.setContentType("application/vnd.ms-excel");后,在Test.writeExcel(response.getOutputStream());之前,response.reset(); 之后沒有設置response contenttype的正確類型,當然輸出為亂碼了。而正確輸出excel的jsp的編譯后源碼是這樣的:

public void _jspService(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) throws java.io.IOException,
javax.servlet.ServletException
{
 // declare and set well-known variables:
 javax.servlet.ServletConfig config = getServletConfig();
 javax.servlet.ServletContext application = config.getServletContext();
 javax.servlet.jsp.tagext.Tag _activeTag = null;
 // variables for Tag extension protocol

 Object page = this;
 javax.servlet.jsp.JspWriter out;
 javax.servlet.jsp.PageContext pageContext =
  javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);

 out = pageContext.getOut();
 JspWriter _originalOut = out;

 javax.servlet.http.HttpSession session = request.getSession(true);

 try { // error page try block
  out.print("/r/n");
  //[ /test_excel.jsp; Line: 2]
  response.reset(); //[ /test_excel.jsp; Line: 3]
  response.setContentType("application/vnd.ms-excel"); //[ /test_excel.jsp; Line: 4]
  Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp; Line: 5]
 } catch (Throwable __ee) {
  while (out != null && out != _originalOut) out = pageContext.popBody();
  ((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
 }

  //before final close brace...
}

  大家可以看到在response.reset();之后,Test.writeExcel(response.getOutputStream());之前正確的設置了response的輸出內容。所以輸出就正常了。

  最后,希望這篇文章能對你有所啟發,如有錯誤之處,敬請批評指正!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日产精品久久久一区二区福利| 8090成年在线看片午夜| 欧美日韩爱爱视频| 国产狼人综合免费视频| 亚洲精品视频二区| 久久国产精品免费视频| 国产精品久久久久秋霞鲁丝| 久久成人精品视频| 亚洲二区在线播放视频| 国产精品99久久久久久www| 久久不射电影网| 色妞色视频一区二区三区四区| 欧洲美女7788成人免费视频| 国产精品激情av在线播放| 亚洲欧洲在线播放| 久久久久久亚洲精品中文字幕| 91精品91久久久久久| 91精品国产自产在线观看永久| 成人精品在线观看| 日本成人黄色片| 亚洲国产精品字幕| 欧美成人亚洲成人| 亚洲欧美一区二区三区四区| 日产精品久久久一区二区福利| 亚洲第一偷拍网| 欧美激情亚洲自拍| 亚洲国产成人精品一区二区| 日韩不卡中文字幕| 中文字幕一区二区三区电影| 国产91精品视频在线观看| 成人精品视频在线| 在线观看欧美日韩| 97精品久久久中文字幕免费| 57pao成人国产永久免费| xxxx性欧美| 欧美电影第一页| 一区二区三区精品99久久| 日韩精品高清视频| 亚洲精选在线观看| 久久久久久久久久久91| 成人午夜一级二级三级| 亚洲色图第三页| 欧美肥老太性生活视频| 2019中文字幕在线观看| 日韩最新av在线| 成人黄色av网| 久久精品国产精品亚洲| 精品呦交小u女在线| 深夜精品寂寞黄网站在线观看| 高清视频欧美一级| 国产精品视频白浆免费视频| 亚洲图片欧美日产| 久久精品欧美视频| 555www成人网| 欧美极品在线播放| 亚洲欧洲国产一区| 亚洲国产精品久久久久秋霞不卡| 国产激情视频一区| 成人激情免费在线| 奇米一区二区三区四区久久| 亚洲国产精品99久久| 成人h视频在线| 亚洲成色777777女色窝| 日韩欧美一区二区在线| 91成人免费观看网站| 中文字幕欧美视频在线| 国产成人久久久精品一区| 中文字幕在线看视频国产欧美在线看完整| 欧美在线免费观看| 日韩精品视频在线| 成人黄色av播放免费| 欧美国产亚洲视频| 欧美久久精品午夜青青大伊人| 欧美高清在线观看| 亚洲自拍在线观看| 青青青国产精品一区二区| 久久影院资源网| 97视频免费观看| 97精品久久久| 国内精品视频在线| 日韩亚洲成人av在线| 亚洲人午夜精品| 97久久超碰福利国产精品…| 日韩av不卡在线| 欧美成人精品影院| 亚洲一级黄色av| 欧美在线视频在线播放完整版免费观看| 欧美成人午夜剧场免费观看| 国产日韩精品入口| 欧美激情影音先锋| 91精品国产99久久久久久| 日韩精品有码在线观看| 日韩一区在线视频| 97超级碰在线看视频免费在线看| zzjj国产精品一区二区| 欧美日韩另类视频| 国产玖玖精品视频| 国产香蕉精品视频一区二区三区| 97在线免费观看| 正在播放亚洲1区| 欧美xxxwww| 欧美在线一级va免费观看| 国产日韩在线亚洲字幕中文| 国内精品久久久久久久久| 久久久成人精品视频| www日韩欧美| 成人春色激情网| 精品国内产的精品视频在线观看| 亚洲自拍偷拍色图| 北条麻妃99精品青青久久| 欧美日韩国内自拍| 日韩亚洲欧美成人| 一本一道久久a久久精品逆3p| 久99九色视频在线观看| 成人性教育视频在线观看| 国产精品综合久久久| 尤物yw午夜国产精品视频明星| 欧美精品久久久久| 精品中文视频在线| 久久久综合免费视频| 欧美日韩国产精品一区二区不卡中文| 奇门遁甲1982国语版免费观看高清| 国产精品jizz在线观看麻豆| 国产成人欧美在线观看| 爽爽爽爽爽爽爽成人免费观看| 亚洲一级一级97网| 久久久久久久久久久久av| 亚洲人成伊人成综合网久久久| 精品久久久999| 日韩精品极品视频| 国产亚洲视频在线| 伊人久久大香线蕉av一区二区| 亚洲偷熟乱区亚洲香蕉av| 久久99国产精品自在自在app| 狠狠躁18三区二区一区| 国产精品欧美一区二区三区奶水| 欧美与欧洲交xxxx免费观看| 国产乱人伦真实精品视频| 久热国产精品视频| 国产精品高精视频免费| 欧美日韩精品中文字幕| 日韩欧美有码在线| 久久电影一区二区| 久久精品2019中文字幕| 亚洲免费视频一区二区| 国产精品激情av在线播放| 亚洲国产日韩欧美在线动漫| 国产精品高潮呻吟久久av黑人| 成人伊人精品色xxxx视频| 成人在线视频福利| 久久精品免费电影| 7777精品久久久久久| 日本久久亚洲电影| 国产亚洲激情在线| 欧美寡妇偷汉性猛交| 亚洲国产精品嫩草影院久久| 麻豆一区二区在线观看| 国产精品男女猛烈高潮激情| 成人淫片在线看| 日韩免费av一区二区| 欧日韩在线观看| 日韩国产高清污视频在线观看| 欧美精品在线极品| 懂色av影视一区二区三区|