从 Ajax 调用 servlet [重复]

Posted

技术标签:

【中文标题】从 Ajax 调用 servlet [重复]【英文标题】:Call servlet from Ajax [duplicate] 【发布时间】:2012-04-05 00:54:38 【问题描述】:

这是我的 jsp.. 我使用 javascript-function 和 ajax-call 来调用 servlet (ReadprojectInfo)。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript">
function displayProject()

    var xmlhttp;
    if (window.XMLHttpRequest)
      // code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      
    else
      // code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      
    
    xmlhttp.open("GET","ReadProjectsInfo",true);
    xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    xmlhttp.onreadystatechange= function ()
    
        if (xmlhttp.readyState==4)
        
        if (xmlhttp.status == 200)
        
        var time = xmlhttp.responseText;
        //alert(time);
        document.getElementById("center").innerHTML=xmlhttp.responseText;
        
        
    
    xmlhttp.send(); 

//document.getElementById("center").innerHTML=Date();


</script>


<link rel="stylesheet" type="text/css" href="css/start.css" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Learning CSS</title>
</head>
    <body>
    <div id ="headerLink" class="HeaderLink" >
        <button id="adminLink" class="AdminLink" href='DNE.jsp'>Home</button></div>
        <button id="projectButton" class="ProjectButton"  onclick="displayProject()" >Projects</button>
    </div>
    
        <div id="center" class ="Center"><p>Click Project</p></div>
    </body>
</html>

Servlet代码如下:

package excelExchange;

import java.io.IOException;
import java.io.PrintWriter;

import javaFiles.Dog;
import javaFiles.Person;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ReadProjectsInfo 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    
    doGet(request, response);
    
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException
        //String var1= request.getParameter("var");
        
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.write("Hello from servlet !!");
        out.println("Hello");
        
    


我的 web.xml 看起来像:

    <servlet>
    <servlet-name>projectInfo</servlet-name>
    <servlet-class>excelExchange.ReadProjectsInfo</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>projectInfo</servlet-name>
    <url-pattern>/ReadProjectsInfo</url-pattern>
  </servlet-mapping>

点击“项目”按钮没有任何反应。 请帮帮我。

【问题讨论】:

显然相对 URL 是完全错误的。调试/提醒xmlhttp.status 了解更多信息。如果返回404,那么URL肯定是错误的。 【参考方案1】:

尝试注释掉: xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 和: if (xmlhttp.status == 200) ... 位,看看它是否有效

【讨论】:

没有。仍然没有发生任何事情! 您是否尝试在您的 servlet 中设置断点以查看它是否被命中? 感谢您的回复。 @solvation:抱歉,但是在 servlet 中设置断点是什么意思.. 以及如何操作.. 请您解释一下。 什么?不能调试?那么,在探索堆中的变量时,如何逐步跟踪代码执行?由System.out.println() 行打印 ASCII 艺术?好吧,那就这样做吧。重点是检查servlet方法是否被调用。 在执行 jsp 时,comming 异常是为 servlet projectInfo java.lang.ClassCastException 分配异常:excelExchange.ReadProjectsInfo 无法在 org.apache.catalina.core.StandardWrapper 中转换为 javax.servlet.Servlet .loadServlet(StandardWrapper.java:1136) 在 org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:857) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135) 在 org. apache.catalina.core.StandardContextValve.invoke(还有 2-3 行).. 但我认为它不会用到我的 SERVLET !!【参考方案2】:

你必须在你的类中扩展 HttpServlet,比如:

public class ReadProjectsInfo extend HttpServlet
      ...

我认为您可以删除该行:

xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

它必须工作......

【讨论】:

【参考方案3】:

如下给出 servlet 类的完整 url 并尝试一次。它对我有用。 xmlhttp.open("GET","http://localhost:8080/excelExchange/ReadProjectsInfo",true);

【讨论】:

以上是关于从 Ajax 调用 servlet [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 Java GUI 应用程序调用 servlet?

从其他项目调用java servlet [重复]

如何在调用 servlet 后使用 ajax 在 iframe 中显示 PDF

Ajax相关

无法从 jsp 调用 servlet 文件 - 发现 404 错误 [重复]

tomcat 报错出现 jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Ser