【发布时间】: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 等价物?任何帮助将不胜感激!虽然我觉得我重定向到的网址是我不知道如何解决的问题。
【问题讨论】: