tomcat 中沒法添加項目等問題的解決方案

博客地址:http://www.moonxy.comhtml

1、前言java

今天新建了一個 maven 項目,添加程序文件以後,發現沒法添加項目,而後修改配置,將應用添加到了 tomcat,啓動時又報錯,解決出現的錯誤後,再啓動,又發現找不到首頁,而後也須要設置一下,訪問到首頁以後,修改後的 jsp 和 java 文件等不能實時編譯生效,而後還有中文亂碼的問題,通過一番努力終於解決了,現作以下概括。web

2、解決方案數組

2.1 tomcat 沒法添加工程瀏覽器

右鍵 tomcat,Add and Remove...,沒法找到項目,以下:tomcat

咱們回到項目目錄,選擇須要添加的項目,右鍵選擇 Properties 選項,也能夠直接按住快捷鍵 Alt+Enter 打開 Properties 對話框。服務器

在左側,點擊 Project Facetsapp

在右邊勾選如圖示的三項:Dynamic Web Module、Java、JavaScript。點擊 Apply,Apply and Close,等待更新配置結束,會自動退出。eclipse

再次給 tomcat 添加項目,發現已經顯示在了左邊,以下:webapp

這樣,就可將項目添加到 tocmat 中了。

2.2 tomcat 啓動時報錯

tomcat 啓動時報錯:Failed to start component [StandardEngine[Catalina].StandardHost[localhost].

出現這個錯誤,多半狀況是找不到依賴的 jar 包。

進入項目的 Properties 對話框,左側點擊 Deployment Assembly,進入以下界面:

點擊 Add...,選擇 Java Build Path Entries,以下:

點擊 Next,選擇 Maven Dependencies,點擊 Finish,以下:

點擊 Apply 以後,就能夠正常啓動 tomcat 了。

2.3 啓動 tomcat 後,發現沒法訪問首頁

訪問項目 http://localhost:8080/esnews/,發現沒法訪問首頁,首先想到的是在 web.xml 中沒有配置默認首頁,以下檢查 web.xml:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>esnews</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

發現 web.xml 配置了首頁,而後找到項目在 tomcat 中的部署目錄:

 點擊進入項目以後,發現沒有 jsp 文件。

首先確保編譯配置正常,以下:

test 下的目錄編譯到 target/test-classes,其餘編譯到 target/classes 目錄便可,其餘通常默認不須要改變什麼。

而後進行部署的配置,繼續進入 Deployment Assembly,點擊 Add...,選擇 Folder,以下:

添加項目的 jsp 文件所在的 webapp 目錄,以下:

 點擊 Apply 應用以後,重啓 tomcat,再次訪問項目,發現能夠正常訪問了。

2.4 修改 jsp 和 java 文件後,不能實時編譯生效

tomcat 啓動後,在 eclipse 中 編輯 jsp 和 java 文件,發現不能實時編譯生效。

1)確保開啓自動編譯

2)確保開啓 tomcat 中的自動發佈

開啓自動發佈以後,修改的 jsp 會當即生效,tomcat 不會重啓;修改 java 文件後,tomcat 會自動重啓。

3)關閉 tomcat 的自動重啓

將對應項目的 Context 標籤中的 reloadable 設置爲 false,這樣在 修改 java 文件後會自動編譯,tomcat 不會自動重啓,但在 tomcat 中會即時生效。

2.5 servlet 獲取中文參數亂碼

request 請求參數出現的亂碼問題

get 請求:

對於 URL 中的中文參數,瀏覽器會對中文進行 urlencode,轉爲16進制進行傳輸,tomcat 不會再對數據進行編碼,只會解碼,默認按照 8859-1 進行解碼,而後經過.getBytes("ISO-8859-1") 編碼(還原傳遞過來的16進制數組),再經過 UTF-8 解碼。流程就是:urlencode編碼(utf-8)--> tomcat 解碼(ISO-8859-1) --> 自行編碼(ISO-8859-1,至關於還原)--> 解碼(utf-8)。

tomcat 8 以前的默認編碼是 ISO-8859-1,而 tomcat 8 的默認編碼爲 utf-8。

post 請求:

post 請求方式的參數是在請求體中,相對於 get 請求簡單不少,沒有通過 urlencode 這一步的編碼過程,因此只須要在服務器端,設置服務器解碼的碼錶跟瀏覽器編碼的碼錶是同樣的就好了,在這裏瀏覽器使用的是 UTF-8 碼錶編碼,那麼服務器端就設置解碼所用碼錶也爲UTF-8 就能夠了。

設置服務器端使用 UTF-8 碼錶解碼

request.setCharacterEncoding("UTF-8"); //命令 Tomcat 使用 UTF-8 碼錶解碼,而不用默認的 ISO-8859-1 了。

因此在不少時候,在 doPost 方法的第一句,就是這句代碼,防止獲取請求參數時亂碼。

總結請求參數亂碼問題

get 請求和 post 請求方式的中文亂碼問題處理方式不一樣

get:請求參數在請求行中,涉及了 http 協議,手動解決亂碼問題,,其原理就是進行兩次編碼,兩次解碼的過程

new String(xxx.getBytes("ISO-8859-1"),"UTF-8");

post:請求參數在請求體中,使用 servlet API 解決亂碼問題,其原理就是一次編碼一次解碼,命令 tomcat 使用特定的碼錶解碼。

request.setCharaterEncoding("UTF-8");

使用 request.setCharacterEncoding() 只能用來處理 POST 請求,對 GET 則無效。

固然也可使用 GBK,可是建議使用 UTF-8:

通常默認安裝的tomcat應用服務器的接收get方式提交的數據是以ISO-8859-1方式處理的,假如服務器接收的url連接是以gbk方式加密的。那麼你須要解碼才能對上邊的中文進行正確的識別。不然你服務器接收到的就是亂碼。通常的解碼操做的方法是new String(request.getParameter("zhongwen").getBytes("ISO-8859-1"),"GBK"),意思就是將獲取的數據轉成GBK。

若是你不想進行解碼操做,那麼有一種方案就是將服務器的接收方式直接設定成 GBK,這個時候就不須要進行轉碼了。直接 request.getParameter("zhongwen"); 就能獲取正確的通過gbk編碼過的數據。

具體操做方式,在 tomcat/conf/server.xml 中增長一個配置參數:URIEncoding="GBK"(此處是針對gbk編碼的設定)

最終更改文件的位置在:

<Connector port="80" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>

就是在你更改 tomcat 端口的地方。Connector 上增長這麼一個參數就 ok 了。

2.6 Java 文件路徑錯誤致使沒法編譯

有時候 Java 文件的編輯器打開時會出現以下狀態,顯示的是 "空心J"

並且該 Java 沒法編譯,使用的編輯器也不對,出現這種狀況的緣由就是,當前 Java 文件所處的目錄不對,致使文件沒法被編譯到 classpath 中。

修改 Java 文件目錄後打開,顯示 "實心J"正常。

相關文章
相關標籤/搜索