2010-08-28 71 views
1

在servlet容器中,相对网址和绝对网址之间有什么区别?例如,如果在webinf文件夹下有一个名为forum.jsp的jsp。当我要分派当前请求从当前的JSP文件是相同的WEB-INF文件夹下的JSP,如下正确的方法相对网址和绝对网址差异

/forum.jsp

相对URL是指相对于WEB-INF文件夹或到jsp位置。

回答

2

Absolute URL是:http://stackoverflow.com/questions/3591899/relative-url-and-absolute-url-difference

相对URL是:/questions/3591899/relative-url-and-absolute-url-difference

此外,relative URL可以只是:../questions/3591899/relative-url-and-absolute-url-difference根据其中的链接页面位于...

./3591899/relative-url-and-absolute-url-difference如果链接页面位于questions的文件夹

我会建议始终使用Relative URL ...它去努力,不断尝试使用它们...


一个问题,为什么你的JSP是在WEB-INF/文件夹?

您无权访问WEB-INF文件夹下的JSP,如果尝试访问它,服务器将抛出一个404 errorJ2EE只在该文件夹下查找类和库。

+3

你的答案的最后一部分是错误的。 'RequestDispatcher'可以很好地访问'/ WEB-INF'中的资源。将JSP文件放在那里的目的是将它们从**直接访问**中隐藏起来(正如你所说的,你将得到一个404),这样最终用户被迫使用一个servlet来请求JSP文件。这有更多的优势,比如使用SEO友好的URL,前端控制器模式,MVC模式等等。另见[这个答案](http://stackoverflow.com/questions/2523430/hidden-features-of-jsp-servlet/2525995#2525995)。 – BalusC 2010-08-28 20:22:54

+0

无法直接从客户端访问WEB-INF及其子文件夹中的内容,但在您分派它时(转发或重定向) – 2010-08-29 00:32:58

1

绝对URL是包含该方案的URL(例如http:)。相对URL不包含该方案,因此依赖于当前上下文。

如何解释相对URL有点复杂。它完全取决于URL使用的上下文。例如。在网页浏览器中,在servlet中,甚至在本地磁盘文件系统中(java.io.File等)。

当在servlet上下文说话,当相对URL与/启动时,它会即WebContent文件夹的根目录,那里的/WEB-INF文件夹,并在那里都被置于所有的JSP文件相对于上下文根( )。

所以,当你想将请求转发到/WEB-INF/forums.jsp,那么你只需要指定这样:

request.getRequestDispatcher("/WEB-INF/forums.jsp").forward(request, response); 

但是,当一个相对URL不/开始,那么这将是相对于当前的请求URL。因此,当请求URL是例如http://example.com/context/servlets/servletname并使用相对URL forums.jsp,那么下面

request.getRequestDispatcher("forums.jsp").forward(request, response); 

实际上会指向http://example.com/context/servlets/forums.jsp