在不少動態網頁中,絕大部份內容都是固定不變的,只有局部內容須要動態產生和改變。若是使用Servlet程序來輸出只有局部內容須要改變的網頁,其中全部靜態內容也須要程序員用Java代碼產生,整個Servlet程序代碼就很是臃腫,編寫和維護都很是困難。爲了彌補Servlet的缺陷,SUN公司在Servlet的基礎上推出了JSP技術做爲解決方案。html
JSP是簡化Servlet編寫的一種技術,它將Java代碼和HTML語句混合在同一個文件中編寫,只對網頁中的要動態產生的內容採用Java代碼來編寫,而對固定不變的靜態內容採用,普通靜態HTML頁面的方式編寫。
Java Server Page:Java服務器端網頁,在HTML頁面中編寫Java代碼的頁面,擴展名必須是.jsp。java
JSP頁面是由HTML語句和前臺在其中的Java代碼組成的一個普通的文本文件,JSP頁面的文件擴展名必須爲.jsp。
在JSP頁面中編寫的Java代碼須要嵌套在<%和%>中,嵌套在<%和%>之間的Java代碼被稱之爲腳本片斷,沒有嵌套在<%和%>之間的內容被稱爲JSP模板元素。
JSP中的Java代碼可使用out.println()語句將其餘Java程序代碼產生的結果字符串輸出給客戶端,也可使用System.out.println()語句將他們打印到控制檯。
JSP文件就行普通的HTML文件同樣,他們能夠放置在WEB應用程序中的除了WEB-INF及其子目錄外的其餘任何目錄中,JSP頁面的訪問路徑與普通HTML頁面的訪問路徑形式徹底同樣。
在JSP頁面中也可使用一種稱之爲JSP表達式的元素,只須要輸出的變量或者表達式直接封裝在<%=和%>之中,就能夠向客戶端輸出這個變量或表達式的運算結果。
在JSP表達式中嵌套的變量或者表達式後面不能有分號,若是沒有頁面會報錯。程序員
♦搭建一個動態的Web工程
♦咱們針對上面相關認識裏面的一些描述,模擬JSP頁面的相關操做,例如:
①JSP頁面中編寫的Java代碼須要嵌套在<%和%>之間apache
<body> <% Date date = new Date(); System.out.println(date); %> </body>
②JSP中的Java代碼可使用out.println()語句輸出tomcat
<body> <% Date date = new Date(); out.println(date); %> </body>
啓動服務,訪問http://localhost:8080/JSP/index.jsp,發現時間打印到了界面上
③JSP表達式中嵌套的變量或者表達式後面不能有分號
加了分號,報錯。
④JSP編譯後實際上是Servlet,這個怎麼理解呢?
咱們找到發佈這個JSP工程的Tomcat目錄,找到apache-tomcat-7.0.42\work\Catalina\localhost\JSP\org\apache\jsp目錄,發現該目錄下生成了兩個文件
打開index_jsp.java文件,找到咱們在JSP<% %>中寫的代碼服務器
out.write("\r\n"); out.write("<body>\r\n"); out.write("\t"); Date date = new Date(); //System.out.println(date); out.println(date); out.write("\r\n"); out.write("</body>\r\n"); out.write("</html>\r\n"); } catch (java.lang.Throwable t) {
您會發現,這個index_jsp.java源文件,實際上是由咱們的index.jsp這個文件生成的。jsp
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static final javax.servlet.jsp.JspFactory _jspxFactory = javax.servlet.jsp.JspFactory.getDefaultFactory();
生成的Java源文件繼承了HttpJspBase,而後實現了JspSourceDependent接口,而HttpJspBase繼承自 HttpServlet,本質就是一個Servlet,那麼能夠說明index_jsp.java其實也是一個Servlet,由jsp文件翻譯而來。
⑤放置在WEB應用程序中的除了WEB-INF及其子目錄外的其餘任何目錄中
咱們在WEB-INF目錄下面新建一個test.jsp文件,而且新建一個test目錄在其目錄下面也放置test.jsp文件,啓動服務。
發現http://localhost:8080/JSP/WEB-INF/test/test.jsp和http://localhost:8080/JSP/WEB-INF/test.jsp都沒法訪問學習