【问题标题】:Can't deploy application to Tomcat无法将应用程序部署到 Tomcat
【发布时间】:2013-05-14 14:27:53
【问题描述】:

我尝试从 Tomcat 7 开始。
我在 Eclipse 中创建了应用程序。这是我的 web.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID" version="2.4">

<welcome-file-list>
 <welcome-file>
  view.jsp
 </welcome-file>
</welcome-file-list>

<servlet>
 <servlet-name>myServlet</servlet-name>
 <servlet-class>/servlets/myServlet</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>myServlet</servlet-name>
 <url-pattern>/myServlet</url-pattern>
</servlet-mapping>
</web-app>

我从 Apache 的站点下载了最新的 Tomcat,并将 JAVA_HOME 添加到 catalina.bat。启动 Tomcat 后,我​​进入 Manager app 并选择了我的应用程序,但得到了 404。在地址行中 - http://localhost:8080/ThreeRest/
另一个奇怪的事情是应用程序没有部署到webapps 目录,而是部署到wtpwebapps 文件夹。

tomcat-users.xml 的另一个问题。如果我添加这个:

<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<user username="tomcat" password="tomcat" roles="admin,manager,manager-gui"/>

它只在一个会话中起作用。当我停止 tomcat 时,它会从文件中删除。

【问题讨论】:

  • 你是直接从eclipse部署应用吗?
  • @Himanshu Bhardwaj:是的。我在Run As 菜单中单击Run on Server
  • stackoverflow.com/questions/3515089/… 这将解决一些查询。
  • @Himanshu Bhardwaj:我已经在Pascal Thivent 回答中设置了单选按钮。但是这个单选按钮组无论如何都已禁用。
  • 让我们一步一步调试。如果您手动将您的网络应用程序移动到 webapps 文件夹中,您可以访问它吗? (现在尝试删除与身份验证相关的内容。)

标签: java tomcat


【解决方案1】:

&lt;servlet-class&gt; 应该是

<servlet-class>servlets.myServlet</servlet-class>

因为您在此处指定的是包而不是路径。

请注意,您必须通过以下任一方式访问您的网站

http://localhost:8080/ThreeRest/myServlet

http://localhost:8080/ThreeRest/

view.jsp 在您的网络应用的根文件夹中。

编辑: 部署后,您的 Web 应用程序的文件夹结构应如下所示:(/ 表示目录)

tomcat-home/
 |- webapps/
   |- rest/ //<-- Context-Root (Web-app's name)
     |- view.jsp //<-- *.html, *.jsp files
     |- WEB-INF/
        |- web.xml
        |- lib/
          |- *.jar files
        |- classes/ //<-- ALL your servlets go here
          |- servlets/ //<-- with the required package/folder structure
            |- myServlet.class

【讨论】:

    【解决方案2】:

    好的,一个示例配置,用于 servlet 声明:

    假设您正在创建一个 servlet(HelloServlet 位于包 x.y.z 中):

    所以代码是这样的:

    package x.y.z;
    
    //imports here
    
    public class HelloServlet extends HttpServlet {
    
    ....Code here
    
    }
    

    现在在 web.xml 中,如果我想映射这个 servlet,我将执行以下操作:

     <servlet>
         <servlet-name>myservlet</servlet-name>
         <servlet-class>
               x.y.z.HelloServlet
         </servlet-class>
     </servlet>
    
     <servlet-mapping>
         <servlet-name>myservlet</servlet-name>
         <url-pattern>/myservlet</url-pattern>
     </servlet-mapping>
    

    这就足够了,一旦应用程序部署在tomcat中,说上下文名称是 testservlet ,那么我可以访问这个servlet:

     http://<ip>:<port on which tomcat is running>/testservlet/myservlet
    

    【讨论】:

    • 感谢您的配置。我尝试访问http://localhost:8080/rest/myServlet/ 并获得空白页。如果我有view.jsp 作为主站点页面如何访问它?
    • @KliverMax 你不能在myServlet 之后有/,而且你的应用程序的名称不是ThreeRest?请确认您在所有地方都使用相同的名称,即如果rest webapps 下您的应用程序文件夹也应该是rest
    • @Ravi Thapliyal:现在我通过 WAR 文件进行部署。所以在 tomcat 应用程序名称 = WAR 文件的名称。我有成功。我从 WEB-INF 文件夹中删除 view.jsp 并将其放入 WebContent 目录。我可以通过http://localhost:8080/rest/view.jsp 访问它。
    • @KliverMax 好。 (在我的回答中已经提到了view.jsp。)现在只需按照我的最后两个问题来访问您的myServlet
    猜你喜欢
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2012-12-01
    • 2015-10-25
    相关资源
    最近更新 更多