javaweb學習筆記(十一):JSP(1)
目錄
jsp(1)
1.基本概念
JSP全稱Java Server Pages,是一種動態網頁開發技術。其實就是servlet,所以jsp的執行必須交給tomcat伺服器!jsp頁面既可以寫html程式碼,也可以寫java程式碼。
它相比html而言,html只能為使用者提供靜態資料,而Jsp技術允許在頁面中巢狀java程式碼,為使用者提供動態資料。
相比servlet而言,servlet很難對資料進行排版,而jsp除了可以用java程式碼產生動態資料的同時,也很容易對資料進行排版。
tomcat的work目錄:存放jsp執行時的臨時檔案
1 .1Jsp的執行過程
在MyEclipse的xioahua專案的webroot目錄下,新建一個jsp檔案:01.hello.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>The first jsp by xiao hua</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 第一個jsp檔案 by xioa hua <br> </body> </html>
瀏覽器訪問http://localhost:8080/xiaohua/01.hello.jsp
1)訪問到01.hello.jsp頁面,tomcat掃描到jsp檔案,在%tomcat%/work把jsp檔案翻譯成java原始檔
(01.hello.jsp -> _01_hello_jsp.java) (翻譯)
2)tomcat伺服器把java原始檔編譯成class位元組碼檔案
(_01_hello_jsp.java -> _01_hello_jsp.class)(編譯)
3)tomcat伺服器構造_01_hello_jsp類物件 (例項化)
4)tomcat伺服器呼叫_01_hello_jsp類裡面方法,返回內容顯示到瀏覽器。
注:①第一次訪問jsp:走(1(2(3(4),第n次訪問jsp:只走(4)。
②jsp檔案修改了或jsp的臨時檔案被刪除了,要重新走走(1(2(3(4)的過程。
1.2 JSP與servlet
jsp翻譯成的java檔案:
public final class _01_hello_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent {
而HttpJspBase類(在tomcat 的lib目錄下的jar包中):
public abstract class org.apache.jasper.runtime.HttpJspBase extends javax.servlet.http.HttpServlet implements javax.servlet.jsp.HttpJspPage {
即Jsp就是一個servlet程式!servlet的技術可以用在jsp程式中。jsp的技術並不是全部適用於servlet程式!
Servlet的生命週期:
1)構造方法(第1次訪問)
2)init方法(第1次訪問)
3)service方法
4)destroy方法
Jsp的生命週期
1)翻譯: jsp->java檔案
2)編譯: java檔案->class檔案(servlet程式)
3)構造方法(第1次訪問)
4)init方法(第1次訪問):_jspInit()
5)service方法:_jspService()
6)destroy方法:_jspDestroy()
2 JSP語法
2.1 Jsp模板
JSP頁面中的HTML內容稱之為JSP模版元素。 JSP模版元素定義了網頁的基本骨架,即定義了頁面的結構和外觀。
2.2 Jsp表示式
語法:<%= 變數或表示式 %>
作用: 向瀏覽器輸出變數的值或表示式計算的結果。
注:表示式會被翻譯成 out.print(變量或表示式 ); 並放到_JspServicer()方法中。
2.3 Jsp指令碼
語法:<% 多行java程式碼 %>
作用: 執行java程式碼
注:指令碼中的java程式碼會被放在_jspService()方法中執行。
在兩個或多個指令碼片斷之間可以嵌入文字、HTML標記和其他JSP元素。單個指令碼片斷中的Java語句可以是不完整的,但是,多個指令碼片斷組合後的結果必須是完整的Java語句,例如:
2.4 Jsp宣告
語法:<%! 多行java程式碼 %>
Jsp宣告中的java程式碼被翻譯到_jspService方法的外面,即例項變數。所以,JSP宣告可用於定義JSP頁面轉換成的Servlet程式的靜態程式碼塊、成員變數和方法。 多個靜態程式碼塊、變數和函式可以定義在一個JSP宣告中,也可以分別單獨定義在多個JSP宣告中。JSP隱式物件的作用範圍僅限於Servlet的_jspService方法,所以在JSP宣告中不能使用這些隱式物件。 例:
2.5 Jsp註釋
語法: <%-- jsp註釋 --%>
注:在jsp頁面的html註釋會被翻譯和執行。而jsp的註釋不能被翻譯和執行。
例:
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>jsp語法</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%-- jsp表示式 --%>
今天是:<%= new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date()) %><br/>
求和:<%= 3+5 %><br/>
<%-- jsp指令碼--%>
<%
for(int i=1;i<5;i++){
%>
<H1>xiaohua</H1>
<%
}
%>
<%--jsp宣告 --%>
<%!
String name="xiaohua";
%>
列印輸出:<%= name %><br/>
</body>
</html>
開啟瀏覽器,檢視: