JavaWeb詳解之JSP

概述

1.什麼是JSP

JSP(全稱JavaServer Pages)是由Sun Microsystems公司主導創建的一種動態網頁技術標準。
JSP技術以Java語言作爲腳本語言,爲用戶的HTTP請求提供服務,並能與服務器上的其它Java程序共同處理複雜的業務需求。
JSP文件在運行時會被其編譯器轉換成更原始的Servlet代碼。
JSP就是在HTML頁面中嵌入了java代碼。

JSP本質上也是一個servlet

2.JSP的原理

在這裏插入圖片描述

服務器發現後綴爲.jsp,它會根據路徑找到helloworld.jsp文件,會將helloworld.jsp翻譯成helloworld_jsp.java文件,對這個java文件進行編譯,產生一個helloworld_jsp.class文件,將class文件加載運行。
將JSP翻譯成java文件,它是將JSP中的所有的HTML代碼通過流進行輸出,也就是說最終翻譯成class,被虛擬機加載,它本質是servlet,它就會往回響應,響應回去就是把JSP中的HTML代碼以流的方式寫回瀏覽器。所以在JSP中展示出了HTML代碼。

路徑:C:\Users\Administrator.IntelliJIdea2018.1\system\tomcat\Unnamed_javaweb-session-cookie\work\Catalina\localhost\ROOT\org\apache\jsp

3.JSP的內置方法

方法 概述
_jspInit() { } jsp Page被初始化的時候調用該方法,並且該方法僅在初始化時執行一次
_jspDestroy() { } jsp Page由於某種原因被關閉的時候調用該方法
_jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) 由jsp容器自動創建的處理jsp Page的方法

JSP的腳本內容

1.JSP的註釋(jsp註釋的內容不會出現在生成的servlet中)

<%--註釋內容--%>

注意:JSP的註釋,不會在客戶端顯示,HTML就會!

2.JSP的腳本片段(會生成_jspService方法中,寫java代碼片段需滿足java書寫規範,不要漏寫“;”)

<%    %>

3.JSP表達式

<%= 變量或者表達式%>

作用:用來將程序的輸出,輸出到客戶端

4.JSP聲明(寫在類中,即寫在了_jspService方法外)

 <%!  %>

JSP指令

1.page指令

屬性:

    pageEncoding屬性:設置jsp頁面的字符集
 	contentType:設置jsp的響應類型   (html或plain...)
 	import:導包
 	errorPage:當頁面執行代碼出現異常時,跳轉的頁面
 	session:表示當請求到本頁面時,是否爲其創建一個session對象(默認爲true)

案例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*,java.text.*" %>
<%@ page errorPage="error.jsp" session="false" %>
<% int a = 1/0; %>  這裏一除0是會報錯的,結果會跳轉到error.jsp頁面 

2.include指令

<%@include file=""%>
<%--@include會將兩個頁面合二爲一--%>

注意:兩個頁面中不要有相同的變量名,這樣的導入稱爲靜態導入

3.taglib指令

用於導入jsp標準標籤庫

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

JSP的九大內置對象

  • pageContext- - - javax.servlet.jsp.PageContext 保存數據
  • request - - - javax.servlet.http.HttpServletRequest 保存數據
  • session - - - javax.servlet.http.HttpSession 保存數據
  • application - - - javax.servlet.ServletContext 保存數據
  • out - - - javax.servlet.jsp.JspWriter 用於瀏覽器輸出數據
  • response - - - javax.servlet.http.HttpServletResponse 響應
  • page - - - java.lang.Object 當前的servlet對象
  • config - - - javax.servlet.ServletConfig 取得服務器的配置信息
  • exception - - - java.lang.Throwable 顯示異常信息

四種保存數據對象的區別(作用域)

pageContext.setAttribute("name1","張三"); //保存的數據只在一個頁面中有效
request.setAttribute("name2","李四"); //保存的數據只在一次請求中有效,請求轉發會攜帶這個數據
session.setAttribute("name3","王麻子"); //保存的數據只在一次會話中有效,從打開瀏覽器到關閉瀏覽器
application.setAttribute("name4","天武");  //保存的數據只在服務器中有效,從打開服務器到關閉服務器

request:客戶端向服務器發送請求,產生的數據,用戶看完就沒用了,比如:新聞,用戶看完沒用的!
session:客戶端向服務器發送請求,產生的數據,用戶用完一會還有用,比如:購物車;
application:客戶端向服務器發送請求,產生的數據,一個用戶用完了,其他用戶還可能使用,比如:聊天數據;

JSP標籤

1.動態導入

<jsp:include page="/common/header.jsp"/>

注意:將兩個JSP編譯成兩個Java文件,實現調用,兩個JSP分開執行,變量不會衝突

2.請求轉發

<jsp:forward page="/jsptag2.jsp">
    <jsp:param name="age" value="12"></jsp:param>  //參數傳遞
</jsp:forward>

1、若要進行參數傳遞,另一個jsp頁面獲取時需用request.getParameter(“key”)進行獲取
2、不傳參數時JSTL,兩個中間不能有空格,不然會報錯

JSTL標籤

  1. 核心標籤
  2. 格式化標籤
  3. SQL標籤
  4. XML 標籤

JSTL標籤庫的使用步驟

1.引入對應的 taglib
2.使用其中的方法
3.在Tomcat 也需要引入 jstl的包,否則會報錯:JSTL解析錯誤
實例:
1.c:if方法

<form action="coreif.jsp" method="get">
    <%--
    EL表達式獲取表單中的數據
    ${param.參數名}
    --%>
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="登錄">
</form>
<%--判斷如果提交的用戶名是管理員,則登錄成功--%>
<c:if test="${param.username=='admin'}" var="isAdmin">
    <c:out value="管理員歡迎您!"/>
</c:if>
<%--自閉合標籤--%>
<c:out value="${isAdmin}"/>

2.c:forEach

<%
    ArrayList<String> people = new ArrayList<>();
    people.add(0,"張三");
    people.add(1,"李四");
    people.add(2,"王五");
    people.add(3,"趙六");
    people.add(4,"田六");
    request.setAttribute("list",people);
%>
<%--
var , 每一次遍歷出來的變量
items, 要遍歷的對象
begin,   哪裏開始
end,     到哪裏
step,   步長
--%>
<c:forEach var="people" items="${list}">
    <c:out value="${people}"/> <br>
</c:forEach>
<hr>
<c:forEach var="people" items="${list}" begin="1" end="3" step="1" >
    <c:out value="${people}"/> <br>
</c:forEach>

EL表達式

1.表達式

 ${ }

2.用途

  • 獲取數據
  • 執行運算
  • 獲取web開發的常用對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章