作者:
iswin
·
2013/07/04 18:46
0x00 JavaEE 基礎
JSP: 全名為java server page,其根本是一個簡化的Servlet。
Servlet:Servlet是一種伺服器端的Java應用程式,可以生成動態的Web頁面。
JavaEE: JavaEE是J2EE新的名稱。改名目的是讓大家清楚J2EE只是Java企業應用。
什麼叫Jsp什麼叫Java我真的非常讓大家搞清楚!拜託別一上來就來一句:“前幾天我搞了一個jsp的伺服器,可難吭了。”。
請大家分清楚什麼是jsp什麼是JavaEE! Java平臺結構圖:

可以看到Java平臺非常的龐大,而開發者的分化為:

列舉這兩個圖的原因就是讓你知道你看到的JSP不過是冰山一角,Jsp技術不過是Java初級開發人員必備的技術而已。
我今天要講的就是Java樹的最下面的兩層了,也是初級工程師需要掌握的東西。
Web請求與相應簡要的流程:

這是一個典型的就是客戶端傳送一個HTTP請求到伺服器端,伺服器端接收到請求並處理、響應的一個過程。
如果請求的是JSP,tomcat會把我們的JSP編譯成Servlet也就是一個普通的Java類。
其實JSP是Servlet的一種特殊形式,每個JSP頁面就是一個Servlet例項。Servlet又是一個普通的Java類它編譯後就是一個普通的class檔案。
這是一個普通的jsp指令碼頁面,因為我只用JSP來作為展示層僅僅做了簡單的後端資料的頁面展示:

上圖可以非常清晰的看到通常的Jsp在專案中的地位並不如我們大多數人所想的那麼重要,甚至是可有可無!因為我們完全可以用其他的東西來代替JSP作為前端展示層。 我們來看一下這個頁面編譯成class後是什麼樣子:

你會發現你根本就看不懂這個class檔案,因為這是位元組碼檔案我們根本就沒法看。透過我們的TOMCAT編譯後他程式設計了一個Java類檔案儲存在Tomcat的work目錄下。
檔案目錄:C:\apache-tomcat-7.0.34\work\Catalina\localhost\你的專案名\org\apache\jsp

我們只要開啟index_jsp.java或者用jd-gui(Java反編譯工具)開啟就行了:

有人說這是Servlet嗎?當然了。

繼承HttpJspBase類,該類其實是個HttpServlet的子類(jasper是tomcat的jsp engine)。
Jsp有著比Servlet更加優越的展現,很多初學PHP的人恐怕很難把檢視和邏輯分開吧。比如之前在寫PHPSQL隱碼攻擊測試的DEMO:
這程式碼看起來似乎沒有什麼大的問題,也能正確的跑起來啊會有什麼問題呢?原因很簡單這屬於典型的展現和業務邏輯沒有分開!這和寫得爛的Servlet差不多!
說了這麼多,很多人會覺得Servlet很抽象。我們還是連建立一個Servlet吧:

建立成功後會自動的往web.xml裡面寫入:

其實就是一個對映的URL和一個處理對映的類的路徑。而我們自動生成的Java類精簡後大致是這個樣子:

請求響應輸出內容:

熟悉PHP的大神們這裡就不做解釋了哦。瞭解了Jsp、Servlet我們再來非常簡單的看一下JavaWeb應用是怎樣跑起來的。
載入web.xml的配置然後從配置裡面獲取各種資訊為WEB應用啟動準備。
科普:C:\apache-tomcat-7.0.34\webapps
下預設是部署的Web專案。webapps 下的資料夾就是你的專案名了,而專案下的WebRoot一般就是網站的根目錄了,WebRoot下的資料夾WEB-INF預設是不讓Web訪問的,一般存在配置洩漏多半是nginx配置沒有過濾掉這個目錄。


快速定位資料庫連線資訊:
大家可能都非常關心資料庫連線一般都配置在什麼地方呢?
答案普遍是:C:\apache-tomcat-7.0.34\webapps\wordpress\WEB-INF
下的***.xml
大多數的Spring框架都是配置在applicationContext裡面的:

如果用到Hibernate框架那麼:WebRoot\WEB-INF\classes\hibernate.cfg.xml

還有一種變態的配置方式就是直接解除安裝原始碼裡面:

Tomcat的資料來源(其他的伺服器大同小異):
目錄:C:\apache-tomcat-7.0.34\conf\context.xml、server.xml


Resin資料來源:
路徑:D:\installDev\resin-pro-4.0.28conf\resin.conf(resin 3.x是resin.xml)
其他的配置方式諸如讀取如JEECMS讀取的就是.properties配置檔案,這種方式非常的常見:

