一.jsp概述
JSP全稱是Java Server Pages,它和servle技術一樣,都是SUN公司定義的一種用于開發(fā)動態(tài)web資源的技術球榆。JSP實際上就是Servlet娃兽。
三個概念
- html:靜態(tài)內(nèi)容
- servlet:服務器端的小應用程序菇民,處理Java邏輯代碼。主要作用是:
(1)獲取表單數(shù)據(jù)
(2)處理業(yè)務邏輯
(3)分發(fā)轉(zhuǎn)向 - jsp:編寫輸出動態(tài)內(nèi)容投储,但不適合編寫java邏輯第练。
通俗易懂:jsp = html + java
思考:
-
IE瀏覽器訪問jsp頁面時,Web服務器是如何調(diào)用并執(zhí)行一個jsp頁面的玛荞?
image.png -
Web服務器在執(zhí)行jsp頁面時娇掏,是如何把jsp頁面中的html排版標簽發(fā)送到客戶端的?
jsp界面代碼
服務器自動生成的代碼 jsp頁面中的java代碼勋眯,服務器是如何執(zhí)行的婴梧?
在執(zhí)行 JSP 網(wǎng)頁時,通晨吞#可分為兩個時期:轉(zhuǎn)譯時期(Translation Time)和請求時期(Request Time)
轉(zhuǎn)譯時期:JSP網(wǎng)頁轉(zhuǎn)譯成Servlet類塞蹭。
請求時期:Servlet類執(zhí)行后,響應結(jié)果至客戶端嚼酝。
轉(zhuǎn)譯期間主要做了兩件事情:
將JSP網(wǎng)頁轉(zhuǎn)譯為 Servlet 源代碼(.java)浮还;
將Servlet源代碼(.java)編譯成 Servlet 類(.class)。
-
web服務器在調(diào)用jsp時闽巩,會給jsp提供一些什么java對象
tomcat源碼
jsp基本語法
jsp的腳本
小腳本<% java 代碼 %>
表達式<%=2+3>
等價于out.print(2+3)
聲明<%! 代碼 %>
表示在類中定義全局成員和靜態(tài)塊钧舌。注釋
jsp注釋:<%-- 注釋文字 --%>
不會返回到瀏覽器中
html注釋:有的瀏覽器會返回到瀏覽器中jsp 3個指令
- page 指令
1.1、 import 和java代碼中的import是一樣的
<%@ page import="java.util.Date,java.util.List"%>
或者:
<%@ page import="java.util.Date"%>
<%@ page import="java.util.List"%>
JSP會自動導入以下的包:
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
1.2涎跨、 session: 是否會自動創(chuàng)建session對象洼冻。默認值是true;
1.3、 buffer: JSP中有javax.servlet.jsp.JspWriter輸出字符流隅很。設置撞牢。輸出數(shù)據(jù)的緩存大小,默認是8kb.
1.4 errorPage: 如果頁面中有錯誤,則跳轉(zhuǎn)到指定的資源屋彪。
errorPage="/uri" 如果寫“/”則代表當前應用的目錄下所宰,絕對路徑。
如果不寫“/”則代表相對路徑畜挥。
1.5仔粥、 isErrorPage: 是否創(chuàng)建throwable對象。默認是false;
1.6蟹但、 contextType: 等同于response.setContextType("text/html;charset=utf-8");
1.7躯泰、 pageEncoding: 告訴JSP引擎要翻譯的文件使用的編碼。
1.8华糖、 isELIgnored: 是否支持EL表達式麦向。 默認是false
<%@ page pageEncoding="gbk" %>
- Include 指令
靜態(tài)包含:把其它資源包含到當前頁面中。
<%@ include file="/include/header.jsp" %>
動態(tài)包含:
<jsp:include page="/include/header.jsp"></jsp:include>
兩者的區(qū)別:翻譯的時間段不同
前者:在翻譯時就把兩個文件合并
后者:不會合并文件客叉,當代碼執(zhí)行到include時诵竭,才包含另一個文件的內(nèi)容。
原則:能用靜的就不用動的十办。
- taglib 指令
作用:在JSP頁面中導入JSTL標簽庫秀撇。替換jsp中的java代碼片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- jsp 6個動作
<%
Student stu = new Student();
stu.setName("tom");
out.print(stu.getName());
//request.getRequestDispatcher("/7.jsp").forward(request, response);
%>
<jsp:useBean id="stu1" class="com.ky.entity.Student"></jsp:useBean>
<jsp:setProperty property="name" name="stu1" value="jerry"/>
<jsp:getProperty property="name" name="stu1"/>
<!-- http://localhost:8080/day11_02_jsp2/6.jsp?name=123 -->
<jsp:forward page="/7.jsp">
<jsp:param value="123" name="name"/>
<jsp:param value="333" name="pwd"/>
</jsp:forward>
-
jsp 9個內(nèi)置對象
9個內(nèi)置對象
<body>
<%
//pageContext.setAttribute("p", "pp");
pageContext.setAttribute("p", "pp", PageContext.PAGE_SCOPE);
//pageContext.setAttribute("p", "pp", PageContext.REQUEST_SCOPE);
request.setAttribute("p", "request");
//pageContext.setAttribute("p", "pp", PageContext.SESSION_SCOPE);
//session.setAttribute("p", "session");
//pageContext.setAttribute("p", "pp", PageContext.APPLICATION_SCOPE);
application.setAttribute("p", "application");
//request.getRequestDispatcher("/2.jsp").forward(request, response);
//response.sendRedirect(request.getContextPath()+"/2.jsp");
pageContext.forward("/2.jsp");
%>
</body>
作用與范圍: pageContext<request<session<application
使用規(guī)則:
- PageContext : pageConext 存放的數(shù)據(jù)在當前頁面有效向族。開發(fā)時使用較少呵燕。
- ServletRequest: request 存放的數(shù)據(jù)在一次請求(轉(zhuǎn)發(fā))內(nèi)有效。使用非常多件相。
- HttpSession: session 存放的數(shù)據(jù)在一次會話中有效再扭。使用的比較多。如:存放用戶的登錄信息夜矗,購物車功能泛范。
- ServletContext: application 存放的數(shù)據(jù)在整個應用范圍內(nèi)都有效。因為范圍太大紊撕,應盡量少用罢荡。
EL表達式
<%
Student stu = (Student)request.getAttribute("s");
//out.print(stu.getName());
%>
${s.city.address } <!-- ${s}==pageContext.findAttribute("s") -->