WebRoot到底是什麼鬼?我改它的名可以嗎?

關於web項目的一些總結:

  1. WebRoot下的WEB-INF的內容是無法直接訪問的,必須通過服務器的轉發操作纔可以訪問。

    request.getRequestDispatcher("/WEB-INF/hello.jsp").forward(req, resp);
    

    通過測試發現WebRoot下的其他路徑(包括子文件夾)是可以隨意訪問的。

  2. 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…

  3. java Build PathWeb Deployment Assembly的區別 是 什麼?

​ 首先呢?我們從字面意思理解,java Build Path當然就是 java的編譯路徑,那麼就很好理解了,這個選項是設置,java程序的編譯生成的classes,jar包啊,資源們的輸出目錄,編譯器給我們編譯,總得需要個目錄吧。所以這個選項的作用就是 設置編譯後的文件的位置。

​ 而Web Deployment Assembly就是 當編譯器替我們把 web 項目部署到Tomacat上面,放到web應用下的哪個目錄呢?於是乎,就有了Web Deployment Assembly兩個的本質區別就是一個是設置輸出本地編譯的位置,一個是設置存放在web應用下的位置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章