网站在本地工作,但在Tomcat服务器上部署时,它不再查找Servlet

时间:2013-11-21 16:35:25

标签: java jsp tomcat servlets

背景

<小时/> 我正在为学校做一个项目。目标是最终创建一个学习网站。我一直在本地创建我的网站并且到目前为止测试它很好,所以我专注于将它放在服务器上以测试它(部署.war文件)。一旦我这样做,整个网站似乎都无法运作

问题

<小时/> 问题是,当我尝试点击任何通过servlet的链接时,我从tomcat收到错误,说明所请求的资源不可用(http状态404)。这有点奇怪,因为它在本地工作

我尝试了什么

<小时/> 我注意到的第一件事就是去服务器.war文件首先进入快照网址(在我的情况下: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目录中。我决定不这样做,因为目前我已经将它们全部设置在不同的包中(源包 - &gt;控制器/模型等)。这似乎对我来说更合乎逻辑,除了它在本地工作之外,为什么这在服务器上不起作用?

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

代码

<小时/> 这是我要关注的网址(在导航栏中)(如下: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-&gt; 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和东西可能有点过于变化,也许应该比当前的静态更动态(因为服务器环境不同我猜)。任何人都可以给我一些提示,如何使网址更具动态性,这样他们就可以在本地和服务器上直接工作(类似PHP的等同于$_SERVER['SERVER_NAME']之类的东西?任何帮助都将不胜感激!我觉得重定向到的网址是我不知道如何解决的问题。

2 个答案:

答案 0 :(得分:0)

好的,所以你搞乱了网络应用程序的结构。

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

答案 1 :(得分:0)

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以获取更多信息。