【问题标题】:Website works locally, but when deployed on Tomcat server it no longer finds Servlets网站在本地工作,但是当部署在 Tomcat 服务器上时,它不再找到 Servlet
【发布时间】:2013-11-21 16:35:25
【问题描述】:

背景


我正在为学校做一个项目。目标是最终创建一个学习网站。到目前为止,我一直在本地创建我的网站并对其进行测试,因此我致力于将其放在服务器上进行测试(部署 .war 文件)。一旦我这样做了,整个网站似乎都无法正常工作。

问题


问题是,只要我尝试单击通过 servlet 的任何链接,我就会从 tomcat 收到一个错误,指出请求的资源不可用(http 状态 404)。这有点奇怪,因为它确实在本地工作。

我尝试了什么


我注意到的第一件事是访问服务器 .war 文件会首先访问快照 url(在我的情况下:http://145.92.6.85:8080/PDL-1.0-SNAPSHOT/),而不是立即登陆 index.jsp 页面(发生在本地)所以我的第一个以为它使用了一种完全不同的方式来访问我正在寻找的文件。再次奇怪,因为本地一切正常(也使用tomcat)。我查看了我的项目并尝试使用地图结构访问我正在寻找的文件,这似乎有效。因此,我没有使用我在 web.xml 上指定的 servlet,而是忽略它。

所以我决定它可能找不到我的 web.xml 文件。网上搜了一下,发现应该放​​在地图WEB-INF里面。目前 web.xml 位于 META-INF 中,因此将其放在 WEB-INF 中,但无济于事。我正在寻找的页面仍然无法找到。我还读到有人说项目的类(我假设是我的 servlet?)需要放在 WEB-INF 文件夹内的 classes 目录中。我决定不这样做,因为目前我已经将它们全部设置在不同的包中(源包 -> 控制器/模型等)。这对我来说似乎更合乎逻辑,而且它在本地工作,为什么这不能在服务器上工作?

据我所知,我的 web.xml 设置正确,但我会显示一些代码来说明问题所在。

代码


这是我要关注的 URL(在导航栏中)(关注:http://145.92.6.85:8080/PDL/inlog
<li>
    <a href="/PDL/inlog">Log In</a>
</li>

这是 web.xml

<servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>controllers.login</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

inlog.java 文件(在 Source Packages->controllers 或 PDL/src/main/java/controllers 内)

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    RequestDispatcher rd = request.getRequestDispatcher("/pages/inlog.jsp");
    rd.forward(request, response);
}

这是因为找不到它而中断的地方。


终于


在写这个问题时,我确实觉得我的 URL 和东西可能有点变化太大,也许应该比当前的静态更动态(因为我猜服务器环境不同)。任何人都可以给我一些关于如何使 url 更具动态性的提示,以便它们可以立即在本地和服务器上工作(类似于$_SERVER['SERVER_NAME'] 等的 PHP 等价物?任何帮助将不胜感激!虽然我觉得我重定向到的网址是我不知道如何解决的问题。

【问题讨论】:

    标签: java jsp tomcat servlets


    【解决方案1】:

    war 文件的名称是什么?是 PDL-1.0-SNAPSHOT.war 吗?您是否尝试访问 "www.ip 还是域名/PDL-1.0-SNAPSHOT/"?

    如果您的 war 文件具有版本名称,那么您必须编辑 Tomcat 配置文件以将 war 文件名称映射到上下文根目录。

    如果您使用的是 Tomcat 6,请参阅http://tomcat.apache.org/tomcat-6.0-doc/config/context.html 了解更多信息。

    【讨论】:

      【解决方案2】:

      好的,所以你弄乱了 web 应用程序的结构。

      我不知道你如何将它部署到本地服务器,但如果你将它打包成一个战争,你应该遵循简单的规则。 example of a valid structure

      【讨论】:

      • 谢谢,这似乎是我要找的。我有点觉得我的项目搞砸了(从未真正拥有或发现任何最佳实践)。这似乎很清楚,并且是设置它的好方法。我会继续尝试这个。
      • 我正在使用 Netbeans 创建这个应用程序,它会自动生成 war 文件。我检查了生成的 .war 文件的结构,它与您链接的文章相同。问题依然存在。
      猜你喜欢
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 2020-09-06
      • 1970-01-01
      相关资源
      最近更新 更多