`
- 浏览:
166088 次
- 性别:
- 来自:
成都
-
JSP动态输出Excel及中文乱码的解决-JSP教程,Jsp/Servlet
最近在网上看到一个用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(" ");
out.print(" ");
//[ /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(" ");
//[ /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的输出内容。所以输出就正常了。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
通过以上方法,基本可以解决servlet和jsp在接收和显示中文时的乱码问题。但在实际开发中,可能还需要根据具体环境和需求进行调整。了解这些知识点,对于Java Web开发者来说是非常必要的,能够提高项目的稳定性和用户...
### Servlet及JSP解决中文乱码问题 #### 一、引言 在Web开发中,中文乱码问题一直是困扰开发者的一大难题。特别是在使用Java技术栈(如Servlet与JSP)进行开发时,如果处理不当,很容易出现中文字符显示乱码的情况...
### 解决JSP+Servlet开发中的中文乱码问题 #### 概述 在基于JSP(Java Server Pages)和Servlet技术的Java Web应用开发过程中,中文乱码问题一直是困扰开发者的一大难题。由于Java Web应用程序涉及多个组件之间的...
jsp+servlet+mysql乱码解决方案是指在使用jsp+servlet+mysql开发web应用程序时,如何解决中文乱码问题的解决方案。该方案通过设置每个页面的编码格式为utf-8,控制器servlet中的请求编码格式为utf-8,数据库连接url...
本文将围绕“JSP-Servlet中的汉字编码问题”这一主题展开讨论,通过对相关知识点的深入剖析,帮助读者理解JSP/Servlet环境中汉字编码可能出现的问题及解决方案。 #### 二、基础知识回顾 1. **字符编码**:字符编码...
jsp 传参 servlet 接收中文乱码问题的解决方法 jsp 传参 servlet 接收中文乱码问题是一个经常遇到的问题,特别是在使用 Hibernate+Servlet 框架时。当我们在 jsp 页面传参到 servlet 时,中文字符经常会出现乱码...
- **处理中文问题**: 解决在编码和输出过程中可能出现的中文乱码问题。 - **处理表单数据**: 学习如何从HTML表单获取用户输入并进行处理。 - **读取HTTP请求头**: 访问和分析HTTP请求中的头部信息,以满足特定需求。...
### J2EE与动态网页开发基础 #### 一、J2EE概述 - **概念**:J2EE(Java 2 Platform, Enterprise Edition)是一种基于Java的平台标准,旨在为多层分布式网络应用提供标准化解决方案。 - **架构**:从客户端/服务器...
本文将深入探讨JSP乱码的原因及其解决方案,帮助开发者有效地处理这类问题。 ### 1. JSP乱码的成因 - **字符集设置不一致**:JSP文件、HTML页面、HTTP头、Servlet输出以及数据库存储等环节的字符集设置不一致,...
本文将深入探讨JSP和Servlet中文乱码问题的根源、解决方案以及预防策略。 ### JSP和Servlet中的中文乱码问题根源 中文乱码问题通常源于字符编码不一致或配置错误。在Web应用中,数据流经多个环节,包括客户端...
### javaweb servlet(jsp)的乱码问题原理及解决 #### HTTP协议的基本理解与乱码问题背景 HTTP协议作为互联网应用中最为广泛使用的通信协议之一,它定义了客户端和服务端之间的交互规则。HTTP请求主要分为GET和...
jsp 用过滤器解决中文乱码问题的方法 jsp(JavaServer Pages)是一种广泛应用于Web开发的技术,但是在实际开发中,我们经常会遇到中文乱码问题。为了解决这个问题,我们可以使用jsp过滤器来实现编码设置。我今天要...
### 动态网页(JSP+Servlet)教程知识点详解 #### 一、J2EE简介 **1.1 简介** J2EE (Java 2 Platform, Enterprise Edition) 是一个由 Sun Microsystems 提出的标准平台,专为开发企业级应用程序而设计。它提供了一...
文档《JSP各种乱码的处理(一).doc》和《JSP各种乱码的处理(二).doc》中可能详细列举了各种JSP乱码问题的实例及解决方法,包括但不限于文件上传、读取流、数据库操作等方面,建议参考学习,以便更全面地理解并解决...
标题中的“jspSmartUpload上传中文文件名乱码问题”是一个常见的技术挑战,特别是在处理Web应用程序时,特别是那些涉及用户上传文件的场景。JSP Smart Upload是早期流行的一个用于Java Web应用的文件上传组件,它...
本文将深入探讨“JSP乱码”的多种解决方案,并提供实用的解决策略。 1. **理解字符编码的基本概念** - 字符编码是计算机对文字进行存储和处理的标准,常见的有ASCII、GBK、UTF-8等。 - JSP页面默认使用ISO-8859-1...
"jsp乱码解决超酷,通过web.xml配置"这个标题表明,我们将通过配置`web.xml`文件来解决JSP页面中的乱码问题。下面将详细介绍这个过程以及相关的知识点。 首先,我们需要理解JSP乱码产生的原因。当用户通过表单提交...
本篇将详细讨论如何解决`jspsmartupload`中的中文乱码问题,并结合`struts1.2`框架提供实例。 首先,理解乱码产生的原因至关重要。乱码通常是由字符编码的不匹配导致的。在HTTP请求中,数据默认是以ISO-8859-1编码...
知识点:Servlet输出JS乱码问题解析与解决方案 一、Servlet与JS输出背景 Servlet是Java Web应用中的核心组件,主要用于处理客户端发送的HTTP请求,并生成响应。在Web开发中,Servlet经常被用来处理业务逻辑,然后...