【问题标题】:HttpServlet mapping doesn't workHttpServlet 映射不起作用
【发布时间】:2016-03-25 18:10:32
【问题描述】:

我正在使用 Apache Tomcat v8.0 服务器和 Java EE 应用程序。基本上,我创建了一个 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 文件添加了一个表单,对 url 执行 POST:

http://localhost:8080/webApp/RequestUpload

形式:

<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

谁能告诉我我的错误在哪里?

我的 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>

附:另一种对 RPC servlet 执行相同操作的形式(其结构类似)正在工作。

【问题讨论】:

  • 您访问的是什么网址?因为我在你的错误中看到了括号。
  • 请将您的问题编辑成MCVE;你已经发布了一个 HTML 的 sn-p 和一个 Servlet,那个 sn-p 的 url 是什么?你用的是什么服务器?您是否启用了日志记录?
  • 我添加了有关服务器和 url 的信息并删除了 Servlet 的不必要部分。它看起来更好知道吗?
  • 请在此处发布您的 web.xml 文件。

标签: java jsp servlets post


【解决方案1】:

经过研究并在先前答案的帮助下,我发现了构建路径中的问题。 The build path image

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

【讨论】:

  • 是的,我已经修好了。无论如何,我不明白为什么它与另一个 servlet 一起工作。
【解决方案2】:

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);

    }
} 

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如下:

当数据在 first_nameMinhajurlast_nameRahman 时,点击提交按钮后, 将返回以下 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 服务器。然后按照前面的步骤。

您还可以阅读以获取更多参考: How to use Servlets and Ajax?

【讨论】:

  • 问题是访问“/RequestUpload”时出现404错误。我没有测试 POST 的正文。无论如何,谢谢您的回复
  • 检查jsp是否显示?如果您使用的是 eclipse,您还可以通过检查 Project-> Property-> WebProjectSettings 来检查项目的上下文根。检查tomcat的端口号。例如,如果端口号是 8081,项目的上下文根是 jsondemo。 jsp文件名为index.jsp,存放在webapp目录下。检查访问url时是否可以看到表单窗口:localhost:8081/jsondemo
  • 是的,因为我有另一个正在工作的表单。此外,如果我只是将 'RequestUpload' 更改为 'RPC',该表单将起作用。所以,这对我来说很奇怪。
  • 如果你把@WebServlet("/RequestUpload") 改成@WebServlet("/RPC"),而不是classname 和jsp 表单action 改成action="RPC",是否有效?跨度>
猜你喜欢
  • 2013-04-26
  • 2014-07-19
  • 2011-09-07
  • 2012-01-14
  • 1970-01-01
  • 2013-10-13
  • 2011-12-13
  • 2013-10-16
  • 1970-01-01
相关资源
最近更新 更多