由於修改Servlet之後,需要重新生成class文件,並且重啟服務器,然後打開或刷新網頁,才能看到修改的效果,過程非常繁瑣,不便捷.如何做到所見即所得,我一修改,一刷新網頁,效果立馬出現.所以JSP產生了.
JSP,java serverpages.特點,擁有和Servlet一樣的特性和優點,因為JSP實際就是Servlet.而Servlet比更有優勢的是,可以在HTML代碼中直接內嵌Java代碼.他的操作過程就是,由JSP Engine先將JSP程序轉換成Servlet代碼,然後再就是Servlet的操作了,編譯成class類,載入執行.並且,只有當客戶端第一次請求JSP時,才需要將其轉換、編譯.
寫個最簡單的HelloWorld.jsp,見識一下什麼是JSP.文件名為HelloWorld.jsp,內容:
HelloWorld <% out.println("HelloWorld"); %>
啟動服務器,輸入地址,界面運行效果:
是不是超簡單,可是內部是如何運作的?
首先,找到tomcat中的conf文件夾下的web.xml,其中有兩段Servlet的配置標簽,查找和Servlet是一樣的.
jsp *.jsp *.jspx
jsp org.apache.jasper.servlet.JspServlet fork false xpoweredBy false 3
在第一段的servlet-mapping中,可以知道,只要是*.jsp和*.jspx的都可以找到servlet-name為jsp,而servelt-name為jsp的,找到的類是org.apache.jasper.servlet.JspServlet.這個類在哪呢?
在lib下可以找到jasper.jar包,然後打開可以找到這個class,但是吧,打開亂碼.看來不是這裡.
這個文件夾下有個xml文件,有一段內容是這樣的.
不大知道這段代碼,但是類型是我要的類,domain,范圍或者域名是Catalina.而在work文件夾下是有一個Catalina的文件夾的.
所以在tomcat根目錄下,找到work文件夾,這個文件夾的作用是用來放置由JSP生成的各種Servlet文件.在這個路徑下一直進去,就可以找到HelloWorld_jsp的.java和.class文件..java文件中就是Servlet代碼.
<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICAgICAgILTyv6ouamF2Yc7EvP4sLmNsYXNztPK/qsrHwtLC6y7U2l9qc3BTZXJ2aWNluMO3vbeo1tAs1dK1vdK7ts60+sLrLL7Nyse9q87Sw8e1xC5qc3DOxLz+1tC1xLT6wuvIq7K/vfjQ0MHLtKbA7SzIu7rzyuSz9s/Uyr4uPC9wPgo8cD48aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20140310/20140310091835233.jpg" alt="\">
只要我立馬修改了JSP中的代碼,不用重啟Tomcat服務器,刷新網頁,這裡就會自動生成相應的.java代碼,並編譯,所以效果就出來了.
如修改了HelloWorld的顯示代碼,為out.println("HelloWorldThis is JSP"),然後刷新網頁,
打開的文本編輯器就提示HelloWorld_jsp.java被修改了,內容變成了這樣.
.java和.class文件的修改日期變為當前日期和時間,也能表明他們被修改過了.
IOSvwMDG97XE1MvQ0NCnufvSsrj618W4xLHkLjwvcD4KPGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20140310/20140310091835237.jpg" alt="">
由此可以大概了解一下JSP的運行操作,以及它和Servlet就是一樣的東西的事實.用Servlet就可以接收客戶端的請求,處理,返回結果,只是不用工具時操作麻煩,而JSP完美的解決了這個問題.看來,任何東西都是越變越方便的,事物都是發展著的.