Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpServlet映射没有';行不通_Java_Jsp_Servlets_Post - Fatal编程技术网

Java HttpServlet映射没有';行不通

Java HttpServlet映射没有';行不通,java,jsp,servlets,post,Java,Jsp,Servlets,Post,我正在使用ApacheTomcatV8.0服务器和JavaEE应用程序。基本上,我创建了一个ResponseUpload servlet。我需要通过POST请求从web应用程序获取JSON数据。下面是Servlet的代码: @WebServlet("/RequestUpload") public class RequestUpload extends HttpServlet { private static final long serialVersionUID = 1L; /** * @s

我正在使用ApacheTomcatV8.0服务器和JavaEE应用程序。基本上,我创建了一个ResponseUpload servlet。我需要通过POST请求从web应用程序获取JSON数据。下面是Servlet的代码:

@WebServlet("/RequestUpload")
public class RequestUpload extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public RequestUpload() {
    super();
    // TODO Auto-generated constructor stub
}
/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    BufferedReader reader = request.getReader();
    Gson gson = new Gson();
    JSONObject json = gson.fromJson(reader, JSONObject.class);
    uplRequest.upload(json);

    PrintWriter out = response.getWriter();
    out.print(json);
}
然后,为了测试它是否有效,我在jsp文件中添加了一个表单,执行POST to url:

表格:

<form action= "RequestUpload" method = "POST">
    First Name: <input type = "text" name = "first_name">
    <br />
    Last Name: <input type = "text" name = "last_name" />
    <input type = "submit" value = "Submit" />
</form>

名字:

姓氏:
但我有404个错误-

HTTP状态404-/webApp/RequestUpload

有人能告诉我哪里是我的错吗

My web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>webApp</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>

</web-app>

网络应用
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
另一个与RPC servlet(结构类似)相同的表单正在运行。

servlet类:

import java.io.IOException;
import java.io.PrintWriter;
import java.util.LinkedHashMap;
import java.util.Map;

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

import com.google.gson.Gson;
@WebServlet("/RequestUpload")
public class RequestUpload extends HttpServlet {

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        Map<String, String> options = new LinkedHashMap<String, String>();
        options.put("first_name", request.getParameter("first_name"));
        options.put("last_name", request.getParameter("last_name"));

        String json = new Gson().toJson(options);

        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(json);

    }
} 
import java.io.IOException;
导入java.io.PrintWriter;
导入java.util.LinkedHashMap;
导入java.util.Map;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入com.google.gson.gson;
@WebServlet(“/RequestUpload”)
公共类RequestUpload扩展了HttpServlet{
/**
*@参见HttpServlet#doPost(HttpServletRequest,HttpServletResponse
*(答复)
*/
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
映射选项=新建LinkedHashMap();
options.put(“first_name”,request.getParameter(“first_name”);
options.put(“last_name”,request.getParameter(“last_name”);
字符串json=new Gson().toJson(选项);
setContentType(“应用程序/json”);
响应。setCharacterEncoding(“UTF-8”);
response.getWriter().write(json);
}
} 
JSP:home.JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<form action= "RequestUpload" method = "POST">
First Name: <input type = "text" name = "first_name">
<br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>

名字:

姓氏:
若您的web应用的上下文根是webApp,并且服务器正在端口8080上运行。您可以看到home.jsp,如下所示:

当数据以名字作为Minhajur姓氏作为Rahman给出时,单击提交按钮后, 将返回以下json响应:

注意:确保在lib文件夹中添加了所需的jar依赖项。例如:gson-1.7.1.jar存在于webapp/WEB-INF/lib文件夹中

故障排除:

HTTP状态404-/webApp/RequestUpload

->检查您的webApp是否已成功编译,并且您已编译的RequestUpload.class是否已存在于tomcat服务器上的webApp/WEB-INF/classes目录中

如果RequestUpload.class不存在,则

1) 它尚未成功编译。 或

2) 已编译的类文件尚未移动到webapp/WEB-INF/classes目录

因此,请执行以下步骤:

i) 清理tomcat工作目录,编译并再次运行,检查类文件是否存在

ii)再次在eclipse上删除并添加Tomcat服务器。然后按照前面的步骤操作

您还可以阅读以下参考资料:

经过研究,在前面答案的帮助下,我在构建路径中发现了问题


我必须允许源文件夹使用输出文件夹,并将输出文件夹从build更改为WEB-INF/classes

您访问的确切url是什么?因为我在你的错误中看到了括号。请将你的问题编辑成一个括号;您已经发布了一段HTML和一个Servlet,这段代码在哪个url上?你用的是什么服务器?您启用日志记录了吗?我已经添加了关于服务器和url的信息,并删除了Servlet中不必要的部分。你知道吗?请在这里发布你的web.xml文件。问题是访问“/RequestUpload”时出现404错误。我没有测试帖子的主体。无论如何,谢谢您的回复。您是否检查jsp是否正在显示?如果您使用的是eclipse,还可以通过检查project->Property->WebProjectSettings来检查项目的上下文根。检查tomcat的端口号。例如,如果端口号是8081,项目的上下文根是jsondemo。Jsp文件名为index.Jsp,存储在webapp目录下。检查在访问url时是否可以看到窗体窗口:。是的,因为我有另一个正在工作的窗体。此外,如果我只是将“RequestUpload”更改为“RPC”,那么表单就可以工作了。所以,这对我来说是非常奇怪的情况。如果您将@WebServlet(“/RequestUpload”)更改为@WebServlet(“/RPC”),但不更改类名和jsp表单action to action=“RPC”,它是否工作?是的,我已经修复了它。无论如何,我不明白它为什么要和另一个servlet一起工作。