Java 应用程序后处理在 Eclipse Tomcat 中有效,但在本地 Tomcat 服务器上无效

标签 java eclipse jsp tomcat servlets

我使用 Maven 在 Eclipse 中开发了一个 Java Web 应用程序,构建目标是“tomcat7:run”以在 Eclipse 中运行该应用程序。我现在已经开始从 Eclipse 导出我的 .war 文件,并且在我的本地 Tomcat 服务器上尝试用户启动的 post 命令时我看到了一些不同的行为。当访问 http://localhost:8080/qa(.war 文件称为 qa.war)时,用户将访问的第一个 .jsp 加载没有问题。在执行 post 命令时,我的应用程序找不到在表单标记中指定的“/login.do”文件。

我的猜测是我在 servlet 映射方面做错了什么。请注意,我一直在访问我本地 Tomcat 服务器上的 Web 应用程序,方法是转到 http://localhost:8080/qa 并且没有对其进行配置,以便在访问 http://localhost:8080/时显示默认页面,这也可能是相关的。

这是我在 login.jsp 上的表单:

<form action="/login.do" method="post">
    Username: <input type="text" name="username">
    Password: <input type="password" name="password">
    <br>
    <input type="submit" value="Submit">
</form>

这是我的 LoginServlet:

package com.XXXXX.qa.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = "/login.do")
public class LoginServlet extends HttpServlet {

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

          request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);

      }

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

                request.getRequestDispatcher("/WEB-INF/views/runtest.jsp").forward(request, response);    

      }
}

我的 web.xml:

<!-- webapp/WEB-INF/web.xml -->
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <display-name>To do List</display-name>

    <welcome-file-list>
        <welcome-file>login.do</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.XXXXX.qa.servlets.LoginServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>login.do</url-pattern>
    </servlet-mapping>  

    <servlet>
        <servlet-name>RunTestServlet</servlet-name>
        <servlet-class>com.XXXXX.qa.servlets.RunTestServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>RunTestServlet</servlet-name>
        <url-pattern>/runtest.do</url-pattern>
    </servlet-mapping>

</web-app>

IMAGE: Accessing Tomcat server, performing post and file structure in Eclipse workspace

最佳答案

难怪为什么服务器返回 404。你正试图从你的表单中获取 /login.douri,它变成了 http://localhost:8080/login.do 导航时:此 URL 缺少应用程序上下文“qa”。简而言之:您必须去掉前导斜线。让它成为:

<form action="login.do" method="post">

关于Java 应用程序后处理在 Eclipse Tomcat 中有效,但在本地 Tomcat 服务器上无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46061744/

相关文章:

java - 类对象的生命周期 : Java

php - 粘贴时如何禁用 Eclipse PDT 自动格式化代码

java - 告诉 gradle 包含同一工作区中的 Eclipse 项目

php - 带有 Eclipse PDT 的 CodeIgniter,是否可以进行干净的集成?

java - 如何从 url 中隐藏应用程序上下文?

java - 如何使用jsp在按钮的单击事件上设置struts bean的属性

java - 如何使用java和apache poi删除Excel中的空单元格

Java.lang.NoClassDefFoundError : com/fasterxml/jackson/databind/exc/InvalidDefinitionException

java - 由于状态消息为空,Spring SAML 单点登录 ADFS 响应失败

java - 为什么会出现这个未处理的 org.apache.tiles.impl.CannotRenderException?