一、jsp腳本和注釋
jsp腳本:
1)<%java代碼%> ----- 內部的java代碼翻譯到service方法的內部
2)<%=java變量或表達式> ----- 會被翻譯成service方法內部out.print()
3)<%!java代碼%> ---- 會被翻譯成servlet的成員的內容
jsp注釋: 不同的注釋可見范圍是不同
1)Html注釋:—可見范圍 jsp源碼、翻譯后的servlet、頁面 顯示html源碼
2)java注釋://單行注釋 /多行注釋/ --可見范圍 jsp源碼 翻譯后的servlet
jsp注釋:<%–注釋內容–%> ----- 可見范圍 jsp源碼可見
<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" errorPage="/error.jsp" ispageEncoding="UTF-8" session="true" %><!-- 引入jstl核心庫 -->
<%-- <%@ taglib uri="http://" orefix="q" %> --%>
<%-- <%@ taglib uri="http://" orefix="wsq" %> --%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><!-- 使用q庫的標簽 --><!-- <q:if></q:if> --><!-- 使用wsq庫的標簽 --><!-- <wsq:yy></wsq:yy> --><%@ include file = "/demo.jsp" %>wsqwsqwsq<!-- < %java 代碼 % > --> <!-- 內部的java代碼翻譯到service方法的內部 --><%session.setAttribute("name", "qibao");int i=0;System.out.println(i); /* 會在控制臺輸出i的值 *//* List list = new ArrayList(); *//* java.util.List list = new java.util.ArrayList(); *///int y=1/0;%><!-- < %=java 變量或表達式 > --> <!-- 表達式,可以理解為最終有結果的東西 --> <!-- 會被翻譯成service方法內部out.print(); --><%=i %> <!-- 這里會輸出i的值為0,在頁面輸出 --><!-- < %!java 代碼 % > --> <!-- 會被翻譯成servlet的成員的內容 --><%!String sq = "hello qb";%><%-- 這是一個jsp注釋 --%><!-- 這是一個html注釋 --><%=sq %> <!-- 可以在頁面輸出sq這個字符串 --><h1>sq</h1>
</body>
</html>
二、jsp運行原理-----jsp本質就是servlet(面試)
jsp在第一次被訪問時會被Web容器翻譯成servlet,在執行
過程:
第一次訪問---->helloServlet.jsp---->helloServlet_jsp.java---->編譯運行
PS:被翻譯后的servlet在Tomcat的work目錄中可以找到
三、jsp指令(3個)
jsp的指令是指導jsp翻譯和運行的命令,jsp包括三大指令:
1)page指令 — 屬性最多的指令(實際開發中page指令默認)
屬性最多的一個指令,根據不同的屬性,指導整個頁面特性
格式:<%@ page 屬性名1= “屬性值1” 屬性名2= “屬性值2” …%>
常用屬性如下:
language:jsp腳本中可以嵌入的語言種類
pageEncoding:當前jsp文件的本身編碼—內部可以包含contentType
contentType:response.setContentType(text/html;charset=UTF-8)
session:是否jsp在翻譯時自動創建session
import:導入java的包
errorPage:當當前頁面出錯后跳轉到哪個頁面
isErrorPage:當前頁面是一個處理錯誤的頁面
2)include指令
頁面包含(靜態包含)指令,可以將一個jsp頁面包含到另一個jsp頁面中
格式:<%@ include file=“被包含的文件地址”%>
3)taglib指令
在jsp頁面中引入標簽庫(jstl標簽庫、struts2標簽庫)
格式:<%@ taglib uri=“標簽庫地址” prefix=“前綴”%>
四、jsp內置/隱式對象(9個)
名稱 | 描述 | 類型 |
---|---|---|
out | 用于頁面輸出 | javax.servlet.jsp.JspWriter |
request | 得到用戶請求信息 | javax.servlet.http.HttpServletRequest |
response | 服務器向客戶端的回應信息 | javax.servlet.http.HttpServletResponse |
config | 服務器配置,可以取得初始化參數 | javax.servlet.ServletConfig |
session | 用來保持用戶的信息 | javax.servlet.http.HttpSession |
application | 所有用戶的共享信息 | javax.servlet.ServletContext |
page | 指當前頁面轉換后的Servlet類的實例 | java.lang.Object |
pageContext | JSP的頁面容器 | javax.servlet.jsp.PageContext |
exception | 表示JSP頁面所發生的異常,在錯誤頁中才起作用 | java.lang.Throwable |
(1)out對象
out的類型:JspWriter
out作用就是想客戶端輸出內容----out.write()
out緩沖區默認8kb 可以設置成0 代表關閉out緩沖區 內容直接寫到respons緩沖 器
(2)pageContext對象
jsp頁面的上下文對象,作用如下:
page對象與pageContext對象不是一回事
1)pageContext是一個域對象
setAttribute(String name,Object obj)
getAttribute(String name)
removeAttrbute(String name)
pageContext可以向指定的其他域中存取數據
setAttribute(String name,Object obj,int scope)
getAttribute(String name,int scope)
removeAttrbute(String name,int scope)
findAttribute(String name)
—依次從pageContext域,request域,session域,application域中獲 取屬性,在某個域中獲取后將不在向后尋找
2)可以獲得其他8大隱式對象
例如: pageContext.getRequest()
pageContext.getSession()
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body><%/* 使用pageContext向request域存數據 */request.setAttribute("name", "wsq");pageContext.setAttribute("name", "zhangsan", PageContext.REQUEST_SCOPE);pageContext.setAttribute("name", "lisi", PageContext.REQUEST_SCOPE);pageContext.setAttribute("name", "wangwu", PageContext.REQUEST_SCOPE);%><%=request.getAttribute("name") %><%=pageContext.getAttribute("name", PageContext.REQUEST_SCOPE) %> <!-- findAttribute會從小到大搜索域的范圍中的name --><!-- pageContext域<request域<session域<application域 -->><%=pageContext.findAttribute("name") %><%pageContext.getRequest();pageContext.getOut();%>
</body>
</html>
四大作用域的總結:
page域:當前jsp頁面范圍
request域:一次請求
session域:一次會話
application域:整個web應用
五、兩種jsp標簽(靜態,動態)的區別
#####都是在 *1.jsp 里面嵌套 *2.jsp
動態:
<jsp:include page="/include2.jsp"></jsp:include>
//include1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body><h1>this is an include1.jsp</h1><!-- 包含include2.jsp --><jsp:include page="/include2.jsp"></jsp:include>
</body>
</html>
//include2.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body><h1>beyondwsq</h1>
</body>
</html>
靜態:
<%@ include file="/include_2.jsp" %>
//include_1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body><h1>this is an include_1.jsp</h1><%@ include file="/include_2.jsp" %>
</body>
</html>
//include_2.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body><h1>xxxxxxxxx</h1>
</body>
</html>
接下來,咱們來看一下源碼:
E:\Web后端\WEB12_Http&Tomcat\WEB12_Http&Tomcat\資料\apache-tomcat-7.0.52\work\Catalina\localhost\WEB17\org\apache\jsp
include1.jsp跟include2.jsp是動態的嵌套
1)頁面包含(動態包含):<jsp:include page=“被包含的頁面”/>
(靜態包含):<%@ include file=“被包含的頁面” %>
2)請求轉發:<jsp:forward page=“要轉發的資源” />
也就是從*1.jsp可以跳轉到要轉發的資源位置