我使用 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.do
uri,它变成了 http://localhost:8080/login.do
导航时:此 URL 缺少应用程序上下文“qa”。简而言之:您必须去掉前导斜线。让它成为:
<form action="login.do" method="post">
关于Java 应用程序后处理在 Eclipse Tomcat 中有效,但在本地 Tomcat 服务器上无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46061744/