jsp標簽+jstl
* JSP的入門 * JSP是服務器技術。 java server pages * JSP可以寫大代碼 * java+HTML+JSP自己代碼 * 需要在JSP <%! %>(了解) 成員方法、成員變量 <%= %> 輸出內容 <% %> 局部變量,語句 * JSP的原理:JSP -- 翻譯Servlet文件 -- 編譯.class文件 -- 執行 * 在tomcat/work/翻譯Servlet的文件 * 兩個會話的技術(*****) * cookie * cookie的api * cookie的構造方法 new Cookie("cookie的名稱","cookie的值"); * 獲取cookie的名稱:getName(); * 獲取cookie的值:getValue(); * 會話級別cookie * 持久的cookie * setMaxAge(int 秒) 設置有效時間 * setPath() 設置有效路徑 * 默認的路徑 /day11 /day11/servet * 訪問其他的web資源 http://localhost/day11/jsp/1.jsp * setDomain() 設置有效域名 * 持久的cookie失效 setMaxAge(0) 有效路徑相同 * request.getCookies() 返回cookie數組 * response.addCookie(new Cookie()) 回寫cookie * session(服務器端) * 為每個瀏覽器創建獨享的session空間。分配jsessionid ,基於cookie。 * 獲取session對象:request.getSession() 第一次訪問,創建session。 * HttpSession對象 * getId(); * invalidate() 銷毀session
Cookie c=new Cookie("zhang","zhagnelei");
response.addCookie(c);
Cookie[] cookies=request.getCookies();
for(Cookie cookie:cookies){
out.print(cookie.getName()+cookie.getValue());
}
========================================================================================================== * session(*****) * session的追蹤(了解) * session的創建和銷毀 * 第一次訪問資源,調用request.getSession(),創建session * 銷毀 * 非正常關閉服務器() * session的過期,默認是30分鐘。 <session-config> <session-timeout>30</session-timeout> </session-config> * 調用session.invalidate() 手動銷毀session * session的域對象 ServlerContext :代表整個web應用,數據庫鏈接 session :一次會話,存放個人的信息。 request :一次請求,存放錯誤處理。 * JSP語法 * JSP的設置 * 設置JSP文件的打開方式:window -- 選項 -- General -- Editors -- 文件關聯 -- *.jsp -- 選擇MyEclipse JSP Editor -- default * 設置JSP文件的編碼:window -- 搜索JSP -- 找到JSP -- 選擇UTF-8 -- OK * 腳本元素 <%! %> 成員方法、成員變量 <%= %> 輸出內容 <% %> 局部變量,語句 * JSP頁面的註釋 * HTML的註釋 <!-- --> JSP文件的階段存在,在翻譯成java文件也存在, 在頁面存在 * JAVA的註釋 JSP文件的階段存在,在翻譯成java文件也存在, 在頁面不存在 <% // 單行 /**/ 多行 /** * 文檔 */ %> * JSP的註釋 <%-- JSP的註釋 --%> 之後存在JSP文件的階段 * JSP的指令元素 * 語法:<%@ 指令元素 屬性名=屬性值 %> * page :設置JSP的屬性 * 註意:import屬性可以出現多次,其他屬性只能出現一次。 * 屬性: * language :JSP文件允許嵌入的語言。只支持一種JAVA語言。(不需要改變) * extends :JSP翻譯翻譯Servlet文件,servlet繼承的類。(不需要改變) * session :默認值是true,可以直接使用session。設置false,不能直接使用。 * import :引入java的jar包(使用多次) * buffer :設置緩沖區的大小 默認8kb * aotoFlush :設置默認刷新緩沖區(不要修改) * errorPage :指定錯誤頁面 * isErrorPage :設置值,可以是exception對象,設置true,使用exception,設置不能使用exception對象 * contentType :服務器端輸出所有內容采用編碼。 * pageEncoding :JSP翻譯成Servlet文件時采用的編碼。 * isELIgnored :是否忽略EL表達式(false,不忽略,true,忽略) * 重點: * session import contentType pageEncoding isELIgnored * include :包含頁面(頁面布局) * 語法:<%@ include file="要包含文件的地址(靜態包含)" %> * <%@ include file="/include/head.jsp" %>
<%@include file="/views/style.jsp" %> <!-- /表示當前項目 -->
* taglib :引入標簽庫文件(明天) * 語法:<%taglib %> * 屬性: * uri :引入標簽庫文件的名稱 * prefix :標簽庫的前綴名 * 配置全局的錯誤頁面 * 在web.xml中進行配置。
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
* JSP的內置對象(9個)直接使用
request response session application out pageContext page config exception
內置對象 真實的對象 方法
request HttpServletRequest setAttribute() getAttribute()
response HttpServletResponse addCookie() getWriter()
session HttpSession setAttribute() getAttribute()
application ServletContext setAttribute() getAttribute()
config ServletConfig getInitParameter() getInitParameterNames()
exception (了解) Throwable getMessage()
page Object (不使用對象)
out JspWriter write() print()
pageContext PageContext setAttribute() getAttribute()
* exception
* 和異常有關的
* 前提條件:isErrorPage="true",才能使用exception對象。
* page
* 當前頁面的對象。
* out對象
JspWriter PrintWriter response.getWriter()
<%= "HELLO" %> HELLO
<% out.print("AAAA"); %> AAAA
<% response.getWriter().print("BBBB"); %> BBBB
<% out.print("CCCC"); %> CCCC
* pageContext對象
* 域對象
* 自己存取值
* 向其他的域存取值。
* setAttribute(String name, Object value, int scope)
* getAttribute(String name, int scope)
* findAttribute(String name)
pageContext 中代表域的常量
PageContext.APPLICATION_SCOPE
PageContext.SESSION_SCOPE
PageContext.REQUEST_SCOPE
PageContext.PAGE_SCOPE
* 可以獲取其他8個對象。
//pageContext獲取其他8個對象
ServletContext servletContext01=pageContext.getServletContext();
ServletConfig config01=pageContext.getServletConfig();
HttpSession session01=pageContext.getSession();
PrintWriter out01=pageContext.getResponse().getWriter();
HttpServletRequest request01=(HttpServletRequest)pageContext.getRequest();
HttpServletResponse response01=(HttpServletResponse)pageContext.getResponse();
Object page01=this;
* 編寫框架或者通用性較高代碼。
* 在JSP的時候(4個域對象)
ServletContext 整個web應用
session 一次會話
request 一次請求
pageContext 當前頁面
* JSP的標簽(JSP的動作)
<jsp:forward> :轉發 屬性:page 要轉發的頁面 <jsp:param> :傳遞參數 屬性:name:參數名稱 value:參數值 <jsp:include > :頁面的包含(動態包含) 屬性:page 要包含的頁面
* JavaBean和內省(了解)有個工具類直接完成數據封裝。 * 什麽是JavaBean? * 定義 * 必須有一個無參的構造方法 * 屬性私有化 * 私有化的屬性必須通過public類型的方法暴露給其它程序,並且方法的命名也必須遵守一定的命名規範。 public class User(){ private String username; private String password; public void setUsername(){ } public void getUsername(){ } public void getPassword(){ } public void getInfo(){ } } * 作用:封裝數據。 把數據封裝到JavaBean中(JSP頁面中完成的) <jsp:useBean> <jsp:setProperty> <jsp:getProperty> <jsp:useBean id="u" class="cn.itcast.vo.User"></jsp:useBean> <jsp:setProperty property="username" value="" name="u"/> <jsp:setProperty property="password" name="u"/> 或者 <jsp:setProperty property="*" name="u"/> <jsp:getProperty property="username" name="u"/> <jsp:getProperty property="password" name="u"/>
<jsp:useBean id="User" class="com.rl.entity.User"></jsp:useBean>
<jsp:setProperty property="username" value="zhanglei" name="User"/>
<jsp:setProperty property="password" value="123456" name="User"/>
<a href="aaaaaaaaaaa"><jsp:getProperty property="username" name="User"></jsp:getProperty> </a>
<jsp:getProperty property="password" name="User"/>
* 內省(Introspector)可以獲取javabean的有哪些屬性。並且設置這些屬性的值 @Test public void run() throws Exception{ User user = new User(); // 獲取類的信息 BeanInfo info = Introspector.getBeanInfo(user.getClass()); // 獲取屬性的描述 PropertyDescriptor [] pds = info.getPropertyDescriptors(); // 循環遍歷,獲取屬性的名稱 for (PropertyDescriptor pd : pds) { // System.out.println(pd.getName()); if(!"class".equals(pd.getName())){ // 獲取寫的方法 Method m = pd.getWriteMethod(); m.invoke(user, "admin"); } } System.out.println(user.getUsername()); System.out.println(user.getPassword()); } * 導入jar包 j * commons-beanutils-1.8.3.jar * commons-logging-1.1.1.jar * 默認把字符串轉換成日期類型 * 編寫一個類,實現Converter接口。重寫該方法。把字符串轉換日期。 * 在封裝數據之前進行註冊。ConvertUtils.register(Converter converter, Class clazz) Date.class * EL表達式 * 語法:${ } * 獲取(域對象中的)數據 <h4>獲取域對象中的值</h4> <% pageContext.setAttribute("name", "黃海波"); request.setAttribute("name", "美美"); %> ${ pageScope.name } ${ requestScope.name } <h4>域中數組的值</h4> <% String [] arrs = {"美美","波波","東東","名名"}; request.setAttribute("arrs", arrs); %> ${ arrs[2] } <h4>域中集合的值</h4> <% List<String> list = new ArrayList<String>(); list.add("美美"); list.add("小鳳"); list.add("芙蓉"); request.setAttribute("list", list); %> ${ list[1] } <h4>域中Map集合的值</h4> <% Map<String,String> map = new HashMap<String,String>(); map.put("aa", "美美"); map.put("bb", "小鳳"); request.setAttribute("map", map); %> ${ map.bb } <h4>域中集合中有對象的值</h4> <% List<User2> uList = new ArrayList<User2>(); uList.add(new User2("banzhang","123")); uList.add(new User2("美美","abc")); request.setAttribute("uList", uList); %> ${ uList[1].username } * 執行運算 <h4>加法運算</h4> ${ n1 + n2 } <h3>關系運算</h3> <h4>大於</h4> ${ n1 > n2 } ${ n1 gt n2 } <h4>小於</h4> ${ n1 < n2 } ${ n1 lt n2 } <h4>等於</h4> ${ n1 == n2 } ${ n1 eq n2 } <h4>不等於</h4> ${ n1 != n2 } ${ n1 ne n2 } <h4>大於等於</h4> ${ n1 >= n2 } ${ n1 ge n2 } <h4>小於等於</h4> ${ n1 <= n2 } ${ n1 le n2 } <h3>邏輯運算</h3> <h4>與</h4> ${ n1 > n2 && n3 > n4 } ${ n1 > n2 and n3 > n4 } <h4>或</h4> ${ n1 > n2 || n3 > n4 } ${ n1 > n2 or n3 > n4 } <h4>非</h4> ${ !(n1 > n2) } ${ not (n1 > n2) } * 獲取WEB開發中的對象(了解) pageScope requestScope sessionScope applicationScope param 獲取請求的參數 getParameter() paramValues 獲取請求的參數 getParameterValues() header 獲取請求頭的信息 headerValues 獲取請求頭的信息 initParam 獲取全局的初始化參數 cookie 獲取cookie pageContext <h4>EL的WEB對象</h4> ${ param.username } <h4>獲取請求頭</h4> ${ header.referer } <h4>獲取全局初始化參數</h4> ${ initParam.username } <h4>pageContext對象</h4> ${ pageContext.request.contextPath }
* JSTL標簽庫概述
* JSP標準標簽庫。
* 作用:和EL表達式一起 取代<% %>
* 版本:1.0 1.1和1.2(區別不大)
* 1.0EL表達式沒有納入規範
* 1.1和1.2EL表達式納入規範
* 下載jar包,導入到工程中
jstl.jar
standard.jar
* 標簽庫
c.tld 核心的標簽庫
fn.tld EL表達式標簽庫
* JSTL的快速入門
* 導入相應jar包。
* 新建JSP的文件,引入標簽庫
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
* 直接使用標簽庫
* JSTL的標簽
<c:out> 輸出內容
value :輸出的內容(常量或者變量)
default :默認值
escapeXml:默認是true,進行轉義,設置成false,不轉義。
代碼:
<c:out value="Hello"></c:out>
<c:out value="${name }"></c:out>
<!-- "" -->
<c:out value="${ city }" default="北京"></c:out>
<c:out value="<a href=‘#‘>超鏈接</a>" escapeXml="false"/>
<c:set>
* 屬性
var :定義屬性
value :存入的值
scope :域範圍
target :修改JavaBean對象
property:修改的屬性
* 向4個web域對象存入值
<c:set var="i" value="10" scope="request" ></c:set>
* 修改JavaBean對象屬性的值
<c:set target="${ user }" property="username" value="小鳳"></c:set>
<c:remove>
* 屬性
var :刪除的屬性
scope :在域的範圍
* 代碼
<c:set var="name" value="小鳳" scope="page"></c:set>
${ name }
<c:remove var="name" scope="page"/>
${name }
* <c:catch> (了解)
* 屬性:var 把異常的信息保存變量中
* 代碼
<c:catch var="e">
<%
int a = 10/0;
%>
</c:catch>
${ e.message }
* <c:if> 沒有<c:else>標簽
* 屬性
* test 判斷的條件
* var 計算的結果保存到變量中
* scope 域的範圍
* 代碼
<c:set var="i" value="10" scope="page"></c:set>
<c:if test="${ i ge 10 }" var="x" scope="page">
i >= 10
</c:if>
<c:if test="${ i lt 10 }">
i < 10
</c:if>
${ x }
* <c:choose>標簽
<c:when>
<c:otherwise>
代碼:
<c:set var="i" value="10" scope="page"></c:set>
<c:choose>
<c:when test="${ i ge 10 }">
i >= 10
</c:when>
<c:when test="${ i lt 10 }">
i < 10
</c:when>
<c:otherwise>
其他
</c:otherwise>
</c:choose>
* <c:forEach>(*****)
* 循環遍歷數據(數組,集合,Map集合)
* 屬性
var :遍歷數據的類型
items :要遍歷的內容
begin :從哪開始
end :到哪結束
step :步長
varStatus:記錄循環遍歷的信息
* index
* count(常用)
* first
* last
* 代碼
<%
String [] arrs = {"美美","小鳳","芙蓉","小蒼"};
request.setAttribute("arrs", arrs);
%>
<!-- for(String s : arrs){ } -->
<c:forEach var="s" items="${ arrs }">
${ s }
</c:forEach>
<h4>遍歷集合</h4>
<%
List<String> list = new ArrayList<String>();
list.add("美美");
list.add("小鳳");
list.add("芙蓉");
list.add("小澤");
request.setAttribute("list", list);
%>
<c:forEach var="s" items="${ list }"> //此時取得值是.setAttribute("list", list);中的list的值
${ s }
</c:forEach>
<h4>遍歷Map集合</h4>
<%
Map<String,String> map = new HashMap<String,String>();
map.put("aa", "美美");
map.put("bb", "小鳳");
map.put("cc", "芙蓉");
request.setAttribute("map", map);
%>
<c:forEach var="entry" items="${ map }">
${ entry.key } -- ${ entry.value }
</c:forEach>
<h4>遍歷對象的集合</h4>
<%
List<User> uList = new ArrayList<User>();
uList.add(new User("美美","123"));
uList.add(new User("小風","234"));
uList.add(new User("芙蓉","345"));
request.setAttribute("uList", uList);
%>
<c:forEach var="user" items="${ uList }">
${ user.username } -- ${ user.password }
</c:forEach>
<h4>叠代數據</h4>
<h4>叠代從1到10</h4>
<c:forEach var="i" begin="1" end="10" step="2">
${ i }
</c:forEach>
<h4>計算從1加到100的和</h4>
<c:set var="sum" value="0" scope="page"></c:set>
<c:forEach var="i" begin="1" end="100" step="1">
<c:set var="sum" value="${ sum + i }"></c:set>
</c:forEach>
${ sum }
<h4>遍歷10到100的偶數,每到第3個數,顯示紅色</h4>
<c:forEach var="i" begin="10" end="100" step="2" varStatus="status">
<c:choose>
<c:when test="${ status.first }">
<font color="blue">${ i }</font>
</c:when>
<c:when test="${ status.count % 3 eq 0 }">
<font color="red">${ i }</font>
</c:when>
<c:otherwise>
${ i }
</c:otherwise>
</c:choose>
</c:forEach>
* <c:param> 傳遞參數
* 屬性
name :參數名稱
value :參數的值
* <c:import> 包含頁面
* url :引入頁面的地址
* context :虛擬路徑
* var :引入頁面保存到屬性中
* scope :域的範圍
* 代碼
<c:import url="/jstl/choose.jsp" context="/day13" var="i" scope="page">
<c:param name="username" value="meimei"></c:param>
</c:import>
${ i }
* <c:url>(了解)
<c:url>標簽用於在JSP頁面中構造一個URL地址,其主要目的是實現URL重寫。
URL重寫就是將會話標識號以參數形式附加在URL地址後面
http://localhost/day12/demo?jsessionid=xxxxxxxxxxxxxxxxxx;
* 屬性
* var :聲明屬性
* value :地址
* scope :域範圍
* context :虛擬路徑
* 代碼
<c:url var="i" value="/jstl/choose.jsp" scope="request" context="/day13">
<c:param name="username" value="xiaofeng"></c:param>
</c:url>
<a href="${ i }">choose</a>
* <c:redirect>重定向
* 屬性
* url :重定向的地址
* context :虛擬路徑
* 代碼
<c:redirect url="/jstl/choose.jsp" context="/day13">
<c:param name="username" value="furong"></c:param>
</c:redirect>
* <c:forTokens>分隔字符串(了解)
<h4>分隔字符串</h4>
<c:set var="i" value="aa,bb,cc" scope="page"></c:set>
<c:forTokens items="${i }" delims="," var="x">
${ x }
</c:forTokens>
<%User user2=new User();
request.setAttribute("user2", user2); //如果用這種方式創建對象必須要加入4個域中的一個 不然取不到值
%>
<jsp:useBean id="us" class="com.rl.entity.User"></jsp:useBean>
<c:set var="user11" scope="request" value="zz" ></c:set>
<c:out value="${user11 }"></c:out>
<c:set property="password" value="dasfdsadfsdaf" target="${user2 }"></c:set>
<c:out value="${user2.password }"></c:out>
<c:set property="password" value="dasfdsadfsdaf" target="${us }"></c:set>
<c:out value="${us.password }"></c:out>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
jstl fmt 函數大全
主要功能格式化
日期格式(2008年5月5日22點00分23秒)
<fmt:formatDate value="<%=new Date() %>" pattern="yyyy年MM月dd日HH點mm分ss秒" />
保留兩位小數
<fmt:formatNumber value="123.123456789" pattern="0.00"/>
格式數字(45,678.234)
<fmt:formatNumber type="number" value="45678.2345" />
格式百分比(23%)
<fmt:formatNumber type="percent" value="0.2345" />
jsp標簽+jstl