一、什麼是JSP
Java Server Pages:java伺服器端頁面,和Servlet一樣,開發動态web頁面的技術。
最大的特點:寫JSP就像在寫HTML
差別:HTML隻給使用者提供靜态的資料 ,JSP頁面中可以嵌入JAVA代碼,為使用者提供動态資料。
二、JSP原理
伺服器内部工作 tomcat中有一個work目錄;
我電腦的位址: D:\Tomcat\apache-tomcat-9.0.45\work\Catalina\localhost\ROOT\org\apache\jsp

頁面轉變成了java程式。
浏覽器向 伺服器發送請求,不管通路什麼資源,其實都是在通路Servlet。
JSP最終也會被轉換成一個java類。
JSP本質就是一個Servlet。
public void _jspInit() { } //初始化
public void _jspDestroy() { } //銷毀
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException { } //JSPService
1、判斷請求
2、内置一些對象
final javax.servlet.jsp.PageContext pageContext; //頁面上下文
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 目前頁面
HttpServletRequest request //請求
HttpServletResponse response //響應
3、輸出頁面前增加的代碼
response.setContentType("text/html; charset=UTF-8"); //設定響應的頁面類型
pageContext = _jspxFactory.getPageContext(this, request, response,
null, false, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
out = pageContext.getOut();
_jspx_out = out;
4、以上的這些對象可以在JSP頁面中直接使用。
JSP頁面中
隻要是Java代碼就會原封不動的輸出
如果是HTML代碼,就會被轉換為 out.write("<html\r\n>")這樣的格式輸出到前端。
<%--JSP表達式
作用:用來将程式的輸出輸出到用戶端 <%= 變量或者表達式%> --%>
<%=new java.util.Date()%>
JSP腳本片段
<%--JSP腳本片段--%>
<%
int sum = 0;
for (int i = 0; i < 100; i++) {
sum+=i;
}
out.println("<h1>Sum="+sum+"</h1>");
%>
<%
int x = 10;
out.println(x);
%>
<p>這是一個JSP文檔</p>
<%
int y = 20;
out.println(y);
%>
<hr>
<%--在代碼中嵌入HTML元素--%>
<% for (int i = 0; i < 5; i++) {%>
<h1>HelloWorld <%=i%> </h1>
<%
}
%>
JSP聲明
<%!
static {
System.out.println("Loading Servlet");
}
private int globalVar = 0;
public void drigon(){
System.out.println("進入了方法drigon");
}
%>
JSP聲明會被編譯到JSP生成的JAVA的類中,其他的會被生成到_jspServlet方法中。
<%%>/片段
<%=%>/表達式輸出的值
<%!%> //定義一些全局的方法
JSP的注釋不會在用戶端顯示,HTML就會。
JSP指令
<%@page args...>
<%@include file=""%>
<%--@include會将兩個頁面合二為一--%>
<%@include file="common/header.jsp"%>
<h1>網頁主體</h1>
<%@include file="common/footer.jsp"%>
<hr>
<%--jsp:include 拼接頁面,本質還是三個--%>
<%--JSP标簽--%>
<jsp:include page="common/header.jsp"/>
<h1>網頁主體</h1>
<jsp:include page="common/header.jsp"/>
9大内置對象
PageContext 存東西
Request 存東西
Response
Session 存東西
Application[ServletContext] 存東西
config[ServletConfig]
out
page
exception(異常)
pageContext.setAttribute("name1","一号");//儲存的資料隻在一個頁面中有效
request.setAttribute("name2","二号");//儲存的資料隻在一次請求中有效,請求轉發會攜帶這個資料
session.setAttribute("name3","三号");//儲存的資料隻在一次會話中有效,從打開浏覽器到關閉浏覽器
application.setAttribute("name4","四号");//儲存的資料隻在伺服器中有效,從打開伺服器到關閉伺服器
request:用戶端向伺服器發送請求,産生的資料,使用者用完了就沒用了,比如:新聞,使用者看完就沒用了
session:用戶端向伺服器發送請求,産生的資料,使用者用完一會還有用,比如:購物車
application:用戶端向伺服器發送請求,産生的資料,一個使用者用完了,其他使用者還能使用比如:聊天資料
JSP标簽、JSTL标簽、EL表達式
<!--JSTL表達式的依賴-->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!--standard标簽庫-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
EL表達式:${}
擷取資料、執行運算、擷取web開發的常用對象
JSP标簽
<%--jsp:include--%>
<jsp:forward page="/jsptag2.jsp">
<jsp:param name="name" value="longge"/>
<jsp:param name="age" value="12"/>
</jsp:forward>
JSTL表達式
JSTL标簽庫的使用就是為了彌補HTML标簽的不足。 它自定義了許多标簽,可以供我們使用,标簽的功能和代碼一樣。
核心标簽(掌握部分)
文法:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
标簽 | 描述 |
---|---|
<c:out> | 用于在JSP中顯示資料,就像<%= ... > |
<c:set> | 用于儲存資料 |
<c:remove> | 用于删除資料 |
<c:catch> | 用來處理産生錯誤的異常狀況,并且将錯誤資訊儲存起來 |
<c:if> | 與我們在一般程式中用的if一樣 |
<c:choose> | 本身隻當做<c:when>和<c:otherwise>的父标簽 |
<c:when> | <c:choose>的子标簽,用來判斷條件是否成立 |
<c:otherwise> | <c:choose>的子标簽,接在<c:when>标簽後,當<c:when>标簽判斷為false時被執行 |
<c:import> | 檢索一個絕對或相對 URL,然後将其内容暴露給頁面 |
<c:forEach> | 基礎疊代标簽,接受多種集合類型 |
<c:forTokens> | 根據指定的分隔符來分隔内容并疊代輸出 |
<c:param> | 用來給包含或重定向的頁面傳遞參數 |
<c:redirect> | 重定向至一個新的URL. |
<c:url> | 使用可選的查詢參數來創造一個URL |
JSTL标簽庫使用步驟
引入對應的taglib 使用其中的方法 在Tomcat中也需要引入jstl的包,否則會報錯:JSTL解析錯誤
<h4>if測試</h4>
<hr>
<form action="coreif.jsp" method="get" >
<%--EL表達式擷取表單中的資料
${param.參數名}
--%>
<input type="text" name="username" value="${param.username}">
<input type="submit" value="登入">
</form>
<%--判斷如果送出的使用者名是管理者,則登入成功--%>
<%-- Java代碼
if(request.getParameter("username").equals("admin")){
out.print("登入成功");
}
--%>
<c:if test="${param.username=='admin'}" var="isAdmin" >
<c:out value="管理者歡迎您!"></c:out>
</c:if>
<%--自閉合标簽--%>
<c:out value="${isAdmin}"></c:out>
格式化标簽
SQL标簽
XML标簽