<meta charset="utf-8">
JSP
- 指令
作用:用于配置JSP頁面杨箭,導(dǎo)入資源文件
格式:<%@ 指令名稱 屬性名1=屬性值1 屬性名2=屬性值2 ... %>
分類:
page相關(guān)
- page: 配置JSP頁面的, *contentType:等同于response.setContentType();1. 設(shè)置響應(yīng)體的mime類型以及字符集, 2. 設(shè)置當(dāng)前jsp頁面的編碼(只能是高級的IDE才能生效赵讯,如果使用低級工具荆忍,則需要設(shè)置pageEncoding屬性設(shè)置當(dāng)前頁面的字符集)
- import:導(dǎo)包
- errorPage:當(dāng)前頁面發(fā)生異常后闯狱,會自動跳轉(zhuǎn)到指定的錯誤頁面
- isErrorPage:標(biāo)識當(dāng)前也是是否是錯誤頁面。true:是咕晋,可以使用內(nèi)置對象exception, * false:否趁矾。默認(rèn)值。不可以使用內(nèi)置對象exception
include
include : 頁面包含的槽袄。導(dǎo)入頁面的資源文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="top.jsp"%>
top.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>這是頭部</h1>
</body>
</html>
taglib 導(dǎo)入資源
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> prefix:前綴烙无,自定義的
注釋:
1. html注釋:
:只能注釋html代碼片段
2. jsp注釋:推薦使用
<%-- --%>:可以注釋所有
內(nèi)置對象: 在jsp頁面中不需要創(chuàng)建,直接使用的對象
一共有9個:
變量名 真實(shí)類型 作用
pageContext PageContext 當(dāng)前頁面共享數(shù)據(jù)遍尺,還可以獲取其他八個內(nèi)置對象
request HttpServletRequest 一次請求訪問的多個資源(轉(zhuǎn)發(fā))
session HttpSession 一次會話的多個請求間
application ServletContext 所有用戶間共享數(shù)據(jù)
response HttpServletResponse 響應(yīng)對象
page Object 當(dāng)前頁面(Servlet)的對象 this
out JspWriter 輸出對象截酷,數(shù)據(jù)輸出到頁面上
config ServletConfig Servlet的配置對象
exception Throwable 異常對象
EL表達(dá)式
- 概念:Expression Language 表達(dá)式語言
- 作用:替換和簡化jsp頁面中java代碼的編寫、
- 語法:${表達(dá)式}
- 注意:
jsp默認(rèn)支持el表達(dá)式的乾戏。如果要忽略el表達(dá)式
設(shè)置jsp中page指令中:isELIgnored="true" 忽略當(dāng)前jsp頁面中所有的el表達(dá)式
${表達(dá)式} :忽略當(dāng)前這個el表達(dá)式
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %><%--
Created by IntelliJ IDEA.
User: Eric
Date: 2020/8/31
Time: 08:50
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="true" %>--%>
<html>
<head>
<title>Title</title>
</head>
<body>
${3>4}
<br>
\${3>4}
<br>
<h3>算術(shù)運(yùn)算符</h3>
${3+4}
${3*4}
${3/4}
${3%4}
${3 mod 4}
<h3>比較運(yùn)算符</h3>
${3==4}
<h3>邏輯運(yùn)算符</h3>
${3>4 && 3<4}
${3>4 and 3<4}
<h3>empty運(yùn)算符</h3>
<%
String str = "";
request.setAttribute("str", str);
List<String> list = new ArrayList<>();
list.add("haha");
request.setAttribute("list", list);
%>
<%--${empty }--%>
${empty str}
${empty list}
${not empty str}
${not empty list}
</body>
</html>
獲取值
- el表達(dá)式只能從域?qū)ο笾蝎@取值
- 語法:
- ${域名稱.鍵名}:從指定域中獲取指定鍵的值
- 域名稱:
1. pageScope --> pageContext
2. requestScope --> request
3. sessionScope --> session
4. applicationScope --> application(ServletContext)
<%--
Created by IntelliJ IDEA.
User: Eric
Date: 2020/8/31
Time: 09:31
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
// 在域中存儲數(shù)據(jù)
session.setAttribute("name", "李四");
request.setAttribute("name", "張三");
session.setAttribute("age", "23");
request.setAttribute("str", "");
%>
<h3>el獲取值</h3>
${requestScope.name}
${sessionScope.name}
${sessionScope.age}
${name}
</body>
</html>
${鍵名}:表示依次從最小的域中查找是否有該鍵對應(yīng)的值迂苛,直到找到為止。
-
獲取對象鼓择、List集合三幻、Map集合的值
-
對象:${域名稱.鍵名.屬性名}
- 本質(zhì)上會去調(diào)用對象的getter方法
· 2. List集合:${域名稱.鍵名[索引]}
- 本質(zhì)上會去調(diào)用對象的getter方法
-
Map集合:
[圖片上傳失敗...(image-2ab0a0-1598868857105)]{域名稱.鍵名["key名稱"]}
-
<%@ page import="neusoft.el.User" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.HashMap" %><%--
Created by IntelliJ IDEA.
User: Eric
Date: 2020/8/31
Time: 09:35
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
User user = new User();
user.setName("小桌子");
user.setAge(23);
user.setBirthday(new Date());
request.setAttribute("u", user);
List<Object> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add(user);
request.setAttribute("list", list);
HashMap<String, Object> map = new HashMap<>();
map.put("sname", "趙四");
map.put("gender", "男");
map.put("user", user);
request.setAttribute("map", map);
%>
<h1>el獲取對象中的值</h1>
${requestScope.u}
<%-- 對象屬性獲取
setter 或者 getter方法 去掉 set和get
將剩余部分首字母變?yōu)樾? getName() ---> Name ----> name
--%>
${requestScope.u.name}<br>
${u.age} <br>
${u.birthday}<br>
<h3>獲取list值</h3>
${requestScope.list}
${list}
${list[0]}
${list[2]}
${list[2].name}
<h5>list[10]</h5>
${list[10]}
<h3>獲取map值</h3>
${requestScope.map}
${map}
${map.gender}
${map["gender"]}
${map.user.name}
</body>
</html>
JSTL
概念:JavaServer Pages Tag Library JSP標(biāo)準(zhǔn)標(biāo)簽庫,是由Apache組織提供的開源的免費(fèi)的jsp標(biāo)簽<標(biāo)簽>呐能。 作用:用于簡化和替換jsp頁面上的java代碼
使用步驟:
- 導(dǎo)入jstl相關(guān)jar包
- 引入標(biāo)簽庫:taglib指令: <%@ taglib %>
- 使用標(biāo)簽
- 常用的JSTL標(biāo)簽
1. if:相當(dāng)于java代碼的if語句
- 屬性:
- test 必須屬性念搬,接受boolean表達(dá)式
- 如果表達(dá)式為true,則顯示if標(biāo)簽體內(nèi)容,如果為false锁蠕,則不顯示標(biāo)簽體內(nèi)容
- 一般情況下夷野,test屬性值會結(jié)合el表達(dá)式一起使用
- 注意:
- c:if標(biāo)簽沒有else情況,想要else情況荣倾,則可以在定義一個c:if標(biāo)簽
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>if標(biāo)簽</title>
</head>
<body>
<%--c:if
1悯搔、 屬性 test 必須屬性, 接受的是boolean表達(dá)式
一般 test配合 el表達(dá)式一起使用
2舌仍、 沒有else部分妒貌, 想要的話需要在定義一個 c:if
--%>
<c:if test="fasle">
<h1>還有一個月就過節(jié)了</h1>
</c:if>
<%
List<Object> list = new ArrayList<>();
list.add("aaaa");
request.setAttribute("list", list);
request.setAttribute("number", 6);
%>
<c:if test="${not empty requestScope.list}">
<h2>遍歷集合</h2>
</c:if>
<br>
<c:if test="${number % 2 != 0}">
<h2>${number}為奇數(shù)</h2>
</c:if>
<c:if test="${number % 2 == 0}">
<h2>${number}為偶數(shù)</h2>
</c:if>
</body>
</html>
2. choose:相當(dāng)于java代碼的switch語句
- 使用choose標(biāo)簽聲明 相當(dāng)于switch聲明
- 使用when標(biāo)簽做判斷 相當(dāng)于case
- 使用otherwise標(biāo)簽做其他情況的聲明 相當(dāng)于default
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="d" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>choose標(biāo)簽</title>
</head>
<body>
<%
request.setAttribute("number", 7);
%>
<d:choose>
<d:when test="${number == 1}">星期一</d:when>
<d:when test="${number == 2}">星期二</d:when>
<d:when test="${number == 3}">星期三</d:when>
<d:when test="${number == 4}">星期四</d:when>
<d:when test="${number == 5}">星期五</d:when>
<d:when test="${number == 6}">星期六</d:when>
<d:when test="${number == 7}">星期天</d:when>
<d:otherwise >過年</d:otherwise>
</d:choose>
</body>
</html>
3. foreach:相當(dāng)于java代碼的for語句
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>forEach標(biāo)簽</title>
</head>
<body>
<!--
begin 開始
end 結(jié)束
var 臨時變量
step 步長
varStatus :循環(huán)狀態(tài)對象
index : 容器中元素的索引
count : 循環(huán)次數(shù) (從開始)
items : 容器對象
-->
<c:forEach begin="0" end="10" var="i" step="2" varStatus="s">
${i}
<h3>index ${s.index}</h3>
<h4>count ${s.count}</h4>
</c:forEach>
<hr>
<%
List<String> list = new ArrayList<>();
list.add("小魯班");
list.add("妲己");
list.add("后羿");
request.setAttribute("list", list);
// for (String str:
// list) {
//
// }
%>
<c:forEach items="${list}" var="str" varStatus="s">
${s.index} ---- ${s.count} ${str}<br>
</c:forEach>
</body>
</html>
Spring JDBC JdbcTemplate
Spring框架對JDBC的簡單封裝。提供了一個JDBCTemplate對象簡化JDBC的開發(fā)
- 導(dǎo)入jar包
- 創(chuàng)建JdbcTemplate對象铸豁。依賴于數(shù)據(jù)源DataSource, JdbcTemplate template = new JdbcTemplate(ds);
- 調(diào)用JdbcTemplate的方法來完成CRUD的操作
* update():執(zhí)行DML語句灌曙。增、刪节芥、改語句
* queryForMap():查詢結(jié)果將結(jié)果集封裝為map集合在刺,將列名作為key,將值作為value 將這條記錄封裝為一個map集合
* 注意:這個方法查詢的結(jié)果集長度只能是1
* queryForList():查詢結(jié)果將結(jié)果集封裝為list集合
* 注意:將每一條記錄封裝為一個Map集合头镊,再將Map集合裝載到List集合中
* query():查詢結(jié)果蚣驼,將結(jié)果封裝為JavaBean對象 * query的參數(shù):RowMapper
* 一般我們使用BeanPropertyRowMapper實(shí)現(xiàn)類∠嗤В可以完成數(shù)據(jù)到JavaBean的自動封裝 new BeanPropertyRowMapper<類型>(類型.class)
* queryForObject:查詢結(jié)果颖杏,將結(jié)果封裝為對象
* 一般用于聚合函數(shù)的查詢