我正在使用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>
答案 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
。
尝试将控制器名称更改为除以外的其他名称
包名称如MyController
。
如果它在您的控制器类中不起作用,请尝试在String path = request.getPathInfo();
行后记录“path”变量。
在Linux系统上检查它是否等于“/ login”。
只有当URL以“controller /”
开头时,您的servlet控制器才有效希望这有帮助。