服务器端:
开发工具NetBeans IDE 6.7.1; 服务器:GlassFish v2.1; JavaEE版本:JavaEE 5; 框架:Visual Web JavaServer Faces
1)写一个EJB3的Bean对数据库Microsoft SQL 2005的数据进行基本操作;
2)写一个JavaBean(类名:AjaxBeanInBom),注入1)中EJB,把数据解析成字符串;
3)建立一个VWP网页(Navigation.jsp),对应版本为jsp2.1和Servlet2.5,运用2)中Bean处理请求和响应,在该网页的头部嵌入以下代码:
                    <jsp:directive.page import="java.util.*,java.text.*"/>
                    <jsp:useBean class="ajaxbeantest.AjaxBeanInBom" id="ajaxbean" scope="page"/>
                    <jsp:scriptlet>
                        response.addHeader("Cache-Control", "no-cache");
                        response.addHeader("Expires", "Thu, 01 Jan 1970 00:00:01 GMT");
                        request.setCharacterEncoding("UTF-8");    //疑问1
                        String date1=null;
                        date1=(String)request.getParameter("method");
                        if(date1!=null){
                                String mystr=null;
                                ajaxbean.setRequest(request);
                                mystr=ajaxbean.getResponseXML();
                                System.out.println(mystr);
                                response.setContentType("text/html;charset=UTF-8");
                                response.getWriter().print(mystr);
                                response.getWriter().close();
                        }
                    </jsp:scriptlet>
