<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/tips/163

            0x00 JavaEE 基礎


            JSP: 全名為java server page,其根本是一個簡化的Servlet

            Servlet:Servlet是一種服務器端的Java應用程序,可以生成動態的Web頁面。

            JavaEE: JavaEE是J2EE新的名稱。改名目的是讓大家清楚J2EE只是Java企業應用。

            什么叫Jsp什么叫Java我真的非常讓大家搞清楚!拜托別一上來就來一句:“前幾天我搞了一個jsp的服務器,可難吭了。”。

            請大家分清楚什么是jsp什么是JavaEE! Java平臺結構圖:

            20130703172818_61466.jpg

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

            20130703172846_40325.jpg

            列舉這兩個圖的原因就是讓你知道你看到的JSP不過是冰山一角,Jsp技術不過是Java初級開發人員必備的技術而已。

            我今天要講的就是Java樹的最下面的兩層了,也是初級工程師需要掌握的東西。

            Web請求與相應簡要的流程:

            20130703173033_49603.gif

            這是一個典型的就是客戶端發送一個HTTP請求到服務器端,服務器端接收到請求并處理、響應的一個過程。

            如果請求的是JSP,tomcat會把我們的JSP編譯成Servlet也就是一個普通的Java類。

            其實JSP是Servlet的一種特殊形式,每個JSP頁面就是一個Servlet實例。Servlet又是一個普通的Java類它編譯后就是一個普通的class文件。

            這是一個普通的jsp腳本頁面,因為我只用JSP來作為展示層僅僅做了簡單的后端數據的頁面展示:

            20130703175439_28704.png

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

            20130703175626_72063.png

            你會發現你根本就看不懂這個class文件,因為這是字節碼文件我們根本就沒法看。通過我們的TOMCAT編譯后他編程了一個Java類文件保存在Tomcat的work目錄下。

            文件目錄:C:\apache-tomcat-7.0.34\work\Catalina\localhost\你的項目名\org\apache\jsp

            20130703175736_31874.png

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

            20130703175806_35537.png

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

            20130703175859_89447.png

            繼承HttpJspBase類,該類其實是個HttpServlet的子類(jasper是tomcat的jsp engine)。

            Jsp有著比Servlet更加優越的展現,很多初學PHP的人恐怕很難把視圖和邏輯分開吧。比如之前在寫PHPSQL注入測試的DEMO:

            20130703175946_12770.png?

            這代碼看起來似乎沒有什么大的問題,也能正確的跑起來啊會有什么問題呢?原因很簡單這屬于典型的展現和業務邏輯沒有分開!這和寫得爛的Servlet差不多!

            說了這么多,很多人會覺得Servlet很抽象。我們還是連創建一個Servlet吧:

            20130703180119_18901.png

            創建成功后會自動的往web.xml里面寫入:

            20130703180159_14918.png

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

            20130703180237_62390.png

            請求響應輸出內容:

            20130703180312_90096.png

            熟悉PHP的大神們這里就不做解釋了哦。了解了Jsp、Servlet我們再來非常簡單的看一下JavaWeb應用是怎樣跑起來的。

            加載web.xml的配置然后從配置里面獲取各種信息為WEB應用啟動準備。

            科普:C:\apache-tomcat-7.0.34\webapps下默認是部署的Web項目。webapps 下的文件夾就是你的項目名了,而項目下的WebRoot一般就是網站的根目錄了,WebRoot下的文件夾WEB-INF默認是不讓Web訪問的,一般存在配置泄漏多半是nginx配置沒有過濾掉這個目錄。

            20130703180428_53304.png

            20130703180442_56745.png

            快速定位數據庫連接信息:

            大家可能都非常關心數據庫連接一般都配置在什么地方呢?

            答案普遍是:C:\apache-tomcat-7.0.34\webapps\wordpress\WEB-INF下的***.xml

            大多數的Spring框架都是配置在applicationContext里面的:

            20130703180636_91481.png

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

            20130703180710_10465.png

            還有一種變態的配置方式就是直接卸載源代碼里面:

            20130703180735_97556.png

            Tomcat的數據源(其他的服務器大同小異):

            目錄:C:\apache-tomcat-7.0.34\conf\context.xml、server.xml

            20130703180923_33143.png

            20130703180936_47449.png

            Resin數據源:

            路徑:D:\installDev\resin-pro-4.0.28conf\resin.conf(resin 3.x是resin.xml)

            其他的配置方式諸如讀取如JEECMS讀取的就是.properties配置文件,這種方式非常的常見:

            20130703181109_16068.png

            0x01 Tomcat 基礎


            enter image description here

            沒錯,這就是 TOM 貓。樓主跟這只貓打交道已經有好幾年了,在 Java 應用當中 TOMCAT 運用的非常的廣泛。

            TOM 貓是一個 Web 應用服務器,也是 Servlet 容器。

            Apache+Tomcat 做負載均衡:

            enter image description here

            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:

            enter image description here

            需要修改: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>
            

            enter image description here

            Resin 的

            enter image description here

            請求處理:

            <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 的支持:

            enter image description here

            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 配置就無壓力了。

            enter image description here

            整合成功后:

            enter image description here

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线