【问题标题】:My ajax POST is not being sent to my servlet我的 ajax POST 没有发送到我的 servlet
【发布时间】:2023-03-09 22:00:01
【问题描述】:

我一直在研究很多关于 servlet 的知识,并且我创建了一个应该从我的网络应用程序中获得一些职位的工具,但是由于我缺乏 servlet 的经验,我不知道如何解决它。另外我不知道我应该把我的 HTML 应用程序放在哪里,我听说它应该在 WebContent 文件夹中,它就在那里,但它不起作用。你可以帮帮我吗?

更新:我正在尝试上传一些信息,这些信息将由我的 servlet 转换为 txt 文件,以避免上传文件时说:“...我创建了一个应该从我的网络应用中获得一些职位的职位..."

服务器:Apache Tomcat 7.0
Eclipse EE 火星

提前致谢。

我的整个项目都在这里:DropBox

PS:我在下面发布了 sn-p 仅供观察,但我不能使用脚本,因为我不拥有图书馆所在的企业,如果您想查看它,请查看此 PostScript 上方的链接.

我的带有 AJAX 的 HTML

<body>
  <div id="navgrid">
    <div id="header">Header</div>
    <div id="tree1">
      <ul class="jqtree_common jqtree-tree">
        <li class="jqtree_common jqtree-folder">
          <div class="jqtree-element jqtree_common"><a class="jqtree_common jqtree-toggler">â–¼</a><span class="jqtree_common jqtree-title jqtree-title-folder">node1</span>
          </div>
          <ul class="jqtree_common ">
            <li class="jqtree_common">
              <div class="jqtree-element jqtree_common"><span class="jqtree-title jqtree_common">child1</span>
              </div>
            </li>
            <li class="jqtree_common">
              <div class="jqtree-element jqtree_common"><span class="jqtree-title jqtree_common">child2</span>
              </div>
            </li>
          </ul>
        </li>
        <li class="jqtree_common jqtree-folder">
          <div class="jqtree-element jqtree_common"><a class="jqtree_common jqtree-toggler">â–¼</a><span class="jqtree_common jqtree-title jqtree-title-folder">node2</span>
          </div>
          <ul class="jqtree_common ">
            <li class="jqtree_common">
              <div class="jqtree-element jqtree_common"><span class="jqtree-title jqtree_common">child3</span>
              </div>
            </li>
          </ul>
        </li>
      </ul>
    </div>
  </div>
  <script type="text/javascript">
  </script>

  <script>
    $(document).ready(function() {

      var POSITIONS;

      //var data is a dynamic JSON file that should be created in the backend.
      var data = [{
        label: 'node1',
        id: 1,
        children: [{
          label: 'child1',
          id: 2
        }, {
          label: 'child2',
          id: 3
        }]
      }, {
        label: 'node2',
        id: 4,
        children: [{
          label: 'child3',
          id: 5
        }]
      }];
      $('#tree1').tree({
        data: data,
        autoOpen: true,
        dragAndDrop: true
      });


      console.log($('#tree1').tree('toJson')); //This will give you the loading jqtree structure.

      $('#tree1').bind(
        'tree.move',
        function(event) {
          event.preventDefault();
          // do the move first, and _then_ POST back.
          event.move_info.do_move();
          console.log($(this).tree('toJson')); //this will give you the latest tree.
          POSITIONS = $(this).tree('toJson');
          alert(POSITIONS);
          $.post('http://sistema.agrosys.com.br/sistema/labs/CSS_HTML/', {
            tree: $(this).tree('toJson')
          });
          alert("done"); //this will post the json of the latest tree structure.
        }
      );

      var data = new FormData();
      data.append("JqTree", POSITIONS);
      alert('Sending: ' + POSITIONS);
      $.ajax({
        url: '/JqTree',
        type: 'POST',
        data: data,
        cache: false,
        dataType: 'json',
        processData: false,
        contentType: false,
        success: function(response) {
          alert("file has been successfully sent\n\n" + POSITIONS);
        },
        error: function(jqXHR, textStatus, errorThrown) {
          alert('ERRORS: ' + textStatus);
        }
      });

    });
  </script>
</body>

我的小服务程序

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

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

public class Hello extends HttpServlet {
private static final long serialVersionUID = 1L;
public Hello() {}

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

    response.setContentType("text/html");
    PrintWriter out=response.getWriter();

    out.print("<html><body>");
    out.print("<h3>Hello Servlet</h3>");
    out.print("</body></html>");
}

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     String position = request.getParameter("JqTree");

     PrintWriter writer = new PrintWriter("Positions.txt", "UTF-8");
     writer.println(position);
     writer.close();
}

}

和我的 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" xmlns:web="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_2_5.xsd" id="WebApp_ID" version="2.5">

<display-name>JqTree</display-name>


<welcome-file-list>


<welcome-file>index.html</welcome-file>    
<welcome-file>index.htm</welcome-file>    
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

<servlet>

<description></description>

<display-name>Hello</display-name>
<servlet-name>Hello</servlet-name>
<servlet-class>Hello</servlet-class>
</servlet>

<servlet-mapping>  
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>

</web-app>

【问题讨论】:

  • 你应该在这里给出足以重现问题的最少代码量,例如所有样式声明都没有用。最明显的一点是您的 ajax 调用的 url。那是对的吗?如果有呼叫,您可以查看服务器访问日志吗?
  • @JPMoresmau 好的,我马上修复它。
  • @JPMoresmau Fixed ;),希望它更整洁更清晰

标签: java jquery ajax tomcat servlets


【解决方案1】:

您需要将 AJAX 调用更改为

$.ajax({
    url: '/JqTree/Hello',

其中/JqTree 是您的Web 应用程序的上下文根,加上/Hello,它是为您的Hello Servlet 在/WEB-INF/web.xml 文件中配置的&lt;url-pattern&gt;


  1. 您的$.ajax() 呼叫正在使用post,因此您必须记住只有doPost() 会被呼叫。
  2. 您的doPost() 没有返回任何输出,但您的$.ajax() 调用需要dataType: 'json' 返回。这有时会导致请求静默失败。
  3. 我相信您正在尝试上传文件。如果是,您不能只使用request.getParameter() 读取文件内容。您必须以不同的方式编写 Servlet 代码来处理 multipart/form-data,无论您是在 Servlet 3.0 还是 2.x 容器下运行,这都会有所不同。

【讨论】:

  • 你的回答真的很简洁+1,但是,我有点疑问要解决,其余的如servlet是否正确和功能?
  • 我的意思是 web.xmlHello.java 文件,它们正确吗?我需要添加其他内容吗?提前致谢
  • @Calne 添加了我对您的 cmets 的回复作为更新。
  • 感谢拉维的帮助:)
猜你喜欢
  • 2014-04-16
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 2020-11-16
  • 1970-01-01
相关资源
最近更新 更多