一.幾款servlet容器對比:jetty,Tomcat,JBoss
二.JBOSS相關問題解決
- 1.JBOSS下載下傳安裝
-
2.處理jboss-as-7.1.1.Final與jdk1.8及1.8以上版本的不相容問題
并解決多個版本的jdk的切換問題
- 3.解決啟動JBOSS的standalone.bat時端口占用沖突問題
- 4.設定外網通路
- 5. 添加使用者
- 6.在eclipse-jee中配置JBoss
- 7.在JBoss中配置mysql資料庫連接配接池
一.幾款servlet容器對比:jetty,Tomcat,JBoss
jetty VS Tomcat
https://baike.baidu.com/item/jetty/370234?fr=aladdin#2
Jetty更滿足公有雲的分布式環境的需求,而Tomcat更符合企業級環境
-
Jetty更輕量級。這是相對Tomcat而言的。
由于Tomcat除了遵循Java Servlet規範之外,自身還擴充了大量JEE特性以滿足企業級應用的需求,是以Tomcat是較重量級的,而且配置較Jetty亦複雜許多。但對于大量普通網際網路應用而言,并不需要用到Tomcat其他進階特性,是以在這種情況下,使用Tomcat是很浪費資源的。這種劣勢放在分布式環境下,更是明顯。換成Jetty,每個應用伺服器省下那幾兆記憶體,對于大的分布式環境則是節省大量資源。而且,Jetty的輕量級也使其在處理高并發細粒度請求的場景下顯得更快速高效。
-
Jetty更靈活,展現在其可插拔性和可擴充性,更易于開發者對Jetty本身進行二次開發,定制一個适合自身需求的Web Server。
相比之下,重量級的Tomcat原本便支援過多特性,要對其瘦身的成本遠大于豐富Jetty的成本。用自己的了解,即增肥容易減肥難。
- 然而,當支援大規模企業級應用時,Jetty也許便需要擴充,在這場景下Tomcat便是更優的。
jboss
說實話平時做一些小的開發設計使用的一般為tomcat,jetty也早就想嘗試一下了,不都說“優雅的jetty”嗎,然而奈何學校的課設需要使用jboss,對jboss的耳聞是因為去年看了《大型分布式網站技術架構-核心原理與案例分析》《大型分布式網站技術架構-設計與實踐》這兩本書後知道了早些年的淘寶網是使用jboss中間件的。眼看着課設的日子就要來了,萬般無奈的下了個jboss,然而沒有想到的是,它貌似許久都沒有更新維護了,而且對jdk的支援貌似隻達到了1.7版本,我原本的9.0.4在jboss中根本沒法用。。。于是隻好又裝了一個1.7版的jdk,而且1.8的jdk它也是不支援的,更不要說1.9及現在的1.12了。。。
好想吐槽一下大學的課程:什麼時候可以不要這麼過時又無聊:)
二.JBOSS相關問題解決
1.JBOSS下載下傳安裝
下載下傳網址為 http://www.jboss.org/jbossas/downloads/
測試JBoss
1.運作腳本jboss7.1.1\bin\standalone.bat完成啟動。
2.通路http://127.0.0.1:8080/,出現 Welcome to AS 7通路界面,說明JBoss啟動成功
2.處理jboss-as-7.1.1.Final與jdk1.8及1.8以上版本的不相容問題
https://blog.csdn.net/tiegenZ/article/details/77881138
解決:隻能安裝小于1.8版本的jdk,例如1.7版本。
解決多個版本的jdk的切換問題
最好單獨建立JAVA_HOME環境變量,在Path中使用JAVA_HOME
這樣一來可以每次僅修改JAVA_HOME來達到jdk的切換
3.解決啟動JBOSS的standalone.bat時端口占用沖突問題
測試JBoss
1.運作腳本D:\jboss7.1.1\bin\standalone.bat完成啟動。
2.通路http://127.0.0.1:8080/,出現 Welcome to AS 7通路界面,說明JBoss啟動成功
在運作jboss7.1.1\bin\standalone.bat出錯
錯誤如下:
JBAS014777: Services which failed to start: service jboss.serverManagement.controller.management.http: org.jboss.msc.service.StartException in service jboss.serverManagement.controller.management.http: Address already in use: bind /127.0.0.1:9990
解決方案:
首先在不改動JBOSS啟動端口的情況下,嘗試關閉占用了該端口的windows服務:
C:\Users\lenovo>
netstat -ano | find ":9990"
TCP 127.0.0.1:9990 0.0.0.0:0 LISTENING 4100
C:\Users\lenovo>
tasklist | findstr 4100
NvNetworkService.exe 4100 Services 0 2,636 K
C:\Users\lenovo>
taskkill /pid 4100
錯誤: 無法終止 PID 為 4100 的程序。
原因: 拒絕通路。
C:\Users\lenovo>
taskkill -t /pid 4100
錯誤: 無法終止 PID 4100 (屬于 PID 836 子程序)的程序。
原因: 拒絕通路。
C:\Users\lenovo>
tasklist | findstr 836
services.exe 836 Services 0 7,652 K
svchost.exe 2836 Services 0 10,656 K
Notes:實用
taskkill
的
-ft
選項時需注意:pid值較小的關鍵系統程序不可以随意殺死!!!
既然無法通過殺死占用了9990端口的程序的方式修複該問題,那麼下面隻能通過修改jboss.serverManagement.controller.management的啟動端口的方式修複此問題:
- 首先找到JBOSS的配置檔案:
jboss7.1.1\standalone\configuration\standalone.xml
- 打開該配置檔案,找到下面這行内容:
<socket-binding name="management-http" port="${jboss.management.http.port:9990}" inter/>
将9990端口改為一個其它未被占用的port。
C:\Users\lenovo> netstat -ano | find ":9991"
C:\Users\lenovo>
通過上述查找可發現9991port沒有被占用,是以可将
port="${jboss.management.http.port:9990}"
中的9990改為9991.
最後成功修複該問題:
4.設定外網通路
JBoss安裝完成後,預設隻能本地通路(即:隻有127.0.0.1/localhost或http://localhost:8080能通路),如果想讓其他人也可以通路你的網頁,需要修改JBoss的配置檔案,即修改standalone.xml,增加本機Web位址的内容。
(1). 打開JBOSS配置檔案:D:
\jboss7.1.1\standalone\configuration\standalone.xml
(2). 在
<interfaces>與</interfaces>
之間,增加一個interface節點,節點内容如下:
<!-- 設定外網通路 -->
<interface name="any">
<any-ipv4-address/>
</interface>
接着,修改socket-binding-group節點的default-interface屬性的為any
修改完後,重新開機JBoss7.1就可以用外網的IP來通路了。
5. 添加使用者
添加使用者程式:
\jboss7.1.1\bin\add-user.bat
.bat:windows ,.sh:linux
通路位址:
http://127.0.0.1:<consolePort>/console
具體步驟:
通路該Web伺服器時,提示新增使用者。可在服務端執行add-user.bat(在Jboss主目錄下的bin目錄中) 來添加管理者使用者。
輕按兩下執行add-user.bat
What type of user do you wish to add?
a) Management User (mgmt-users.properties)
b) Application User (application-users.properties)
(a):
a
//輸入a後回車
Enter the details of the new user to add.
Realm (ManagementRealm) :
Username :
//回車,選用預設
admin
Password :
//填寫管理者使用者名admin
//填寫管理者密碼123456(輸入後不會被現實出來)
Re-enter Password :
The username ‘admin’ is easy to guess
Are you sure you want to add user ‘admin’ yes/no?
yes
About to add user ‘admin’ for realm ‘ManagementRealm’
Is this correct yes/no?
yes
Added user ‘admin’ to file ‘D:\jboss7.1.1\standalone\configuration\mgmt-users.properties’
Added user ‘admin’ to file ‘D:\jboss7.1.1\domain\configuration\mgmt-users.properties’
請按任意鍵繼續. . .
添加管理者後,重新啟動Jboss後通路
http://127.0.0.1:9991/console
,會彈出要求輸入使用者名和密碼的頁面,注意我在前面由于jboss console與windows中服務的端口沖突問題,修改了jboss console port為9991,其原本預設設定為9990.
6.在eclipse-jee中配置JBoss
為了實作在eclipse-jee中對JBoss的控制,可以将JBoss的啟動和停止添加到eclipse-jee中。啟動eclipse-jee後,進入菜單Window-> Preferences-> Server -> Runtime Environments,
點選右側的Add選項即可添加servlet容器。
Eclipse Java EE Developer Tools https://marketplace.eclipse.org/content/eclipse-java-ee-developer-tools-0
目前為止在上述網址上下載下傳eclipse-jee已經不支援配置JBoss7.1了,其支援的中間件如下:
隻有使用老師下發的安裝包才可以配置JBoss7.1
以上步驟完畢後,在Servers視圖内會有JBoss伺服器出現。選中JBoss7.1Runtime Server,在右鍵菜單中點選Start,JBoss伺服器開始啟動。若浏覽器可以通路http://127.0.0.1:8080/,則配置成功。
7.在JBoss中配置mysql資料庫連接配接池
-
在D:\jboss-as-7.1.1.Final\modules\com路徑下,建立檔案夾mysql\main,并将mysql-connector-java-5.1.26-bin.jar 複制到main檔案夾下,同時建立module.xml檔案
配置檔案 module.xml
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java-5.1.26-bin.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
</dependencies>
</module>
- 修改standalone.xml配置檔案,其路徑為D:\jboss-as-7.1.1.Final\standalone\configuration。打開standalone.xml檔案,找到
标簽,裡面應該已經有一個預設的datasource:ExampleDS,現在加入我們的mysql的datasource:<datasources>
配置檔案standalone.xml中的datasource标簽
<datasource jndi-name="java:/MySqlDS" pool-name="MySqlDS" enabled="true" use-java-context="true">
<connection-url>jdbc:mysql://localhost:3306/jbossdb</connection-url>
<driver>mysql</driver>
<security>
<user-name>root</user-name>
<password>123</password>
</security>
</datasource>
接下來,在
<datasource>...<drivers>...</drivers>...</datasource>
的drivers标簽中進行配置。
配置檔案 standalone.xml中的driver标簽
<drivers>
<driver name="mysql" module=" com.mysql ">
<driver-class>com.mysql.jdbc.Driver</driver-class>
<xa-datasource-class>
com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
</xa-datasource-class>
</driver>
</drivers>