下面是向客户端输出的一个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());
}
}
}

解决方案 »

  1.   

    在ie5下面请求该sevlet能正常显示!
    而ie6下面不能正常显示!ie提示你下载该文件~
    下载下来的内容就是处理正确的html页面的内容!可就是不能正确在浏览器里面及时显示!你说怪不怪!
      

  2.   

    问题出在这
    OutputStream out=response.getOutputStream();
    你输出的是Html,没必要用OutputStream,最好用Write作为out
    如果是为了适应输出Binary数据的要求,你也应该设置适当的header
    如res.setHeader("Content-Disposition", "inline");
    另外,你可以用service代替doGet和doPost同时存在的格局
      

  3.   

    可是我用Write作为out时,中文老是变成乱码!res.setHeader("Content-Disposition", "inline");
    是什么意思!我用的是tomcat4.03
      

  4.   

    用Write作为out,经我实验后还是出现同样的问题!
    也就是说问题不是出在这
    OutputStream out=response.getOutputStream();
    还有在ie5可以正确执行!!!!!
      

  5.   

    是不是ie6不支持java的缘故,而ie5是支持java的。
      

  6.   

    response.setContentType( "text/html; charset=GB2312" );
    关于中文问题的解决方案,论坛里有很多贴子,你可以查一下
    res.setHeader("Content-Disposition", "inline");
    是为了保证你向客户端发送的Stream不以附件下载形式打开