【问题标题】:Java cannot get any response from my servletJava 无法从我的 servlet 获得任何响应
【发布时间】:2017-02-08 11:46:48
【问题描述】:

我的jsp页面:

<button data-ng-click="login()">Fetch data from server</button>

mainController.js

    $scope.login = function() {
    var xmlHttpReq = new XMLHttpRequest();
    xmlHttpReq.open('POST', "http://localhost:8080/WEB-war/FES", false);
    xmlHttpReq.setRequestHeader('Content-Type', 'application/json');

    xmlHttpReq.send(JSON.stringify($scope.strings));
    if (xmlHttpReq.status === 200) {
        alert(xmlHttpReq.responseText)
    }

}

FileEditServlet.java

@WebServlet("/FileEditServlet")
public class FileEditServlet extends HttpServlet {

 protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    System.out.println("inside do POST");

    PrintWriter out = response.getWriter();
    out.println("response");
    response.getWriter().write("do something omg");

 }

web.xml

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

<servlet-mapping>
     <servlet-name>FileEditServlet</servlet-name>
     <url-pattern>/FES</url-pattern>
</servlet-mapping>

</web-app>

一旦我按下按钮从服务器获取数据并调用登录函数,mainContrller 中的函数就会被调用,并且输出为空。我的意思是警报是空的,就像没有响应一样。

另外,控制台里什么都没有,只有两个字:“test test” 我在我的代码中根本找不到。

【问题讨论】:

  • xmlHttpReq.status的值是多少?
  • 200,它到了线路,它引发了警报......但它是空的
  • 您可以在控制台中看到inside do POST 这一行对吗?
  • 请尝试添加response.getWriter().flush()
  • 在控制台中只有:test test,我不知道它是从哪里来的......我现在也在代码中添加了flush()的东西,但是什么都没有

标签: javascript java angularjs servlets


【解决方案1】:

我会将其放入我认为可能比附加 cmets 更清晰的答案中。

我认为 web.xml 和 js 部分不应该导致问题。并且返回字符串test test 肯定应该在您的代码中,在您的项目中进行文本搜索(如果您使用的是 Eclipse)。

但是,我猜这个问题是因为您尝试从 HttpServletResponse 调用 getWriter 方法两次 - 第一个执行 println 第二个写入流。您可以尝试删除其中之一。这是一个小例子:

@WebServlet("/FileEditServlet")
public class FileEditServlet extends HttpServlet {

 protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    System.out.println("inside do POST");

    PrintWriter out = response.getWriter();
    out .getWriter().write("do something omg");

 }

【讨论】:

    【解决方案2】:

    【讨论】:

    • 一旦我这样做了,警报根本不会触发
    • 您的配置有点混乱。如果您使用 @WebServlet 注释,则 web.xml 是可选的,但您使用另一个 url 模式再次定义 servlet。 docs.oracle.com/javaee/7/api/javax/servlet/annotation/…
    • 所以你说,我可以从 web.xml 中删除 servlet 部分吗?然后使用你上面建议的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2021-07-18
    • 2018-02-20
    • 2020-12-11
    相关资源
    最近更新 更多