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配置文件,這種方式非常的常見:
沒錯,這就是 TOM 貓。樓主跟這只貓打交道已經有好幾年了,在 Java 應用當中 TOMCAT 運用的非常的廣泛。
TOM 貓是一個 Web 應用服務器,也是 Servlet 容器。
Apache+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、祝你好運。
普通的域名綁定:
直接添加到confhttpd.conf、confextrahttpd-vhosts.conf
在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 配置就無壓力了。
整合成功后: