![](/img/trans.png)
[英]java SocketPermission only works in eclipse not in tomcat server
[英]Java application post action works in Eclipse Tomcat but does not work on local Tomcat server
我已经使用Maven在Eclipse中开发了一个Java Web应用程序,其构建目标为“ tomcat7:run”,以便在Eclipse中运行该应用程序。 我现在已经开始从Eclipse导出.war文件,在本地Tomcat服务器上尝试用户启动的发布命令时,我看到一些不同的行为。 用户访问http:// localhost:8080 / qa(.war文件称为qa.war)时,用户将访问的第一个.jsp不会出现问题。 当执行发布命令时,我的应用程序找不到在form标记中指定的“ /login.do”文件。
我的猜测是,servlet映射存在某些问题。 请注意,我已经通过访问http:// localhost:8080 / qa访问了本地Tomcat服务器上的Web应用程序,并且尚未对其进行配置,以便在访问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>
难怪服务器为什么返回404。您试图从表单中获取/login.do
uri,因此在导航时会变成http://localhost:8080/login.do
:此URL缺少应用程序上下文 “ qa”。 简而言之:您必须放下斜杠。 随它去:
<form action="login.do" method="post">
我尝试了一些似乎有效的方法:
..
<!--<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>-->
这看起来已经引起很多问题
将我的.war打包在Eclipse中,然后将其重命名为ROOT.war并将其放置在Tomcat Web应用程序文件夹中。 Eclipse中的Tomcat与我的本地Tomcat服务器之间的差异是,我的应用程序通过访问“ http:// localhost:8080”而不是“ http:// localhost:8080 / qa”在Eclipse中运行,因此这样做似乎有所帮助
执行完这两个修复程序后,我很难重现问题,因此无法确认将表单操作从“ /login.do”修改为“ login.do”是否可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.