關於web項目的一些總結:
-
WebRoot下的
WEB-INF
的內容是無法直接訪問的,必須通過服務器的轉發操作纔可以訪問。request.getRequestDispatcher("/WEB-INF/hello.jsp").forward(req, resp);
通過測試發現WebRoot下的其他路徑(包括子文件夾)是可以隨意訪問的。
-
WebRoot
到底是個什麼東西?爲什麼我們放入資源就可以訪問了呢?也沒有配置servlet
啊?這都是編譯器的功勞,首先呢,右鍵web項目點擊
Properties
,接着找到Deployment Assembly
,如下圖:我們可以很清楚的看到,
WebRoot
的資源默認是放入根路徑的,這個根路徑在哪呢?就是Tomcat
路徑下的webapps/
當前web應用,因爲我們的web程序不就是發佈到Tomcat
上嗎?所以這個也很好理解。同時再解釋一下,爲什麼 靜態資源就可以打開了?因爲 Tomcat 匹配一個路徑,是先掃描是否存在該文件,如果存在,則返回,如果不存在,則匹配Servlet路徑,如果沒有匹配到Servlet-url,那麼則返回404頁面。還可以看到,我自己創的
resources
文件夾,默認會被部署到web應用下的/WEB-INF/classes
,大家都知道WEB-INF
下的資源是無法被直接訪問的,所以我的Resources
下的靜態資源並不能被訪問到,但是我們可以把他的部署目錄修改 成部署到 項目的根目錄即可。其實WebRoot並不特殊,我完全可以把他改成任意的名字,只要發佈的路徑是 web項目的根路徑就行了。
還有一些小夥伴使用
maven
的方式創建web工程,爲什麼本地不報錯,但是部署到Tomcat運行就報錯了呢?,提示找不到jar包,最大的可能就是,檢查一下Web Deployment Assembly
,看看是否裏面包含了maven的庫。我們需要把maven的庫也一起部署到應用下面啊,不然當然會提示Class Not Found… -
java Build Path
與Web Deployment Assembly
的區別 是 什麼?
首先呢?我們從字面意思理解,java Build Path
當然就是 java的編譯路徑,那麼就很好理解了,這個選項是設置,java程序的編譯生成的classes,jar包啊,資源們的輸出目錄,編譯器給我們編譯,總得需要個目錄吧。所以這個選項的作用就是 設置編譯後的文件的位置。
而Web Deployment Assembly
就是 當編譯器替我們把 web 項目部署到Tomacat上面,放到web應用下的哪個目錄呢?於是乎,就有了Web Deployment Assembly
。兩個的本質區別就是一個是設置輸出本地編譯的位置,一個是設置存放在web應用下的位置。