1. 程式人生 > >搭建tomcat伺服器,目標可通過外網ip訪問本機

搭建tomcat伺服器,目標可通過外網ip訪問本機

最近學習了一些微信的開發者方面的東西,申請了一個阿里雲,因為一些原因,不能在阿里雲直接佈置伺服器,只能通過遠端控制主機來佈置,雖然我也不明白為什麼我一個前端要去弄那些,但是也算收穫一些東西了。記錄一下。

以下主要內容有: 

1 . 如何把tomcat從localhost:8080訪問變成可以在變的計算機通過域名173.168.0.1(亂寫的)去訪問

2. tomcat的servlet的使用(使用JavaEE for Web的IDE其實在使用servlet上會吃一些苦頭)

3. servlet的WEB-INF目錄下的classes目錄到底有什麼存在的必要?

4.附帶一些微信的驗證token和access token的具體操作(這兩天在這裡面吃了苦頭,希望可以對用tomcat的朋友有些作用吧)

1.修改tomcat的server.xml,把計算機變成伺服器.

1、首先你要確定你有一個外網ip地址。如果你分配到的是一個區域網IP地址需要經過一系列的轉換為外網ip地址,然後繼續下面操作。

2、拿到外網IP地址,進行tomcat的server.xml檔案的配置。主要進行下面三個地方的配置(本次配置採用的tomcat版本號是7.0.30)

      1) <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

               將port埠改為80,基於http協議一般是通過80埠訪問的(微信只支援80埠)

               如果不修改,通過ip訪問就需要 http://192.168.1.2:8080

     2)<Engine name="Catalina" defaultHost="192.168.1.2">

            將defaulHost的localhost改變為你自己的外網ip地址,提供給外面訪問。

     3)<Host name="192.168.1.2" appBase="webapps" unpackWARs="true" autoDeploy="true">

           <Context path="/" docBase="D:/tomcat

" reloadable="true" crossContext="true"></Context>

           將Host 裡的name改為外網IP地址,同時在該標籤里加入Context標籤

           path 代表訪問的虛擬路徑,docBase代表的是實際專案路徑

           我們知道,web.xml裡面的<welcome-file>設定第一個是index.html ,意思是如果訪問伺服器直接輸入ip地址而沒有指明任何檔案的時候,會自動訪問index.html的檔案

            ocBase="D:/tomcat"的設定,當我們在別的計算機輸入伺服器域名(如192.168.1.2)時,會訪問伺服器D盤下,tomcat資料夾裡面的index.html

            這就是專案路徑,可以隨意修改。

經過上面三步的配置,已經實現了伺服器的配置。我們就可以啟動Tomcat,此時通過ip地址可以直接訪問該專案啦。


2. servlet的使用

        在很久以前,我看新浪體育的頁面,發現地址上面區別於其他網站,新浪的地址是沒有任何html,jsp,php這樣的字尾的,後來學樂servlet才知道,那就是servlet的對映

<servlet>
<servlet-name>suibian</servlet-name>
<servlet-class>com.gc.action.CoreServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>suibian</servlet-name>
<url-pattern>/ABCDEFG</url-pattern>
<pre name="code" class="html"><servlet-mapping>

以上就是servlet的對映,寫在WEB-INF目錄下的web.xml,分為兩部分servlet對映路徑的指定 mapping攔截路徑  

注意:以上順序不能改,servlet定義必須在mapping之前。

因為網上已經說幾萬遍了,我再記錄多一遍吧:

1)兩個<servlet-name>必須一樣,至於內容是什麼可以亂起,不要求存在suibian這個.java或.class檔案,只是為了規範我們一遍會起coreServlet

2)<url-pattern>表示攔截路徑,當我們輸入http://192.168.2.1/ABCDEFG  的時候,web.xml會發現自己的url-pattern中有一個也叫 ABCDEFG,於是找到 servlet-mapping的servlet-name ,再找servlet的servlet-name(所以這兩個要一樣),然後找servlet得servlet-class進行訪問,這樣就是servlet的攔截-訪問

注意了,那麼<servlet-class>裡面的com.gc.action.CoreServlet在哪裡呢? 是什麼呢?

因為IDE的問題,現在的JavaEE for WEB工具在建立專案的時候,會把預設的編譯路徑(也就是產生.class檔案的路徑)存放在上圖中的build資料夾裡面,所以我們在建立完專案後,還需要在WEB-INF專門建一個classes目錄,然後  右鍵專案——Properties——Java Build Path——Source——在最下面的"Default output folder"下把原來的Build/classes改為 WebContent/WEB-INF/classes ,表示我們變Servlet編譯.java檔案產生的.class檔案存放在WEB-INF下的classes裡面。

好了。如果你做了以上的時候,你在瀏覽器裡面輸入192.168.2.1/ABCDEFG後,還是不能跳轉的com.gc.action.CoreServlet的話,有2個原因:

1)tomcat的config下,web.xml裡面的有一個

<init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
</init-param>
把false改為ture;

2)如果你的專案名叫"work",那麼你想在瀏覽器看見被攔截後轉向的servlet的頁面,你應該輸入 192.168.2.1/work/ABCDEFG 對嗎? 如果你沒有看見,因為你的WEB-INF還在WebConten裡面,也就是work/WebCont/WEB-INF    請把WEB-INF拿出來,放在專案目錄下,也就是 work/WEB-INF ,因為每個專案下都必須有個WEB-INF才可以在瀏覽器顯示。而IDE是不會幫你做這個的。

3. 為什麼非要在WEB-INF下建立classes資料夾?

         Servlet編譯.java檔案產生的.class檔案存放在WEB-INF下的classes裡面。那為什麼非要放在WEB-INF下面呢?為什麼非要專門建一個classes呢?  請開啟你的config目錄,找到catalina.policy——ctrl+F——輸入classes,你會發現catalina.base有很多是跟classes關聯的,而config裡面的web.xml也有很多是引用了catalina.base的。

         總結一句話,你想你的servlet能夠在瀏覽器內工作,請照做..

4. 微信的token和access token操作

         因為這次是遠端操作伺服器來搭建的,在搭建tomcat時候需要jdk, 如果要完成驗證token和後面的access token,請記得用jdk1.7以上,因為用java實現token的驗證,包括自寫sha1函式,需要jdk1.7以上的支援。

         搭建tomcat時候,基本是上面3點提到的 

                 1)修改server.xml(埠80,default的修改等等)

                 2)IDE下的WebContent目錄,中文叫網頁內容,其實除了lib庫以外,當你在IDE做好一個專案,用startup.bat編譯一遍後,就可以把WebContent丟去伺服器了,其他的src什麼也不需要,所以總結是:專案的目錄下一定要有WEB-INF ,而WEB-INF下一定要有classes。

這幾天的感想:  這次開發其實不算成功,因為一些原因,搭建好伺服器,弄好token就沒繼續了。自己本來是學前端了,弄起後臺(其實也不算後臺)也不是太順手。但是這幾天卻出奇地鍛鍊了我的意志力。。那種弄了幾個小時又堅持幾小時,最後發現是一些很低階的失誤(比如專案下並沒有WEB-INF目錄),這些經驗會讓我以後在學習,開發過程中更加細心地去做事。

程式設計師總會犯低階錯誤的,早一點把該錯的都做錯了,以後就會好過了。大家共勉!

(如有錯誤,請務必指出!感謝!)