Ubuntu18.0 環境SpringMVC工程搭建遇到的問題

1. org.apache.jasper.JasperException: java.lang.IllegalStateException: No output folder

關於這個原因主要是權限的問題,在tomcat/work/Catalina/localhost/,主要是這個目錄沒有被讀寫的權限,導致文件不能被編譯到該指定的工作目錄中,此時我們就要針對與這個目錄做一些權限的修改權限至少要達到755或者以上,同時注意此處修改權限必須用root身份進行操作,否則不能進行修改,修改完後編譯好的jsp文件就在localhost的目錄當中了。發現了問題在於work/Catalina/localhost/中無法生成對應文件,把tomcat整個目錄、work整個目錄都修改了權限仍然不行。最後到具體的目錄tomcat/work/Catalina/localhost/進行修改權限OK。

 我遇到的這個報錯,是因爲使用root啓動過一次服務,後來用其他用戶進行服務的啓動,而在啓動之前沒有刪除tomcat/work/目錄下的內容,該目錄下還是存在屬主爲root用戶的Catalina目錄,在使用其他用戶執行啓動時,由於該Catalina已存在,就不再重新創建,而是增量修改該目錄,但是由於其他用戶沒有權限修改屬主爲root的目錄和文件,因此報錯。建議在每次停tomcat成功後,刪除tomcat/work/*;如果不想每次都刪除,一定要保證每次啓動tomcat使用的用戶要嚴格正確。

以上引自:https://blog.csdn.net/huangjin0507/article/details/46342835

2. 嚴重: Servlet.service() for servlet [jsp] in context with path [/xxx] threw exception

這種情況是由於Maven配置了tomcat,但是沒有在Maven項目中導入jsp-api的jar包的時候,此時eclipse會報錯,導入jar包之後eclipse不會報錯,但運行的時候會自動把tomcat中jsp-api和javax.servlet-api一起導入,導致jar包重複了,就會出現如上問題。

解決辦法:在pom.xml文件下修改jsp-api的座標如下
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>   <!-- 配置這一項,運行的時候不會重複導入jsp-api的jar包 -->
</dependency>
同樣javax.servlet-api的座標也需要配置<scope>provided</scope>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>${servlet.version}</version>
    <scope>provided</scope> <!-- 配置這一項,運行的時候不會重複導入servlet-api的jar包 -->
</dependency>

以上引自:https://blog.csdn.net/qaz379222123/article/details/99983864

3. Servlet url-pattern 的匹配規則

  1. servlet容器中的匹配規則既不是簡單的通配,也不是正則表達式,而是特定的規則。所以不要用通配符或者正則表達式的匹配規則來看待servlet的url-pattern。
  2. Servlet 2.5開始,一個servlet可以使用多個url-pattern規則,<servlet-mapping>標籤聲明瞭與該servlet相應的匹配規則,每個<url-pattern>標籤代表1個匹配規則;
  3. 當servlet容器接收到瀏覽器發起的一個url請求後,容器會用url減去當前應用的上下文路徑,以剩餘的字符串作爲servlet映射,假如url是http://localhost:8080/appDemo/index.html,其應用上下文是appDemo,容器會將http://localhost:8080/appDemo去掉,用剩下的/index.html部分拿來做servlet的映射匹配
  4. url-pattern映射匹配過程是有優先順序的
  5. 而且當有一個servlet匹配成功以後,就不會去理會剩下的servlet了。

以上引自:https://www.cnblogs.com/whyat/p/10512191.html

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