客户端:
IE浏览器,利用javascript和ajax操作页面内容
4)采用post方式发送请求和获取响应,关键代码如下:
function accessdb_S(jspname,sSQLobj){   //select rows
    var requestString;
    //注明:因不影响阅读,中间requestString的具体赋值舍去
     createXMLHttpRequest();
xmlHttp.open("POST", jspname,false);
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
xmlHttp.send(requestString);  
}function handleStateChange() {
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            alert(xmlHttp.status);
            alert(xmlHttp.responseText);    //疑问2
        }
    }
}问题:
疑问1):服务器端报错:PWC4011:由于已读取请求参数或已调用 ServletRequest.getReader(),因此无法将请求字符编码从上下文 /fuBom 设置为 UTF-8;
疑问2):由System.out.println(mystr)可以查看到服务器输出自己预期想要的字符串:
0||-1||Tree Example||www.baidu.com$$1||0||节点配置||treeNodeConfig.jsp$$2||1||新浪||www.sina.com$$3||0||搜狐||www.sohu.com$$4||1||微软||www.microsoft.com$$5||2||雅虎||www.yahoo.com
但是在客户端由alert(xmlHttp.responseText)查看时,在该字符串前却加上了有关html的代码,详细如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wairole="http://www.w3.org/2005/01/wai-rdf/GUIRoleTaxonomy#" xmlns:waistate="http://www.w3.org/2005/07/aaa">
<head>
<title></title><script type="text/javascript">var webui_suntheme4_2={"webuiJsfx":false,"webuiAll":false,"theme":{"locale":"zh-cn"},"ajax":{"isJsfx":true},"isDebug":false,"isStyleSheet":true,"parseOnLoad":true};</script><script type="text/javascript" src="/fuBom/theme/com/sun/webui/jsf/suntheme4_2-080320/javascript/bootstrap.js"></script><link id="link1" rel="stylesheet" type="text/css" href="/fuBom/resources/stylesheet.css" />
<link id="link2" rel="stylesheet" type="text/css" href="/fuBom/resources/dtree.css" />
<script id="script1" type="text/javascript" src="/fuBom/PublicJS_justforbom.js"></script>
<script id="script2" type="text/javascript" src="/fuBom/ajax_dtree.js"></script>
<script id="script3" type="text/javascript" src="/fuBom/createDtree.js"></script>
</head><body id="body1" style="-rave-layout: grid" onload="refreshDtree();return false;"><div id="mydtree" class="dtree"></div><form id="form1" class="form" method="post" action="/fuBom/faces/Navigation.jsp" enctype="application/x-www-form-urlencoded">
<input id="form1:button1" type="submit" name="form1:button1" value="Submit" style="left: 360px; top: 120px; position: absolute" />
<input id="form1_hidden" name="form1_hidden" value="form1_hidden" type="hidden" />
<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="H4sIAAAAAAAAAJ1WzW8bRRR/tuM6aSltE2gSlFZW1UMryDofEirxARInaQ22E8Vui+Dgjr1je9317jAza697qOgFDlw4wAGpCA4cyz/AAYQ4cAIJJC6cEGfghMTHBWZms7t27G6TjKznsWfee7/35r3fzKPfIelQmHmz0EZdpJnIamo7tTau8+z737/+yVl21YwDuAQATjMKq3W7ozHH0hqojpmGCDGNOuKGbWlljjguIgs1Mc13iHm5QjEu2Tr+s/HFl58vXf/qKWmndxvkuD5sB7scW0xYESa7iCOqiXViW9jiTNtFlBvIrFDUxZQh85aBe3u2zaUTmGxXDV18Vlz2FtyHeG9R2U/79nu45hhamzVCi8JgE0OSCLk8qBWL1rrBOyYkW0IOacWfoIWRLrSEHNJKRGsVDOsuJE0hj6cVZGNZaV2K0irXqUE4pJj6Xj625vF9rh4hnxu23odkTcghpFPR/oqI3nUIpDp9nYuqHPQ3Fe1v26YdSDaEDPxlhdYpeEH2i7tfv+F+WR+qVHJ2p4MsfcPh3LYgVVPfy64jbcgRD2aTwWxKdNg51YcON4QZxFpFRJKpn7/+5vydHxIQ34aTpo30bVTnNs3DFG9RzFq2qbvk5VeUiRO9SWlSHgGHy4MYRXSiXbXczb29rVKleiu/dbu6t7NTkc6f5XDFz4JsM7lZE7kQCjXEsJbb21qvbG0qpQCj4ooN2zYxsr5L07d/evjvH3GIvQHJLjId7JIYh/Q4BDvF3Z2SxJDfLAtrM2HE65SifsFg3H3w44WPvkUfJyCWhwlm3MOKgmK9CRkj97vXJaKKAgqQkcypQ5oFIldO3qgUC9WN9XI+x+FMpoS6RtMjqzYjwvPZ0HPBriMT3//73J2HS//8FoeJPEy2RP7rgsAKkKrbjsVpn8O04smMjD1T5tSwmtkCTMqfjkAkfV8S27uIGsji6qdL/hODQzxXEuJeiwMMpzBvcSw4c/rXTz/768G71+Iy5P0U+hDVvpLTqWH6zqMPL5z64Jf3fFaWkQYFFBtTXsmB8pKzmZFKicm/59Xic0NJ9sjOJXJlIRBzUlzkcH60bySzErX94gERCTFxVIjxEKJkVu4zggd1KRARUGWPksHcxcfMZo8KLBkAU+S9/70S0mtIlwP058G+Fogo2CLewQyPz3ZoZHg2bvXxumNKKExNKkyNh2E9EBHw5RVF1OAwnxHkZTtUUEOG8b4pmAxjrtUZCw8FDuN5IxBhVK/5Xp4Z8KLIXzmQW4pjbE8ctJ0LhB/V3GhU3nXm+ZvN7Do18Sh6tVxtO4yLm6Mm9rfZoT1uBiKM5qZn++kMaiO36oVxBJNbgRgxeSZTp1g83DafYHP+2C3qX7rcv0a9an8pEBHlIm97Eg4OCxQ35JWn4F65mqWYO9RKN5DJcNbfNL0o77BFE/Vth6+lm9TQD3TJwd6IJIGRetMDEVET3pODDPWqSMF+KhK60X1cqufG/HdU6g7eG16ycSAiki2fOsN4R8chCX1h3O0jj+a0KoG1fXRyqTuIanrwueA9nciYe0mxhavO+kTZqXUMPgaqWn7exA1RAqsvLhE3m+Y2WUsvr6g5sZkhnwJraVRjtulw7Nljyp46m/8BewCfqxwNAAA=" autocomplete="off" />
</form>
<script type="text/javascript">webui.suntheme4_2.dojo.addOnLoad(function() {new webui.suntheme4_2.body('/Navigation.jsp', '/fuBom/faces/Navigation.jsp',null,null,'com_sun_webui_util_FocusManager_focusElementId',true);});</script></body></html>

0||-1||Tree Example||www.baidu.com$$1||0||节点配置||treeNodeConfig.jsp$$2||1||新浪||www.sina.com$$3||0||搜狐||www.sohu.com$$4||1||微软||www.microsoft.com$$5||2||雅虎||www.yahoo.com
0
自己想要的仅仅是那些从数据库中得到的字符串,而这些包含了HTML信息的字符串并非自己所需要,由于未获得正确字符串,从而导致客户端web页面无法实现ajax变化;即使在js中对返回的字符串进行截取,截掉包含html的那部分,一样是失败。为什么会出现这种情况?是不是利用responseText得到的字符串一定包含html信息部分?如何解决?提示:
当开发环境其他不变,仅作下述改变时,上述两个错误都不会发生:
服务器:Sun Java System Application Server 8.2(更早的一个服务器版本); JavaEE版本:JavaEE 1.4;
对应web页面:jsp1.2,Servlet2.4请各位大牛和神人急救!该问题困扰本人十多天之久,若能帮我提供解决之策,万分感谢!

