我发现发送接收参数有问题

时间:2010-03-22 15:41:06

标签: java xml ajax jsp

如何使用ajax将XML转换为HTML下拉列表?我使用GET方法发送参数,但是生成XML的JSP文件没有收到它。

var url = "responsexml.jsp";
url = url + "?projectCode=" + prj.options[prj.selectedIndex].value;
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET", url, true);
xmlhttp.send(null);

然后在responsexml.jsp中我喜欢这样:

<% 
    String projectcode = (String) request.getParameter("projectCode");
    System.out.println("++++projectCode:=" + projectcode);
    Session s = null;
    Transaction tx;     

    try {
        s = HibernateUtil.currentSession(); 
        tx = s.beginTransaction();
        Query query = s.createQuery("SELECT from Wa wa where wa.ProjectCode='" + projectcode + "'");
        response.setContentType("text/xml");
        PrintWriter output = response.getWriter();
        output.write( "<?xml version=\"1.0\" encoding=\"utf-8\"?>");
        //response.setHeader("Cache-Control", "no-cache");

        if (projectcode != null) {
            for (Iterator it = query.iterate(); it.hasNext();) {
                if (it.hasNext()) {
                    Wa object = (Wa) it.next();
                    //out.print( "<item id=\"" + object.getIdWA() + "\" name=\"" + object.getWAName() + "\" />");
                    output.write("<wa>");
                    output.write( "<item id=\"" + object.getIdWA() + "\" name=\"" + object.getWAName() + "\" />");
                    output.write("</wa>");
                }
            }
        }
    } catch (HibernateException e) {
        e.printStackTrace();
    }
%>
</body>
</html>

使用此代码我没有我的XML文件。我收到了这个错误:

  

服务器不理解请求,或者请求无效。 Erreur de traitement de la ressource http://www.w3.o ...

1 个答案:

答案 0 :(得分:1)

确定:整个 JSP文件是什么?错误消息表明您在其顶部有一个<!DOCTYPE>,指向w3.org上的DTD,但有问题的webbrowser无法加载它。该错误消息还表明您正在使用IE来测试这一切,这个Web浏览器对于从http://localhost打开XML文件有着奇怪的限制和怪癖。尝试使用更合适的webbrowser,例如Firefox

此外,我发现了这种方法的几个缺陷:

  1. </body></html>实际上并不属于JSP的底层。删除它们。
  2. JSP是这项工作的错误工具。使用Servlet。
  3. if (it.hasNext())件是多余的,因为它已由for声明处理。
  4. XML应该有一个根元素。现在你正在为它写多个<wa>元素。
  5. SQL容易受到SQL注入攻击。使用命名查询。
  6. 不是真正的问题,但更多的建议,我建议看看jQuery来解决ajaxical请求并以漂亮,简洁和交叉浏览器兼容的方式进行DOM操作。