2010-08-28 74 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