Servlet在本地窗口上工作但不在Linux上工作

时间:2017-07-21 07:41:13

标签: java linux jsp tomcat servlets

我正在使用tomcat 8.5 + JSP文件构建一个java Web应用程序。

当我在本地Windows机器上运行servlet时,一切正常,但是当我将它部署到远程Linux(ubuntu 16.4)机器时,我只能进入主页 - 我点击它的每个链接应该通过控制器的工作无效。

我的控制器类:

public class Controller extends HttpServlet {

    private static final long serialVersionUID = 102831973239L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Controller() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            request.getRequestDispatcher("/home.jsp").forward(request, response);
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        String path = request.getPathInfo();

        switch (path)
        {
            case "/login":
                String res = "test";

                HttpSession session = request.getSession(false);
                session.setAttribute("result", res);
                response.sendRedirect(request.getContextPath() + "/home.jsp");
                break;
        }
    }
}

针对home.jsp:

<header id="header" >
    <h1>My site</h1>
     <br/>

    <form action="/controller/login" method="post">
        Enter ASOS link:<br>
        <input type="text" name="pdrUrl" required>
        <br><br>
        <input type="submit" value="Compare">
    </form>

    ${result}
</header>

当我单击表单元素上的提交按钮时,我被重定向到http://:8080 / controller / login

为什么它不像我的本地Windows机器那样通过控制器?

感谢。

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

    <servlet>
        <servlet-name>myServlet</servlet-name>
        <servlet-class>controller.Controller</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>myServlet</servlet-name>
        <url-pattern>/controller/*</url-pattern>
    </servlet-mapping>
    <error-page>
        <error-code>404</error-code>
        <location>/controller/error</location>
    </error-page>


</web-app>

2 个答案:

答案 0 :(得分:0)

尝试在表单操作中添加${pageContext.request.contextPath}

   <form action="${pageContext.request.contextPath}/controller/login" method="post">
        Enter ASOS link:<br>
        <input type="text" name="pdrUrl" required>
        <br><br>
        <input type="submit" value="Compare">
    </form>

答案 1 :(得分:0)

你的servlet类包名是Controller 但是,servlet类的类名也是controller

  1. 尝试将控制器名称更改为除以外的其他名称 包名称如MyController

  2. 如果它在您的控制器类中不起作用,请尝试在String path = request.getPathInfo();行后记录“path”变量。

  3. 在Linux系统上检查它是否等于“/ login”。

    只有当URL以“controller /”

    开头时,您的servlet控制器才有效

    希望这有帮助。