转自:http://blog.csdn.net/lushuaiyin/article/details/8691396

这个问题原本是 action向前台传json字符串时报的错。结果网上搜了一下,好多答案都很扯,终于找到一个靠谱的

 

无法显示 XML 页。 
无法查看使用 样式表的 XML 输入。请更正错误然后单击 刷新 按钮,或稍后重试。 


--------------------------------------------------------------------------------

文档的顶层无效。处理资源 'http://localhost:8080/dataSourceApp/TestServlet' 时出错。第 1 行,位置: 1 

success!
^


这是我在访问一个servlet时遇见的问题(上述内容在浏览器出现,后台正常)。

TestServlet

 1     package org.test;  
 2       
 3     import java.io.IOException;  
 4       
 5     import javax.servlet.ServletException;  
 6     import javax.servlet.http.HttpServlet;  
 7     import javax.servlet.http.HttpServletRequest;  
 8     import javax.servlet.http.HttpServletResponse;  
 9       
10     public class TestServlet extends HttpServlet {  
11           
12         private static final long serialVersionUID = 1L;  
13           
14         public void init()throws ServletException{  
15             System.out.println(TestServlet.class.getName()+" is inited");  
16         }  
17         public void doGet(HttpServletRequest req, HttpServletResponse resp)  
18                 throws ServletException, IOException {  
19             System.out.println("doGet");  
20             doPost(req, resp);  
21         }  
22       
23         public void doPost(HttpServletRequest req, HttpServletResponse resp)  
24                 throws ServletException, IOException {  
25             System.out.println("doPost");  
26               
27             //编码设置  
28             resp.setContentType("text/xml");  
29             resp.setHeader("Cache-Control", "no-cache");  
30             resp.setCharacterEncoding("UTF-8");  
31               
32             resp.getWriter().println("success!");  
33         }  
34           
35           
36     }  

从错误内容可以看出,无法显示 XML 页,为什么会有xml呢?
可见,返回的内容当做xml处理了,而且是个错的xml。
看看servlet源码,很容易找到出错的地方:resp.setContentType("text/xml");
为了证明确实是这个地方引起的错误,我们这样改:
resp.setContentType("text/xml");
resp.getWriter().println("<?xml version=\"1.0\" encoding=\"UTF-8\"?><a>success!</a>");
结果,页面显示是:

所以这个错误原因就是返回内容设置的不对,如果我们想返回html就社会自成
resp.setContentType("text/html");

再测试一把:

 1     public void doPost(HttpServletRequest req, HttpServletResponse resp)  
 2                 throws ServletException, IOException {  
 3             System.out.println("doPost");  
 4               
 5             //编码设置  
 6     //      resp.setContentType("text/xml");  
 7             resp.setContentType("text/html");  
 8             resp.setHeader("Cache-Control", "no-cache");  
 9             resp.setCharacterEncoding("UTF-8");  
10               
11             resp.getWriter().println("success!");  
12     //      resp.getWriter().println("<?xml version=\"1.0\" encoding=\"UTF-8\"?><a>success!</a>");  
13         }  

关于response.setContentType(MIME)的作用就不细说了,再做上传下载的功能时,
你必然会去查response.setContentType(MIME)以及MIME类型。
response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。