我使用Maven在Eclipse中开发了一个Java Web应用程序,并在Eclipse中运行了“tomcat7:run”的构建目标。我现在开始从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
答案 0 :(得分:0)
难怪为什么服务器返回404.您正试图从表单中获取/login.do
uri,导航时变为http://localhost:8080/login.do
:此URL缺少应用程序上下文“qa”。简而言之:你必须放弃领先的斜杠。让它成为:
<form action="login.do" method="post">
答案 1 :(得分:0)
我尝试了一些似乎有效的方法:
...
<!--<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>login.do</url-pattern>
</servlet-mapping>-->
...
<!--<servlet-mapping>
<servlet-name>RunTestServlet</servlet-name>
<url-pattern>/runtest.do</url-pattern>
</servlet-mapping>-->
这看起来造成了很多问题
在Eclipse中打包我的.war,然后将其重命名为ROOT.war并将其放在Tomcat web apps文件夹中。 Eclipse中的Tomcat和我的本地Tomcat服务器之间的一个差异是我的应用程序是通过访问&#34; http:// localhost:8080&#34;在Eclipse中运行的。而不是&#34; http:// localhost:8080 / qa&#34;,所以这样做似乎有帮助
执行这两个修复后,我很难再现这个问题,所以无法确认是否修改了表格操作&#34; /login.do"到&#34; login.do&#34;解决了这个问题。