下面是向客户端输出的一个servlet!package egold.index;import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.util.*;
import java.text.SimpleDateFormat;
import tools.servlet.*;
import tools.util.*;
/**
* 此处插入类型说明。
* 创建日期:(2001-10-12 16:21:39)
* @author:Administrator
*/
public class htm extends XMLServlet {
//得到servlet的当前路径
private String webServer="";
/**
* Process incoming HTTP GET requests
*
* @param request Object that encapsulates the request to the servlet
* @param response Object that encapsulates the response from the servlet
*/
public void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { performTask(request, response);}
/**
* Process incoming HTTP POST requests
*
* @param request Object that encapsulates the request to the servlet
* @param response Object that encapsulates the response from the servlet
*/
public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { performTask(request, response);}/**
* Process incoming requests for information
* 用xsl解析xml
* @param request Object that encapsulates the request to the servlet
* @param response Object that encapsulates the response from the servlet
*/
public void performTask(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
String rURL=request.getRequestURL().toString();
String rURI=request.getRequestURI();
webServer=rURL.substring(0,rURL.length()-rURI.length());
try {
//System.out.println(webServer);
//if(true) return;
//读取传递过来的xml文件的参数
String xmlFile=request.getParameter("xmlFile");
String xslFile=request.getParameter("xslFile");
if(xmlFile==null)xmlFile="/egold/xml/index.xml";
if(xslFile==null)xslFile="/egold/xsl/index.xsl";
//下面判断传递过来的参数是否时以"/"为开头,如果不是则自动给他加上"/"
if(!xmlFile.startsWith("/"))xmlFile="/"+xmlFile;
if(!xslFile.startsWith("/"))xslFile="/"+xslFile;
//设置字符集
//request.setCharacterEncoding("UTF-8");
OutputStream out=response.getOutputStream();
response.setContentType("text/html ;charset=GB2312");
////000000000000000000000000000000000
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
// Use a Transformer for output
TransformerFactory tFactory =
TransformerFactory.newInstance();
Document doc=null;
StreamSource stylesource=null;
Transformer transformer=null;
////000000000000000000000000000000000
try{
doc = builder.parse(webServer+xmlFile);
stylesource = new StreamSource(webServer+xslFile);
transformer = tFactory.newTransformer(stylesource);
}catch(Exception e){
P.rint("页面出现错误,没找到该文件"+e.getMessage());
//重新构造一个报错信息的框架xml
doc = builder.parse(webServer+"/egold/xml/index.xml");
stylesource=new StreamSource(webServer+"/egold/xsl/index.xsl");
transformer = tFactory.newTransformer(stylesource);
setInfo(request,"页面出现错误,没找到该文件:"+e.getMessage().substring(e.getMessage().lastIndexOf("/"))+".请检查路径和文件名是否正确!");
}
//
//读取登陆信息,根据登陆信息的值,来判断该登陆用户的身份
javax.servlet.http.HttpSession session = request.getSession(true);
String SUserType=(String)session.getAttribute("userType");
Element userType=doc.createElement("userType");
userType.setAttribute("value",SUserType);
//读取系统信息,将系统信息在页面显示出来
Element info=doc.createElement("info");
info.setAttribute("value",getInfo(request));
//System.out.println(getInfo(request));
doc.getDocumentElement().appendChild(userType);
doc.getDocumentElement().appendChild(info);
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(out);
transformer.transform(source, result);
//result = new StreamResult(System.out);
//transformer.transform(source, result);
}
catch(Throwable e)
{
// uncomment the following line when unexpected exceptions
// are occuring to aid in debugging the problem.
//theException.printStackTrace();
P.rint("页面出现错误,没找到该文件"+e.getMessage());
}
}
}
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.util.*;
import java.text.SimpleDateFormat;
import tools.servlet.*;
import tools.util.*;
/**
* 此处插入类型说明。
* 创建日期:(2001-10-12 16:21:39)
* @author:Administrator
*/
public class htm extends XMLServlet {
//得到servlet的当前路径
private String webServer="";
/**
* Process incoming HTTP GET requests
*
* @param request Object that encapsulates the request to the servlet
* @param response Object that encapsulates the response from the servlet
*/
public void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { performTask(request, response);}
/**
* Process incoming HTTP POST requests
*
* @param request Object that encapsulates the request to the servlet
* @param response Object that encapsulates the response from the servlet
*/
public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { performTask(request, response);}/**
* Process incoming requests for information
* 用xsl解析xml
* @param request Object that encapsulates the request to the servlet
* @param response Object that encapsulates the response from the servlet
*/
public void performTask(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
String rURL=request.getRequestURL().toString();
String rURI=request.getRequestURI();
webServer=rURL.substring(0,rURL.length()-rURI.length());
try {
//System.out.println(webServer);
//if(true) return;
//读取传递过来的xml文件的参数
String xmlFile=request.getParameter("xmlFile");
String xslFile=request.getParameter("xslFile");
if(xmlFile==null)xmlFile="/egold/xml/index.xml";
if(xslFile==null)xslFile="/egold/xsl/index.xsl";
//下面判断传递过来的参数是否时以"/"为开头,如果不是则自动给他加上"/"
if(!xmlFile.startsWith("/"))xmlFile="/"+xmlFile;
if(!xslFile.startsWith("/"))xslFile="/"+xslFile;
//设置字符集
//request.setCharacterEncoding("UTF-8");
OutputStream out=response.getOutputStream();
response.setContentType("text/html ;charset=GB2312");
////000000000000000000000000000000000
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
// Use a Transformer for output
TransformerFactory tFactory =
TransformerFactory.newInstance();
Document doc=null;
StreamSource stylesource=null;
Transformer transformer=null;
////000000000000000000000000000000000
try{
doc = builder.parse(webServer+xmlFile);
stylesource = new StreamSource(webServer+xslFile);
transformer = tFactory.newTransformer(stylesource);
}catch(Exception e){
P.rint("页面出现错误,没找到该文件"+e.getMessage());
//重新构造一个报错信息的框架xml
doc = builder.parse(webServer+"/egold/xml/index.xml");
stylesource=new StreamSource(webServer+"/egold/xsl/index.xsl");
transformer = tFactory.newTransformer(stylesource);
setInfo(request,"页面出现错误,没找到该文件:"+e.getMessage().substring(e.getMessage().lastIndexOf("/"))+".请检查路径和文件名是否正确!");
}
//
//读取登陆信息,根据登陆信息的值,来判断该登陆用户的身份
javax.servlet.http.HttpSession session = request.getSession(true);
String SUserType=(String)session.getAttribute("userType");
Element userType=doc.createElement("userType");
userType.setAttribute("value",SUserType);
//读取系统信息,将系统信息在页面显示出来
Element info=doc.createElement("info");
info.setAttribute("value",getInfo(request));
//System.out.println(getInfo(request));
doc.getDocumentElement().appendChild(userType);
doc.getDocumentElement().appendChild(info);
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(out);
transformer.transform(source, result);
//result = new StreamResult(System.out);
//transformer.transform(source, result);
}
catch(Throwable e)
{
// uncomment the following line when unexpected exceptions
// are occuring to aid in debugging the problem.
//theException.printStackTrace();
P.rint("页面出现错误,没找到该文件"+e.getMessage());
}
}
}
而ie6下面不能正常显示!ie提示你下载该文件~
下载下来的内容就是处理正确的html页面的内容!可就是不能正确在浏览器里面及时显示!你说怪不怪!
OutputStream out=response.getOutputStream();
你输出的是Html,没必要用OutputStream,最好用Write作为out
如果是为了适应输出Binary数据的要求,你也应该设置适当的header
如res.setHeader("Content-Disposition", "inline");
另外,你可以用service代替doGet和doPost同时存在的格局
是什么意思!我用的是tomcat4.03
也就是说问题不是出在这
OutputStream out=response.getOutputStream();
还有在ie5可以正确执行!!!!!
关于中文问题的解决方案,论坛里有很多贴子,你可以查一下
res.setHeader("Content-Disposition", "inline");
是为了保证你向客户端发送的Stream不以附件下载形式打开