在servlet容器中,相对网址和绝对网址之间有什么区别?例如,如果在webinf文件夹下有一个名为forum.jsp的jsp。当我要分派当前请求从当前的JSP文件是相同的WEB-INF文件夹下的JSP,如下正确的方法相对网址和绝对网址差异
/forum.jsp
相对URL是指相对于WEB-INF文件夹或到jsp位置。
在servlet容器中,相对网址和绝对网址之间有什么区别?例如,如果在webinf文件夹下有一个名为forum.jsp的jsp。当我要分派当前请求从当前的JSP文件是相同的WEB-INF文件夹下的JSP,如下正确的方法相对网址和绝对网址差异
/forum.jsp
相对URL是指相对于WEB-INF文件夹或到jsp位置。
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 error
。 J2EE
只在该文件夹下查找类和库。
绝对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);
你的答案的最后一部分是错误的。 '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
无法直接从客户端访问WEB-INF及其子文件夹中的内容,但在您分派它时(转发或重定向) – 2010-08-29 00:32:58