【问题标题】:Client not receiving the response from Servlet客户端没有收到来自 Servlet 的响应
【发布时间】:2015-10-12 02:54:35
【问题描述】:

我是客户端服务器应用程序的初学者,并且在服务器端使用 Java Servlet 并在客户端使用 JavaScript 开发非常基本的应用程序。 我在客户端(index.html)上使用 AJAX 的 POST 请求,如下所示:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
  $("button").click(function(){
    $.post("/Serve",
      {
        name: "Donald Duck",
        city: "Duckburg"
      },
      function(data, status) {
        alert("Data: " + data + "\nStatus: " + status);
      }
    );
  });
});
</script>
</head>
<body>

<button>Send an HTTP POST request to a page and get the result back</button>

</body>
</html>

我使用的是 GlassFish 4.1 版,Servlet 代码 (myServe.java) 如下所示:

public class MyServe extends HttpServlet {
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException{
        PrintWriter out = response.getWriter();
        out.print("HI");
    }

}

理想情况下,响应应该转到 AJAX 函数中的数据变量,它应该在按钮单击时显示,但警报屏幕只是再次显示 JS 代码:

谁能告诉我哪里出错了? web.xml 文件也是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
    <servlet-name>MyServe</servlet-name>
    <servlet-class>org.MyServe</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MyServe</servlet-name>
    <url-pattern>/Serve</url-pattern>
</servlet-mapping>
</web-app>

【问题讨论】:

  • @KrutikJayswal 抱歉,您能否详细说明您的问题。您是在问 Web App 吗?

标签: javascript java jquery ajax servlets


【解决方案1】:

我没有使用纯文本响应,建议使用 xml,你可以试试这个

public class MyServe extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException{
        response.setContentType("text/plain;charset=UTF-8");
        try(PrintWriter out = response.getWriter();){
        out.print("HI");}
    }
}

我不知道客户端(jquery)是否期望纯响应(带或不带标头),但是对于我提到的 xml 类型,设置内容类型是必不可少的。


另请注意,客户端正在调用/Serve/,这不是/Serveweb.xml 中注册的位置
尝试将 servlet 称为完整的限定名称(如 http://[::1]/my_app/Serve)而不是相对名称(/Serve)。如果 web 应用程序尚未注册为根上下文,则客户端将调用 http:://[::1]/Serve 而不是实际/预期的 http://[::1]/my_app/Serve

【讨论】:

  • 感谢您的编辑,我已经尝试过了,但问题仍然存在。我认为纯文本响应应该没问题,因为我已经看到了有关此的示例。但我可能是错的
  • 检查编辑亲爱的,你从客户端得到什么样的代码? 404?您也可以通过调用编辑中提到的完整限定 servlet 路径来提出请求。 @谜
  • 编辑后显示 404。但仍然无法正常工作
【解决方案2】:

ajax 请求将发送到错误的控制器,请通过从 Serve 中删除 / 对 ajax 请求进行一些更正

      $("button").click(function(){
        $.post("Serve",
          {
            name: "Donald Duck",
            city: "Duckburg"
          },
          function(data, status) {
            alert("Data: " + data + "\nStatus: " + status);
          }
        );

我想它会对你有所帮助。

【讨论】:

  • 工作就像一个魅力。谢谢 :)。你能告诉我为什么会这样吗,因为我们应该提供相对路径
  • @Enigma 在将 Servlet 注册到 web.xml 时。它的 url 模式应该与应用程序上下文根相关。而不是你的html文件和与WEB-INF目录parrel的Jsp。它也与应用程序的上下文根相关。
  • 知道了。非常感谢:)
猜你喜欢
  • 2013-04-15
  • 1970-01-01
  • 2019-06-16
  • 2012-12-16
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多