我想知道是否有人有解決方案通過servlet訪問網站的資源。 我有我的所有資源在WEB-INF下。換句話說,我不希望用戶直接訪問我的任何資源。通過servlet訪問資源(CSS,HTML,圖像,JS)
3
A
回答
5
您可以使用ServletContext#getResource()
。
URL resource = getServletContext().getResource("/WEB-INF/file.ext");
File file = new File(resource.getPath());
// ...
你甚至可以使用ServletContext#getResourceAsStream()
獲得一個InputStream
直接:
InputStream input = getServletContext().getResourceAsStream("/WEB-INF/file.ext");
// ...
正如你在例子中看到,該ServletContext
是由繼承GenericServlet#getServletContext()
方法的servlet可用。
也就是說,短語我不希望用戶有我的任何資源的直接訪問。有點矛盾。無論如何,您是通過servlet來提供這些資源的?一個servlet可以通過URL直接訪問。這與「直接訪問」有什麼不同?或者你只是想根據某些條件來控制訪問?我會說,Filter
更適合這個任務。
通常只能完全隱藏JSP文件以免直接訪問。在作爲前端控制器(根據MVC模式)的Servlet中,您可以使用RequestDispatcher#forward()
將請求轉發到JSP文件,然後您可以通過ServletRequest#getRequestDispatcher()
獲取這些請求。
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
0
您可以從最終用戶隱藏jsp。事實上,你甚至不用來部署Web應用程序原有的jsp文件,你可以預編譯它們:
http://tomcat.apache.org/tomcat-5.5-doc/jasper-howto.html#Web%20Application%20Compilation
,並隱藏HTML/JS的必由之路/ css文件沒有使用它們。任何發送到瀏覽器的內容都可以在那裏查看。
相關問題
- 1. 通過URI訪問圖標資源VB.NET
- 2. 笨 - 加載圖像,CSS,JS,視頻(網絡資源)到HTML
- 3. 在html中訪問資源(圖片等)
- 4. 通過OAuth訪問所選資源
- 5. 訪問項目資源中的圖像?
- 6. 如何通過NSBundleResourceRequest下載後訪問資源目錄(圖片)?
- 7. 如何通過javascript訪問「資源」中的「圖片」
- 8. 從AWS Lambda JS SDK訪問EC2資源
- 9. 訪問資源
- 10. grails生成css/js資源
- 11. 在Wicket 1.5.3中緩存圖像,CSS和JS資源
- 12. 使用PrettyFaces的JSF資源(CSS,JS,圖像)的漂亮網址
- 13. 包含靜態資源,如圖像,CSS,JS等在測試
- 14. 如何忽略公共資源的Servlet過濾器(.js .css文件)
- 15. 通過標籤訪問圖像視圖
- 16. 如何訪問html資源文件?
- 17. 從html文件訪問資源
- 18. Node.js,Express和css,js,圖像資產
- 19. 通過https NOT http加載網頁資源(js,css,圖片等)https(https)
- 20. 同一資源的問題,可通過兩條路線訪問
- 21. HTML - JS如何通過點擊打開圖像彈出圖像?
- 22. 的JavaFX的WebView:從資源文件夾,HTML加載CSS /圖像
- 23. Grails - 在CSS中獲取圖像資源
- 24. 通過servlet訪問GWT POST參數?
- 25. 不通過struts2.xml訪問servlet?
- 26. 通過端口限制訪問到Servlet
- 27. 通過Java servlet訪問heroku和neo4j
- 28. 使Servlet成爲READONLY文本/ html資源
- 29. 訪問JAR資源
- 30. 訪問JAR資源
我以爲原來的問題是,「我不希望用戶能夠通過輸入直接的URL在瀏覽器中查看資源」。把你想要阻止「直接訪問」的文件放到WEB-INF中,讓servlet訪問資源聽起來像是「最佳實踐」。 – WineSoaked 2010-05-09 02:36:00
@WineSoaked:通常關心的只是JSP文件,因爲您想在完全MVC控制的應用程序中隱藏視圖。但對於像CSS/HTML/Images/JS這樣的靜態資源?不,問題的解決方式不同。由於實際的功能要求並不清楚,所以只是不清楚*如何。 – BalusC 2010-05-09 02:37:33
你說得很好。但是,如果servlet在運行時生成資源(即使我不同意這種做法,我的經驗並非前所未聞)?如果有這些CSS/HTML/JS /等的片段。通過一個servlet處理,這是一個合理的用法。但是,如果您只是將沒有做任何事情的WEB-INF中的字節傳給瀏覽器,那麼這個servlet就扮演了一個代理角色,而這個代理角色是不合適的。 – WineSoaked 2010-05-09 03:11:14