0x01 Tomcat 基礎

沒錯,這就是 TOM 貓。樓主跟這隻貓打交道已經有好幾年了,在 Java 應用當中 TOMCAT 運用的非常的廣泛。
TOM 貓是一個 Web 應用伺服器,也是 Servlet 容器。
Apache+Tomcat 做負載均衡:

Tomcat快速定位到網站目錄:
如何快速的找到tomcat的安裝路徑:
1、不管是誰都應該明白的是不管apache還是tomcat安裝的路徑都是隨意的,所以找不到路徑也是非常正常的。
2、在你的/etc/httpd/conf/httpd.conf裡面會有一個LoadModule jk_module配置用於整合tomcat然後找到JkWorkersFile也就是tomcat的配置,找到.properties的路徑。httpd裡面也有可能會配置路徑如果沒有找到那就去apache2\conf\extra\httpd-vhosts看下有沒有配置域名繫結。
3、在第二步的時候找到了properties配置檔案並讀取,找到workers.tomcat_home也就是tomcat的配置路徑了。
4、得到tomcat的路徑你還沒有成功,域名的具體配置是在conf下的server.xml。
5、讀取server.xml不出意外你就可以找到網站的目錄了。
6、如果第五步沒有找到那麼去webapps目錄下ROOT瞧瞧預設不配置的話網站是部署在ROOT下的。
7、這一點是附加的科普知識愛聽則聽:資料庫如果啟用的tomcat有可能會採用tomcat的資料來源配置未見為conf下的context.xml、server.xml。如果網站有域名繫結那麼你可以試下ping域名然後帶上埠訪問。有可能會出現tomcat的登入介面。tomcat預設是沒有配置使用者登入的,所以當tomcat-users.xml下沒有相關的使用者配置就別在這裡浪費時間了。
8、如果配置未找到那麼到網站目錄下的WEB-INF目錄和其下的classes目錄下找下對應的properties、xml(一般都是properties)。
9、如果你夠蛋疼可以讀取WEB.XML下的classess內的原始碼。
10、祝你好運。
apache快速定位到網站目錄:
普通的域名繫結:
直接新增到confhttpd.conf、confextrahttpd-vhosts.conf
Resin快速定位到網站目錄:
在resin的conf下的resin.conf(resin3.x)和resin.xml(resin4.x)
Resin apache 負載均衡配置(從我以前的文章中節選的)
APACHE RESIN 做負載均衡,Resin 用來做 JAVAWEB 的支援,APACHE 用於處理靜態
和 PHP 請求,RESIN 的速度飛快,RESIN 和 apache 的配合應該是非常完美的吧。
域名解析:
apache 的 httpd.conf:

需要修改:Include conf/extra/httpd-vhosts.conf(一定要把前面的#除掉,否則配置不起作用)
普通的域名繫結:
直接新增到 httpd.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot E:/XXXX/XXX
ServerName beijingcanyinwang.com
ErrorLog E:/XXXX/XXX/bssn-error_log
CustomLog E:/XXXX/XXX/bssn_log common
</VirtualHost>
二級域名繫結,需要修改:
E:\install\apache2\conf\extra\httpd-vhosts.conf
如:
<VirtualHost *:80>
DocumentRoot E:/XXXXXXX/XXX
ServerName bbs.beijingcanyinwang.com
DirectoryIndex index.html index.php index.htm
</VirtualHost>

Resin 的

請求處理:
<LocationMatch (.*?).jsp>
SetHandler caucho-request
</LocationMatch>
<LocationMatch (.*?).action>
SetHandler caucho-request
</LocationMatch>
<LocationMatch union-resin-stat-davic>
SetHandler caucho-request
</LocationMatch>
<LocationMatch stat>
SetHandler caucho-request
</LocationMatch>
<LocationMatch load>
SetHandler caucho-request
</LocationMatch>
<LocationMatch vote>
SetHandler caucho-request
</LocationMatch>
APACHE 新增對 Resin 的支援:

LoadModule caucho_module "E:/install/resin-pro-3.1.12/win32/apache-2.2/mod_caucho. dll"
然後在末尾加上:
<IfModule mod_caucho.c>
ResinConfigServer localhost 6800
CauchoStatus yes
</IfModule>
只有就能讓 apache 找到 resin 了。
PHP 支援問題:
resin 預設是支援 PHP 的測試 4.0.29 的時候就算你把 PHP 解析的 servlet 配置刪了一樣解析 PHP,無奈換成了 resin 3.1 在註釋掉 PHP 的 servlet 配置就無壓力了。

整合成功後:

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!