有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将JSON对象传递给HttpServlet的java问题

我有一个html表单,我希望在提交表单时将其传递给servlet。表格信息如下:

<form method="post" action = "/directory" name="dirinit" id="srchform"> 

我试图用来发布的jQuery代码是:

 $(document).ready(function(){
        $("form").on("submit", function(event){
            event.preventDefault();

            var formData = JSON.stringify(jQuery("form").serializeArray());
            $.post("/directory", formData)
            });
        });

servlet设置为:

public class NewDirectory extends HttpServlet{


  public void init(ServletConfig config) throws ServletException 
    {
        super.init(config);
    }

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

    doPost(request, response);
  }


  public void doPost(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException 
{
      response.setContentType("text/json");
      String form = request.getParameter("formData");
      System.out.println(form);
}
}

我的网络。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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>NewDirectory</display-name>
  <servlet>
    <servlet-name>newdirectory</servlet-name>
    <servlet-class>edu.msu.is.directory.newdirectory</servlet-class>

 </servlet>
<servlet-mapping>
  <servlet-name>newdirectory</servlet-name>
  <url-pattern>/directory</url-pattern>
</servlet-mapping>
  <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>
</web-app>

当我试图发布表单数据时,我得到一个404错误,表示找不到url。我对servlet非常陌生,所以我甚至不确定是否正确设置了servlet


共 (2) 个答案

  1. # 1 楼答案

    你的代码应该是这样的:

    Servlet:

    package edu.msu.is.directory;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class NewDirectory extends HttpServlet
    {
        private static final long serialVersionUID = 1L;
    
        public NewDirectory()
        {
            super();
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
            doPost(request, response);
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
            response.setContentType("text/json");
            String form = request.getParameter("formData");
            System.out.println(form);
        }
    }
    

    网络。xml

    ...
    <servlet>
        <servlet-name>NewDirectory</servlet-name>
        <servlet-class>edu.msu.is.directory.NewDirectory</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>NewDirectory</servlet-name>
        <url-pattern>/directory</url-pattern>
    </servlet-mapping>
    ...
    

    Html表单:

    <form method="post" action="directory" name="dirinit" id="srchform">
    

    Javascript:

    $(document).ready(function(){
        $("form").on("submit", function(event){
            event.preventDefault();
    
            var formData = JSON.stringify(jQuery("form").serializeArray());
            $.post("directory", formData)
            });
        });    
    

    注意:如果您收到404错误,这意味着您正在访问不同的url,或者您的servlet/jsp没有正确映射

    在这里,您将操作url设置为/directory,它应该是directory/YourProjectContextRootPath/directory

  2. # 2 楼答案

    <servlet-class>edu.msu.is.directory.newdirectory</servlet-class>

    是区分大小写的,应该是

    <servlet-class>edu.msu.is.directory.NewDirectory</servlet-class>