JSP
1、簡介
-
JSP(Java Server Pages)是由Sun Microsystems公司主導創建的一種動態網頁技術標準。
-
JSP將Java代碼和特定變動內容嵌入到靜態的頁面中,實現以靜態頁面爲模板,動態生成其中的部分內容。
-
JSP文件在運行時會被其編譯器轉換成更原始的Servlet代碼。JSP編譯器可以把JSP文件編譯成用Java代碼寫的Servlet,然後再由Java編譯器來編譯成能快速執行的二進制機器碼,也可以直接編譯成二進制碼。
2、JSP在運行時轉換的Servlet類
- index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
- index_jsp.java
- 我的電腦此文件的路徑:
C:\Users\73256\.IntelliJIdea2018.2\system\tomcat\Unnamed_javaweb-session-cookie\work\Catalina\localhost\ROOT\org\apache\jsp
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {
/*---------------------------------此處部分代碼省略-----------------------------------*/
//初始化
public void _jspInit() {
}
//銷燬
public void _jspDestroy() {
}
//JSPService
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
final java.lang.String _jspx_method = request.getMethod();
if ("OPTIONS".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
return;
}
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允許 GET、POST 或 HEAD。Jasper 還允許 OPTIONS");
return;
}
}
final javax.servlet.jsp.PageContext pageContext;//頁面上下文
javax.servlet.http.HttpSession session = null;//session
final javax.servlet.ServletContext application;//applicationContext
final javax.servlet.ServletConfig config;//config
javax.servlet.jsp.JspWriter out = null;//out
final java.lang.Object page = this;//page:當前頁面
javax.servlet.jsp.JspWriter _jspx_out = null;//請求
javax.servlet.jsp.PageContext _jspx_page_context = null;//響應
try {
response.setContentType("text/html;charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
//HTML代碼,會被轉換爲下面的形式。
out.write("\n");
out.write("<html>\n");
out.write("<body>\n");
out.write("<h2>Hello World!</h2>\n");
//Java代碼原封不動的轉換
System.out.println("Hello World!");
out.write("</body>\n");
out.write("</html>\n");
} catch (java.lang.Throwable t) {
if (!(t instanceof javax.servlet.jsp.SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try {
if (response.isCommitted()) {
out.flush();
} else {
out.clearBuffer();
}
} catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
else throw new ServletException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
- 9大內置對象:可在JSP腳本中直接調用
- pageContext:可以取得任何範圍的參數,保存的數據只在一個頁面中有效
- request:客戶端的請求,作用域爲一次請求
- response: 響應
- session:存數據,保存的數據只在一次會話中有效,即從打開到關閉瀏覽器
- application:保存的數據在服務器中有效,從打開到關閉服務器
- config:主要作用是取得服務器的配置信息
- out :用於在Web瀏覽器內輸出信息
- page :代表JSP本身
- exception:顯示異常信息
3、JSP基礎語法
3.1、JSP表達式
- 作用:用來將程序的結果,輸出到客戶端
- **格式:
<%= 變量或者表達式%>**
<%= "你好!"%>
3.2、JSP腳本片段
-
作用:寫Java代碼
-
格式:
<% Java代碼%>
<%
int sum = 0;
for (int i = 0; i <=100 ; i++) {
sum+=i;
}
//將sum打印到頁面
out.println("<h1>Sum="+sum+"</h1>");
%>
- 腳本片段之間也可嵌入HTML元素
<%
for (int i = 0; i < 5 ; i++) {
%>
<h1>Hello World!--=<%=i%></h1>
<%
}
%>
- 測試訪問
3.3、JSP聲明
-
作用:JSP聲明中的代碼會被編譯到JSP生成的Java類中,即可以使用JSP聲明定義其Java類的成員變量、方法、靜態代碼塊等。
-
格式:
<%! Java代碼 %>
<%!
static {
System.out.println("<h1>static代碼塊執行了!</h1>");
}
private String name="JSP";
public String getName(){
return "<span style=\"font-size: 30px\">"+name+"</span>";
}
%>
<%
for (int i = 0; i < 5; i++) {
out.write(getName());
%>
<span style="color: red;font-size: 30px">--=<%=i%></span><br>
<%
}
%>
- 測試訪問:
3.4、JSP指令
指令 | 描述 |
---|---|
<%@ page … %> | 定義網頁依賴屬性,比如腳本語言、error頁面、緩存需求等等 |
<%@ include … %> | 包含其他文件 |
<%@ taglib … %> | 引入標籤庫的定義 |
- 合併網頁
<%--@include 合併三個頁面,形成一個頁面--%>
<%@include file="common/header.jsp"%>
<h1>網頁主體</h1>
<%@include file="common/footer.jsp"%>
- index_jsp.java中的代碼
3.5、JSP標籤
語法 | 描述 |
---|---|
jsp:include | 用於在當前頁面中包含靜態或動態資源 |
jsp:useBean | 尋找和初始化一個JavaBean組件 |
jsp:setProperty | 設置 JavaBean組件的值 |
jsp:getProperty | 將 JavaBean組件的值插入到 output中 |
jsp:forward | 從一個JSP文件向另一個文件傳遞一個包含用戶請求的request對象 |
jsp:plugin | 用於在生成的HTML頁面中包含Applet和JavaBean對象 |
jsp:element | 動態創建一個XML元素 |
jsp:attribute | 定義動態創建的XML元素的屬性 |
jsp:body | 定義動態創建的XML元素的主體 |
jsp:text | 用於封裝模板數據 |
- 拼接頁面
<jsp:include page="/common/header.jsp"/>
<h1>網頁主體</h1>
<jsp:include page="/common/footer.jsp"/>
- index_jsp.java中的代碼
- 測試訪問
3.6、EL表達式
-
格式:
${}
-
作用:獲取數據、執行運算、獲取web開發常用對象
<h1>${"Hello World!"}</h1>