abstract:一、jsp的3個(gè)指令JSP指令(directive)是為JSP引擎而設(shè)計(jì)的,它們并不直接產(chǎn)生任何可見(jiàn)輸出,而只是告訴引擎如何處理JSP頁(yè)面中的其余部分。在JSP 2.0規(guī)范中共定義了三個(gè)指令:page指令1、page:作用:用于定義JSP頁(yè)面的各種屬性屬性:1.1、 import 和java代碼中的import是一樣的<%@ page import="java.util.Date,
一、jsp的3個(gè)指令
JSP指令(directive)是為JSP引擎而設(shè)計(jì)的,它們并不直接產(chǎn)生任何可見(jiàn)輸出,而只是告訴引擎如何處理JSP頁(yè)面中的其余部分。
在JSP 2.0規(guī)范中共定義了三個(gè)指令:
page指令
1、page:
作用:用于定義JSP頁(yè)面的各種屬性
屬性:
1.1、 import 和java代碼中的import是一樣的
<%@ page import="java.util.Date,java.util.List"%>
或者:
<%@ page import="java.util.Date"%>
<%@ page import="java.util.List"%>
JSP會(huì)自動(dòng)導(dǎo)入以下的包:
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
1.2、 session: 是否會(huì)自動(dòng)創(chuàng)建session對(duì)象。默認(rèn)值是true;
1.3、 buffer: JSP中有javax.servlet.jsp.JspWriter輸出字符流。設(shè)置。輸出數(shù)據(jù)的緩存大小,默認(rèn)是8kb.
1.4 errorPage: 如果頁(yè)面中有錯(cuò)誤,則跳轉(zhuǎn)到指定的資源。
errorPage="/uri" 如果寫“/”則代表當(dāng)前應(yīng)用的目錄下,絕對(duì)路徑。
如果不寫“/”則代表相對(duì)路徑。
1.5、 isErrorPage: 是否創(chuàng)建throwable對(duì)象。默認(rèn)是false;
1.6、 contextType: 等同于response.setContextType("text/html;charset=utf-8");
1.7、 pageEncoding: 告訴JSP引擎要翻譯的文件使用的編碼。
1.8、 isELIgnored: 是否支持EL表達(dá)式。 默認(rèn)是false
<%@ page pageEncoding="gbk" %>
2、include:
靜態(tài)包含:把其它資源包含到當(dāng)前頁(yè)面中。
<%@ include file="/include/header.jsp" %>
動(dòng)態(tài)包含:
<jsp:include page="/include/header.jsp"></jsp:include>
兩者的區(qū)別:翻譯的時(shí)間段不同
前者:在翻譯時(shí)就把兩個(gè)文件合并
后者:不會(huì)合并文件,當(dāng)代碼執(zhí)行到include時(shí),才包含另一個(gè)文件的內(nèi)容。
原則:能用靜的就不用動(dòng)的。
3、taglib
作用:在JSP頁(yè)面中導(dǎo)入JSTL標(biāo)簽庫(kù)。替換jsp中的java代碼片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
二、jsp的6個(gè)動(dòng)作
使用標(biāo)簽的形式來(lái)表示一段java代碼。
如: <jsp:include page="2.jsp"></jsp:include>
<jsp:include > 動(dòng)態(tài)包含
<jsp:forward> 請(qǐng)求轉(zhuǎn)發(fā)
<jsp:param> 設(shè)置請(qǐng)求參數(shù)
<jsp:useBean> 創(chuàng)建一個(gè)對(duì)象
<jsp:setProperty> 給指定的對(duì)象屬性賦值
<jsp:getProperty> 取出指定對(duì)象的屬性值
<% Student stu = new Student(); stu.setName("tom"); out.print(stu.getName()); //request.getRequestDispatcher("/7.jsp").forward(request, response); %> <jsp:useBean id="stu1" class="com.itheima.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個(gè)內(nèi)置對(duì)象(指在JSP的<%=%> 和<% %>中可以直接使用的對(duì)象)
1.request
2.response
3.config
4.application
5.exception
6.Session
7.page
8.out
9.pageContext
1、本身也是一個(gè)域?qū)ο螅核梢圆僮髌渌齻€(gè)域?qū)ο螅╮equest session application)的數(shù)據(jù)
void setAttribute(String name,Object o);
Object getAttribute(String name);
void removeAttribute(String name);
操作其它域?qū)ο蟮姆椒?/p>
void setAttribute(String name,Object o,int Scope);
Object getAttribute(String name,int Scope);
void removeAttribute(String name,int Scope);
scpoe的值:
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext.SESSION_SCOPE
PageContext.APPLICATION_SCOPE
findAttribute(String name); 自動(dòng)從page request session application依次查找,找到了就取值,結(jié)束查找。
<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>
<body> <% /* String p = (String)pageContext.getAttribute("p"); out.print(p); */ //out.print(request.getAttribute("p")); %> <%-- <%=session.getAttribute("p") %> --%> <%-- <%=application.getAttribute("p") %> --%> <%=pageContext.findAttribute("p") %> </body>
四、四大域?qū)ο螅簩?shí)際開(kāi)發(fā)
PageContext : pageConext 存放的數(shù)據(jù)在當(dāng)前頁(yè)面有效。開(kāi)發(fā)時(shí)使用較少。
ServletRequest: request 存放的數(shù)據(jù)在一次請(qǐng)求(轉(zhuǎn)發(fā))內(nèi)有效。使用非常多。
HttpSession: session 存放的數(shù)據(jù)在一次會(huì)話中有效。使用的比較多。如:存放用戶的登錄信息,購(gòu)物車功能。
ServletContext: application 存放的數(shù)據(jù)在整個(gè)應(yīng)用范圍內(nèi)都有效。因?yàn)榉秶?,?yīng)盡量少用。
五、EL表達(dá)式
1、EL概述和基本語(yǔ)法
EL表達(dá)式:expression language 表達(dá)式語(yǔ)言
要簡(jiǎn)化jsp中java代碼開(kāi)發(fā)。
它不是一種開(kāi)發(fā)語(yǔ)言,是jsp中獲取數(shù)據(jù)的一種規(guī)范
2、EL的具體功能
a、獲取數(shù)據(jù)
EL表達(dá)式只能獲取存在4個(gè)作用域中的數(shù)據(jù)
${u} 原理: pageContext.findAttribute("u");
url?name=tom ${param.name}
EL獲取對(duì)于null這樣的數(shù)據(jù),在頁(yè)面中表現(xiàn)為空字符串
${u.name} == u.getName()方法
點(diǎn)(.) 運(yùn)算符相當(dāng)于調(diào)了getter方法,點(diǎn)后頁(yè)面跟的是屬性名。
屬性導(dǎo)航
[]運(yùn)算符:點(diǎn)能做的,它也能做; 它能做的,點(diǎn)不一定能做
${student.name}== ${student['name']} == ${student["name"]}
b、運(yùn)算
empty
判斷null,空字符串和沒(méi)有元素的集合(即使集合對(duì)象本身不為null)都返回true
三元運(yùn)算符
c、隱式對(duì)象:11個(gè)
EL隱式對(duì)象引用名稱 類型 JSP內(nèi)置對(duì)象名稱 說(shuō)明
${param.userName } 等價(jià)于${param.userName }==request.getParamemter("userName"); ${paramValues.hobby[0] } 取數(shù)組的第一個(gè) ${header["User-agent"] } ${cookie.JSESSIONID.value }
<form action="${pageContext.request.contextPath }/success.jsp" method="post"> 用戶名:<input type="text" name="userName" /><br /> 密碼:<input type="password" name="pwd" /><br /> <input type="submit" value="登錄" /><br /> </form>
六、JSTL
1、什么是JSTL
JSTL(JavaServerPages Standard Tag Library)JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù)
2、JSTL的作用
使用JSTL實(shí)現(xiàn)JSP頁(yè)面中邏輯處理。如判斷、循環(huán)等。
3、使用JSTL
1)在JSP頁(yè)面添加taglib指令
2)使用JSTL標(biāo)簽
4、常用標(biāo)簽介紹
核心標(biāo)簽庫(kù):
> 通用標(biāo)簽: set、 out、 remove
> 條件標(biāo)簽:if choose
> 迭帶標(biāo)簽:foreach