因為要實現一個WebServer,寫完了一個簡單的WebServer後突發奇想,何不實現一個jsp(SUN企業級應用的首選) 的WebServer呢?
有了這個想法後,就開始考慮jsp(SUN企業級應用的首選)的實現原理,其實jsp(SUN企業級應用的首選)的實現也很簡單,說白了就是將其轉換成一個Java文件,再對這個Java文件進行編譯,生成類文件,接著再由服務器使用這個類文件。從總體上分,可以將jsp(SUN企業級應用的首選)文件的內容劃分為兩大塊,即輸出語句和控制語句。
至於jsp(SUN企業級應用的首選)文件中的HTML語句就是我們要輸出的內容,而jsp(SUN企業級應用的首選)標簽則是控制HTML語句的輸出。例如,有一個jsp(SUN企業級應用的首選)文件的內容如下:
<html>
<body>
<%! java.util.Date date=new java.util.Date();
int size=10;
%>
<% for(int i=0;i<size;i++){ %>
<h1>Hello<%= i %>
</h1>
<% } %>
<%=date%>
</body>
</html>
這個jsp(SUN企業級應用的首選)文件將產生如下效果:
Thu Dec 16 18:30:21 CST 2004
那麼,現在的問題就是我們就生成什麼樣的java文件,才能獲得正確的結果。
首選寫一個Interface,該接口就是我們要生成的JAVA文件將要繼承的接口。其定義如下:
package httpserver;
import java.net.Socket;
import java.io.IOException;
public interface jsp(SUN企業級應用的首選)2HtmlInterface{
void printHtml(Socket socket)throws IOException;
}
接下來就寫一個類JavaServerPage負責解析jsp(SUN企業級應用的首選)文件,在這個類中將會動態生成JAVA文件,並編譯生成一個可用類。再調用這個類文件的printHtml(socket) 方法,將響應信息寫給客戶端(其中socket為服務器accept返回的套接口。這樣客戶就能看到jsp(SUN企業級應用的首選)正確運行的結果。這個解析JavaServerPage的類框架如下:
public class JavaServerPage{
public JavaServerPage(File file,Socket socket)throws Exception{} //file為客戶端請求的一個jsp(SUN企業級應用的首選)文件
//socket為服務器同客戶端聯接的套接口
public void writeReponse() { //這個函數將負責根據指定的jsp(SUN企業級應用的首選)文件根據某種
GeneratJava(); //動態生成java文件並將編譯,