解决方案 »

  1.   

    response.setContentType("text/xml;charset=UTF-8");
    试试。
      

  2.   

    谢谢两位的热心,之前已试过response.setContentType("text/xml;charset=UTF-8"),仍旧行不通
      

  3.   

    我在用ajax和jsp servlet结合的时候,遇到过这样的问题、
    在网上搜的解决方法比较难懂。后来发现是我粗心大意了。
    就是ajax中应该有处理信息返回时候的操作吧,如果验证什么的都正确的话,会跳转到某一个页面的。
    然后我在servlet中还有跳转到成功页面这句话。
    这个时候,ajax返回的message就是整个的html代码。所以servlet中的跳转页面就不需要了的。不知道这样能不能帮到你。
      

  4.   

    或者试试用
    alert(msg.innerHTML);
    将HTML标签过滤
      

  5.   

        感谢大家后续的回复与讨论!最近一直在忙,未及时收看你们的建议和答复你们,不好意思哈。虽然问题最终没解决,但在发帖后的两三天内,通过身边一位前辈的帮助,还是有所收获,在此我这点小经验共享出来,方便以后碰到类似问题的朋友们参考:
        1)通过仔细查看Ajax相关教程和广泛查阅网上朋友的看法,得知responseText得到的字符串包含html信息部分是正常情况,对于Sun Java System Application Server 8.2服务器没有发生这种情况反而是特例,这可能和应用服务器有关,具体原因未知;
        2)当开发环境换成下述情况:
        服务器:GlassFish v2.1;JavaEE版本:JavaEE 1.4;
        对应web页面:jsp1.2,Servlet2.4
        虽然一样会得到包含HTML部分的字符串,错误1也还是会发生,但通过截取掉HTML部分可以实现Ajax正常响应。
        这里启发思路的关键是:通过查看运行后jsp的页面源代码,发现该页面的html渲染情形和前述能成功的开发环境下的页面html渲染情形相同,它是常规的DOM对象,所以在AJAX的响应操作中,通过常规的DOM操作可以实现Ajax响应。
        而在第一种开发环境下,查看运行后jsp的页面源代码,发现该页面的html渲染情形和上述情形不相同,具体如下:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wairole="http://www.w3.org/2005/01/wai-rdf/GUIRoleTaxonomy#" xmlns:waistate="http://www.w3.org/2005/07/aaa">
    <head>
    <title></title><script type="text/javascript">var webui_suntheme4_2={"webuiJsfx":false,"webuiAll":false,"theme":{"locale":"zh-cn"},"ajax":{"isJsfx":true},"isDebug":false,"isStyleSheet":true,"parseOnLoad":true};</script><script type="text/javascript" src="/fuBom/theme/com/sun/webui/jsf/suntheme4_2-080320/javascript/bootstrap.js"></script><link id="link1" rel="stylesheet" type="text/css" href="/fuBom/resources/stylesheet.css" />
    <link id="link2" rel="stylesheet" type="text/css" href="/fuBom/resources/dtree.css" />
    <script id="script1" type="text/javascript" src="/fuBom/PublicJS_justforbom.js"></script>
    <script id="script2" type="text/javascript" src="/fuBom/ajax_dtree.js"></script>
    <script id="script3" type="text/javascript" src="/fuBom/createDtree.js"></script>
    </head><body id="body1" style="-rave-layout: grid" onload="refreshDtree();return false;"><div id="mydtree" class="dtree"></div><form id="form1" class="form" method="post" action="/fuBom/faces/Navigation.jsp" enctype="application/x-www-form-urlencoded">
    <input id="form1:button1" type="submit" name="form1:button1" value="Submit" style="left: 360px; top: 120px; position: absolute" />
    <input id="form1_hidden" name="form1_hidden" value="form1_hidden" type="hidden" />
    <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="H4sIAAAAAAAAAJ1WzW8bRRR/3sR10lLaJpA0IpEM6oEKss6HBFV8oPloWleOU8WmRXBwx7tje9317jAza697qOgFDlw4wAGpCA4cyz/AAYQ4cKISSFw4Ic7ACYmPC8zMxrt2vN0mGVnPY8+83/u9N++9mYe/Q9qjMP1WsYU6SLeR09B3ay1s8PwHj9749Cy7aGsAPgGA04zCquG2deY5eh0ZmOmIENsyELdcRy9zxPEOclAD00Kb2BcqFOOSa+I/619+9cXS1a+fkjjdWyDH1WEc7HPsMIEiIDuII6qLdeI62OFMv4Eot5BdoaiDKUP2TQt391yXSyMw0apapvis+OxtuAdad1HhZ/v4XVzzLL3F6hGiAGxgSBMhlwe1Usla13jbhnRTyCEt7QlaGJlCS8ghrbFkraLl3IG0LeTxtMJoLCutF5K0yga1CIcMU9/Lx9Y8vs3VI8RzwzV7kK4JOcR0MtneDqJ3PAKZds/kIisH7U0m29t2aRvSdSFDe3mhdQpelvXi7+dvtF/mh0qVTbfdRo654XHuOpCpqe9l35MYcmjhbCKcTYoKO6fq0OOWgEGsuYNIOvPzN9/O3P5hDLRtOGm7yNxGBndpASZ5k2LWdG3TJ69dVhAnuhMSUhrgcGGQo/BOlKu++fre3pVSpXqzcOVWdW93tyKNP8shG7d3d+fGbknuLmyVBbfpiNs6pahXtBj37/+48PF36JMxSBVgnFl3sWoWqe64ZMP7deYTcd5hsYZ+qn6z4bo2Rs73WfrOTw/+/UOD1JuQ7iDbE1ApFfTngEj9k9cqO8Xqxnq5sMnhTK6EOlYjaD4tRgTm2Yhf0TWQje/9fe72g6V/ftNgvAATTRFPQzSkImQM13M47XGYUn0vJ3nkypxaTiNfhAn50xO8pe3nxfYOohZyuPrpk//E4KBtloS42+QAw+4UHI5FD5z69bPP/7r/3iVNBmbfnT5Fta/ktWuYvvvwo4VTH/7yfr/LSk/DhEjFpEt6IF3kbHrk5FPy7xm1ODt0FEHz8olcmQvFvBQLHGZG60B2SqK2LxwQiRTHjkpRiyjKTsn7FR5QzYUigaqsOTIYOy1mNntUYumQmGrG+98rUbuM2t9AOwtovxqKJNrC38EIx0c7Ahmexa0+XjcmhaLQZKLQBBwuhyKBvrxyiBoc5nKiGbkeFQ0kx3jPFp0JY64bjEWHAoexvB6KyKvrfSvPDFhRzVwZkFuKMdjjB7E3QtH36vyoV8H1FNibzd3wauKRc71cbXmMi5ugJva32KEtboYi8qYSYD+dQy3kVwM3jgC5FYoRyDM5g2LxENt6AubcsUu0f4ny/rUYZPulUCSki7y9STQ4zFNcl1eYovvixTzF3KNOto5shvP9TVOL8um3aKOe6/G1bINa5oEqOVgbiU1gJN+MUCTkRPCEIEO1KkKwH4ox0+o8LtTnY/47ausO3w9BsM1QJARbPl2G+Y6OQzb0+bjbRx7NaZUCa/vs5JI3yGpq8FERPIVIzL2kuoWvzvpE2au1LR5DVS2/ZOO6SIHVV5aIn89yl6xll1fUnLjMkk+BtSyqMdf2OA7wmMJTZ/M/ROLbx+wMAAA=" autocomplete="off" />
    </form>
    <script type="text/javascript">webui.suntheme4_2.dojo.addOnLoad(function() {new webui.suntheme4_2.body('/Navigation.jsp', '/fuBom/faces/Navigation.jsp',null,'form1:button1','com_sun_webui_util_FocusManager_focusElementId',true);});</script></body></html>请注意细看html代码中的红色部分。本人猜测是由于该环境下的JSF框架在开发时引入了dojo框架来构成,所以页面html渲染情形不相同,不像是常规的DOM对象,因此在AJAX的响应操作中,通过常规的DOM操作也就无法实现Ajax响应。由于没有时间去学习dojo框架的用法,该猜测暂时无法验证。    另外说明:
    1)对于response.setContentType("text/xml;charset=UTF-8"),运行时会产生“jsp不能包含xml字符”的错误,小弟愚钝,不明白又怎会出现这种错误;
    2)alert(msg.innerHTML)时,显示“undefined”。
      

  6.   

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    String text = request.getParameter("text");
    System.out.println(text);
    response.getWriter().print("{success:true, msg:'成功'}"); %>如果你要用jsp返回数据的话仿造这样写吧,直接写是会返回一堆HTML的