Java应用程序发布操作在Eclipse Tomcat中有效,但在本地Tomcat服务器上不起作用

时间:2017-09-05 19:05:27

标签: java eclipse jsp tomcat servlets

我使用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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我尝试了一些似乎有效的方法:

  1. 我从web.xml中删除了servlet映射
  2. ...

    <!--<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>-->
    

    这看起来造成了很多问题

    1. 在Eclipse中打包我的.war,然后将其重命名为ROOT.war并将其放在Tomcat web apps文件夹中。 Eclipse中的Tomcat和我的本地Tomcat服务器之间的一个差异是我的应用程序是通过访问&#34; http:// localhost:8080&#34;在Eclipse中运行的。而不是&#34; http:// localhost:8080 / qa&#34;,所以这样做似乎有帮助

    2. 执行这两个修复后,我很难再现这个问题,所以无法确认是否修改了表格操作&#34; /login.do"到&#34; login.do&#34;解决了这个问题。