jsp&el&jstl-01
案例1-在頁面中展示所有商品信息,不要使用jsp的腳本
技術分析:
jsp/el/jstl
jsp:
java 服務器頁面
作用:
將內容的生成和信息的展示相分離
運行在服務器端,本質上就是一個serlvet,產生的java文件和class保留在tomcat的word目錄下.
jsp腳本:
<%..%> java代碼片段
<%=..%> 輸出表達式 相當於out.print();
<%!...%> 聲明成員
jsp的指令
作用:聲明jsp頁面的一些屬性和動作
格式:
<[email protected]
jsp指令的分類:
page:主要聲明jsp頁面的一些屬性
include:靜態包含.
taglib:導入標簽庫
註意:
一個頁面中可以出現多個指令
指令可以放在任意位置,一般都放在jsp頁面最上面.
page指令:
重要屬性:3個
contentType:設置響應流的編碼,及通知瀏覽器用什麽編碼打開.設置文件的mimetype
pageEncoding:設置頁面的編碼
import:導入所需要的包
contentType和pageEncoding聯系:
若兩者都出現的時候,各自使用各自的編碼
若只出現一者,兩個都使用出現的這個編碼
若兩者都不出現,使用服務器默認的編碼 tomcat7使用的iso-8859-1
了解屬性:
language:當前jsp頁面裏面可以嵌套的語言
buffer:設置jsp頁面的流的緩沖區的大小
autoFlush:是否自動刷新
extends:聲明當前jsp的頁面繼承於那個類.必須繼承的是httpservlet 及其子類
session:設置jsp頁面是否可以使用session內置對象
isELIgnored:是否忽略el表達式
errorPage:當前jsp頁面出現異常的時候要跳轉到的jsp頁面
isErrorPage:當前jsp頁面是否是一個錯誤頁面
若值為true,可以使用jsp頁面的一個內置對象 exception
include指令:
靜態包含,就是將其他頁面或者servlet的內容包含進來,一起進行編譯運行.生成一個java文件.
格式:
<[email protected] file="相對路徑或者是內部路徑" %>
例如:
<[email protected] file="/jsp/include/i1.jsp" %>
路徑:
相對路徑:
./或者什麽都不寫 當前路徑
上一級路徑 ../
絕對路徑:
帶協議和主機的絕對路徑
不帶協議和主機的絕對路徑
/項目名/資源
內部路徑:
不帶協議和主機的絕對路徑去掉項目名
請求轉發 靜態包含 動態包含
taglib指令:導入標簽庫
格式:
<[email protected] prefix="前綴名" uri="名稱空間" %>
若導入之後
<前綴名:標簽 .. >
例如:
<c:if test="">輸出內容</c:if>
jsp的內置對象:★★★(9大內置對象)
在jsp頁面上可以直接使用的對象
內置對象 類型
out JspWriter
request HttpServletRequest
response HttpServletResponse
session HttpSession
exception Throwable
page Servlet(this)
config ServletConfig
application ServletContext
pageContext PageContext
jsp的域對象:理解
application 整個項目
session 一次會話
request 一次請求
pageContext 一個頁面
pagecontext作用:理解
1.域對象
xxxAttribute()
2.操作其他域對象
方法:
xxxAttribute(...,int scope);
scope取值:
APPLICATION_SCOPE
SESSION_SCOPE
REQUEST_SCOPE
PAGE_SCOPE
3.獲取其他的內置對象
getXxx()
註意:
getRequest():獲取request內置對象
4.便捷查找,
findAttribute(String key):
依次從pagecontext,request,session,application四個域中,查找相應的屬性,若查找到了返回值,且結束該次查找
若查找不到,返回一個null
jsp的動作標簽
<jsp:forward>:請求轉發 相當於java中 request.getRequestDispatcher(..).forward(..);
<jsp:forward page="內部路徑"></jsp:forward>
<jsp:include>:動態包含
就是將被包含頁面或者servlet的運行結果包含到當前頁面中.
el:
jsp的內置表達式語言,從jsp2.0開始.
用來替代<%=..%>
作用:
1.獲取域中數據 ★
2.執行運算 ★
3.獲取常見的web對象
4.調用java的方法
格式:
${el表達式}
獲取域中數據:★
註意:★
若屬性名中出現了"."|"+"|"-"等特殊符號,需要使用scope獲取
例如:
${requestScope["arr.age"] }
獲取簡單數據
${pageScope|requestScope|sessionScope|applicationScope.屬性名}
以後經常使用:
${屬性名}:依次從pageContext,request,session,application查找指定屬性,若查找到返回值,結束該次查找
若查找不到,返回""
獲取復雜數據
獲取數組中的數據
${域中的名稱[index]}
獲取list中的數據
${域中的名稱[index]}
獲取map中的數據
${域中的名稱.鍵名}
javabean導航
javabean:
java語言編寫的一個可重用的組件,
狹義上來說就是我們編寫的一個普通的java類 例如:User Person
javabean規範:
1.必須是一個公共的具體的類 public class
2.提供私有的字段 private String id;//id稱之為字段
3.提供公共訪問字段的方法 get|set|is方法
public String getId(){..}
一旦有公共的方法之後,get|set|is之後的內容,將首字母小寫,將這個東西稱之為bean屬性
id就是一個bean屬性
4.提供一個無參的構造器
5.一般實現序列化接口 serializable
${域中javabean名稱.bean屬性}
執行運算:
四則運算 關系(>..) 邏輯(&& ||)
註意:
+:只能進行加法運算,字符串形式數字可以進行加法運算.
empty:判斷一個容器的長度是否為0(array set list map),還可以判斷一個對象是否為空
${empty 域中的對象名稱}
三元運算符
el的內置對象(了解)
11個
pageScope
requestScope
sessionScope
applicationScope
param
paramValues
header
haederValues
initParam
cookie★
pageContext★
註意:
除了pagecontext其余對象獲取的全是map集合
了解:和參數相關的el內置對象
param
paramValues
了解:和請求頭相關的el內置對象
header
haederValues
了解:和全局初始化參數相關的el內置對象
initParam
cookie內置對象:
${cookie} 獲取map{key=Cookie}
例如:創建cookie
Cookie c=new Cookie("username","tom");
通過${cookie}獲取相當於
{username=new Cookie("username","tom")}
相當於map的key是cookie的鍵
map的value是當前cookie
若項獲取名稱username的cookie的value值(獲取tom)
${cookie.username.value}--javabean導航
註意:
java中Cookie的api
getName():獲取cookie的名稱
getValue():獲取cookie的value值
我們稱name和value是cookie的bean屬性
使用cookie內置對象:
${cookie.給cookie起名字.value}
例如:
獲取jsession的值
${cookie.JSESSIONID.value}
pageContext:獲取不是map集合,相當於jsp的pageContext內置對象
在jsp頁面中獲取項目名
${pageContext.request.contextPath}
jsp註釋:
html註釋 <!-- -->
註釋的內容只在頁面上看不到 java代碼和html源代碼都有
java註釋
只在java代碼中存在
jsp註釋 <%-- --%>
只在jsp頁面中存在,翻譯成java文件之後就沒有了
jstl:
jsp標準的標簽庫語言
apache的
用來替代java腳本
使用步驟:
1.導入jar包 (jstl.jar和standard.jar)
2.在頁面上導入標簽庫
<[email protected] prefix="" uri=""%>
例如:
<[email protected] prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
jstl的分類:
core:核心類庫 ★
fmt:格式化|國際化
xml:過時了
sql:過時了
函數庫:很少使用
core:掌握
★c:if
★c:forEach
c:set 往域中設置值
c:choose c:when c:otherwise 分支
★c:if 判斷
<c:if test="${el表達式}">滿足的時候輸出的內容</c:if>
例如:
<c:if test="${3>4 }">
3大於4
</c:if>
<c:if test="${3<=4 }">
3不大於4
</c:if>
★c:forEach 循環
格式1:
<c:forEach begin="從那裏開始" end="到那裏結束" step="步長" var="給變量起個名字" varStatus="循環狀態變量">
${i }--${vs.count }--${vs.current }<br>
</c:forEach>
varStatus:用來記錄循環的狀態
常用的屬性:
count:記錄次數
current:當前遍歷的內容
例如:
<c:forEach begin="1" end="20" step="2" var="i" varStatus="vs">
${i }--${vs.count }--${vs.current }<br>
</c:forEach>
格式2:
<c:forEach items="${el獲取域中的容器}" var="n">
${n }
</c:forEach>
例如:
//遍歷list
<c:forEach items="${list }" var="n">
${n }
</c:forEach>
//遍歷map
<c:forEach items="${map }" var="en">
${en.key }-- ${en.value }<br/>
</c:forEach>
案例1-步驟分析:
1.數據庫和表
create database day12;
use day12;
create table product(
id int primary key auto_increment,
pname varchar(20),
price double,
pdesc varchar(20)
);
insert into product values (null,‘電視機‘,3200,‘液晶曲面大電視‘);
insert into product values (null,‘韭菜盒子‘,3,‘味重請小心食用‘);
insert into product values (null,‘益達‘,10,‘韭菜伴侶‘);
insert into product values (null,‘十三香‘,12,‘守義牌‘);
新建一個項目
導入jar包:
驅動 dbutils c3p0 jstl
導入c3p0配置文件 和工具類
實體類:
private int id;
private String pname;
private double price;
private String pdesc;
2.index.jsp中添加一個連接
<a href="/day1201/findAll">展示所有商品</a>
3.FindAllServlet:
調用ProductService.findAll() 返回一個集合 List<Product>
將list放入request域中
請求轉發到product_list.jsp
4.ProductService.findAll() 調用dao.findAll()
5.dao.findAll() 使用beanListHandler()
6.在product_list.jsp展示所有商品
使用 c:forEach
使用javabean導航獲取裏面的數據
/////////////////////////////
案例2-重寫登錄案例
需求:
在頁面上填寫用戶名和密碼及驗證碼,點擊提交,先校驗驗證碼是否一致.若一致後再去找數據庫.順便記住用戶名
技術:
表單
驗證碼
servlet
request
session
cookie
步驟分析:
1.數據庫和表
create table user(
id int primary key auto_increment,
username varchar(20),
password varchar(20)
);
2.創建一個項目
包結構
jar包
工具類和配置文件
3.表單 login.jsp
4.表單提交 loginServlet
loginServlet:
獲取驗證碼(從前臺傳過來和session中)
判斷兩個驗證碼是否一致
若不一致:
填寫錯誤信息,請求轉發到login.jsp
若一致:獲取用戶名和密碼
調用userService的getuserbyusernameandpassword 返回值 User user
判斷user是否為空
若為空:填寫錯誤信息,請求轉發到login.jsp
若不為空:
繼續判斷是否勾選了記住用戶名
若勾選:
創建cookie 將用戶名放入cookie寫回瀏覽器
將user對象放入session中
頁面重定向 index.jsp 展示 xxx:歡迎回來
jsp&el&jstl-01