HTML作為展示頁的缺點
缺點
緩存問題
回顯問題
除非使用異步
動態(tài)顯示頁面
定義
Java Server Pages,java服務器頁面具被。和Servlet一樣,是sun公司定義的一種動態(tài)網(wǎng)頁開發(fā)技術只损。
特點:基于html模版硬猫,可以在html模版嵌入java代碼和jsp中的標簽。
備注:html靜態(tài)頁面改执。
CSS:修飾美化html頁面啸蜜。
JavaScript:動態(tài)修改html頁面和css樣式。
Servlet:運行在服務器上的java程序辈挂。適合編寫java代碼衬横,寫網(wǎng)頁困難
jsp:適合編寫動態(tài)內(nèi)容,不適合寫java代碼终蒂,主要用于顯示頁面
作用
JSP不緩存的原因是:jsp是servlet ,不是靜態(tài)頁面
動態(tài)拼接頁面
jsp性能好蜂林,可以在html頁面中動態(tài)嵌入元素
服務器調(diào)用的是已經(jīng)編譯好的JSP文件
JSP基于Java Servlet Api,有很多強大企業(yè)的支持
JSP可以與處理業(yè)務邏輯的Servlet一起使用,該模式被Java Servlet模版引擎所支持
JSP指令
page指令
import和java代碼的含義一樣
session:是否會自動創(chuàng)建session對象拇泣,默認值為true;
buffer:JSP中有java.servlet.jsp.JspWriter輸出字符流噪叙。設置輸出數(shù)據(jù)的緩存大小。默認8kb.
errorPage:如果頁面中有錯誤霉翔,跳轉(zhuǎn)到指定的資源 errorPage="/uri" 如果寫“/”則代表當前應用的目錄 下睁蕾,絕對路徑。? 如果不寫“/”則代表相對路徑
isErrorPage:是否創(chuàng)建throwable對象债朵。默認是false
contentType:等同于response.setContentType(“text/html子眶;charset=utf-8);服務器發(fā)送客戶端的內(nèi)容編碼
pageEncoding: Jsp文件本身的編碼
isELIgnored: 是否支持EL表達式。 默認是false,支持表達式, 是true,不支持表達式序芦,${1+1};false輸出結(jié)果2? true按照原樣輸出
inclue指令
靜態(tài)包含: <%@ include file="header.jsp" %>
動態(tài)包含: <jsp:include page=“header.jsp"></jsp:include>
區(qū)別:翻譯的時間段不同(可在tomcat工作目錄下查看)靜態(tài)包含:在翻譯時就把兩個文件進行合并動態(tài)包含:不會合并文件臭杰,當代碼執(zhí)行到include時,才包含另一個文件的內(nèi)容
taglib指令
引入其他標簽庫
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c" %>
JSP9大內(nèi)置對象(不準使用)
對象名 類型 說明
request? ?javax.servlet.http.HttpServletRequest
response? javax.servlet.http.HttpServletResponse
session? ?javax.servlet.http.HttpSession由session=“true”開關
application? ?javax.servlet.ServletContext
exception? ?java.lang.Throwable由isErrorPage=“false”開關
page? ? java.lang.Object當前對象this當前servlet實例
config? ?javax.servlet.ServletConfig
pageContext? ? javax.servlet.jsp.PageContext
out
JSP的四大域?qū)ο?br>
pageContext : 表示當前jsp頁面
request域
session域
servletContext域
EL表達式
expression language表達式語言
簡化了JSP中代碼開發(fā)
這是不是一種語言,是jsp中獲取數(shù)據(jù)的一種規(guī)范
獲取實體類中的屬性值
${user.address.addr }
JSTL
JSTL是一款強大的邏輯標簽庫, 她可以使我們像寫Java代碼一樣在頁面中進行判斷和循環(huán)
<c:if test="${8>2 }">
? ? 8大于2是成立的
? ? </c:if>
foreach標簽
<c:forEach var="i" begin="1" end="10" step="2">
${i}<br>
</c:forEach>
總結(jié)
為什么要學習jsp
避免瀏覽器的緩存
動態(tài)拼接頁面
jsp要記憶的內(nèi)容
jsp注釋 : 不會返回到瀏覽器, 減少傳輸量
指令 : page include? taglib
動作 : jsp:include
九大內(nèi)置對象
四大域
域 : 一個控數(shù)據(jù)空間
jsp頁面中可以使用這個四個域
pageContext request session servletContext
el表達式
${名稱}
可以獲取對象中的屬性, 集合中的元素
jstl
功能標簽
先引入, 在使用
c標簽中 if? forEach
數(shù)據(jù)庫(DataBase谚中,DB):指長期保存在計算機的存儲設備上渴杆,按照一定規(guī)則組織起來,可以被各種用戶或應用共 享的數(shù)據(jù)集合宪塔。簡單理解數(shù)據(jù)的倉庫磁奖。
數(shù)據(jù)庫管理系統(tǒng)(DataBase Management System,DBMS):指一種操作和管理數(shù)據(jù)庫的大型軟件蝌麸,用于建立点寥、 使用和維護數(shù)據(jù)庫艾疟,對數(shù)據(jù)庫進行統(tǒng)一管理和控制来吩,以保證數(shù)據(jù)庫的安全性和完整性敢辩。用戶通過數(shù)據(jù)庫管理系統(tǒng)訪問 數(shù)據(jù)庫中的數(shù)據(jù)。
數(shù)據(jù)庫是通過數(shù)據(jù)庫管理系統(tǒng)創(chuàng)建和操作的
常見數(shù)據(jù)庫管理系統(tǒng)
Oracle:Oracle數(shù)據(jù)庫被認為是業(yè)界目前比較成功的關系型數(shù)據(jù)庫管理系統(tǒng)弟疆。Oracle數(shù)據(jù)庫可以運行在UNIX戚长、 Windows等主流操作系統(tǒng)平臺,完全支持所有的工業(yè)標準怠苔,并獲得最高級別的ISO標準安全性認證同廉。
?MySQL:MySQL是一個關系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā)柑司,目前屬于 Oracle旗下產(chǎn)品迫肖。 MySQL 是最流行的關系型數(shù)據(jù)庫管理系統(tǒng)之一,在 WEB 應用方面攒驰,MySQL是最好的 RDBMS (Relational Database Management System蟆湖,關系數(shù)據(jù)庫管理系統(tǒng)) 應用軟件。
?DB2:DB2是IBM公司的產(chǎn)品玻粪,DB2數(shù)據(jù)庫系統(tǒng)采用多進程多線索體系結(jié)構隅津,其功能足以滿足大中公司的需要, 并可靈活地服務于中小型電子商務解決方案劲室。
?Microsoft SQL Server:SQL Server 是Microsoft 公司推出的關系型數(shù)據(jù)庫管理系統(tǒng)伦仍。具有使用方便可伸縮性好 與相關軟件集成程度高等優(yōu)點。
?SQLLite:應用在手機端的數(shù)據(jù)庫很洋。
非關系數(shù)據(jù)庫
Redis?
MongoDB
卸載過程1 控制面板 卸載 2找到mysql的安裝目錄 刪除 3 ProgramData 刪除mysql
SQL語句分類
DDL(Data De?nition Language):數(shù)據(jù)定義語言充蓝,用來定義數(shù)據(jù)庫對象:庫、表喉磁、列等棺克。
?DML(Data Manipulation Language):數(shù)據(jù)操作語言,用來定義數(shù)據(jù)庫記錄(數(shù)據(jù))线定。
?DCL(Data Control Language):數(shù)據(jù)控制語言娜谊,用來定義訪問權限和安全級別。
?DQL(Data Query Language):數(shù)據(jù)查詢語言斤讥,用來查詢記錄(數(shù)據(jù))
DDL操作表
CREATE TABLE [IF NOT EXISTS] 表名( 字段1 字段類型(長度) 約束,
字段2 字段類型(長度) 約束, ... 字段n 字段類型(長度) 約束
) [charset=utf8];
int:整型(4個字節(jié))
double:浮點型(8個字節(jié))纱皆,近似值 例如double(5,2)表示最多5位,其中必須有2位小數(shù)芭商,取值范圍為-999.99到999.99
decimal:精確數(shù)值數(shù)據(jù)派草,最大位數(shù)可以是65 例如decimal(5,2)能夠存儲具有五位數(shù)和兩位小數(shù)的任何值,因此可以存儲范圍為
-999.99至999.99铛楣。 char:固定長度字符串類型近迁; char(10) 'aaa ' 固定10個字符,不足補空格簸州, 長度0-255 缺點:浪費空間鉴竭,優(yōu)點:查詢速度快
varchar:可變長度字符串類型歧譬; varchar(10) 'aaa' 最多存儲10個字符
缺點:查詢速度慢,優(yōu)點:節(jié)省空間
text:大文本字符串類型搏存;有字符編碼瑰步,存儲比較大的文本數(shù)據(jù)。 blob:Binary Large Object二進制大對象數(shù)據(jù)璧眠;可以存儲圖片缩焦、音頻、視頻 date:日期類型责静,格式為:yyyy-MM-dd
time:時間類型袁滥,格式為:hh:mm:ss timestamp:時間戳類型 yyyy-MM-dd hh:mm:ss 會自動賦值 datetime:日期時間類型 yyyy-MM-dd hh:mm:s
常用約束:
主鍵約束:primary key (保證數(shù)據(jù)唯一性),不能重復,不能為null
唯一約束:unique [key],不能重復灾螃,可以為null 非空約束:not null 默認約束:default
外鍵約束:foreign key 自動增長:auto_increment
當前數(shù)據(jù)庫中的所有表
SHOW TABLES;
查看表的字段信息
DESC student;
在上面學生表的基礎上增加一個image列呻拌。 ALTER TABLE student ADD image blob;
修改address列,使其長度為60睦焕。 ALTER TABLE student MODIFY address varchar(60);
刪除image列,一次只能刪一列藐握。 ALTER TABLE student DROP image;
表名改為user。 RENAME TABLE student TO user;
查看表的創(chuàng)建細節(jié)
SHOW CREATE TABLE user; 修改表的字符集為gbk
ALTER TABLE user CHARACTER SET gbk; 列名name修改為username ALTER TABLE user CHANGE name username varchar(100);
DML操作
主要包括:INSERT 垃喊、UPDATE猾普、 DELETE
DQL數(shù)據(jù)查詢
數(shù)據(jù)庫執(zhí)行DQL語句不會對數(shù)據(jù)進行改變,而是讓數(shù)據(jù)庫發(fā)送結(jié)果集給客戶端本谜。
查詢返回的結(jié)果集是一張?zhí)摂M表初家。
查詢關鍵字:SELECT
語法: SELECT 列名 FROM 表名 【W(wǎng)HERE --> GROUP BY-->HAVING--> ORDER BY-->LIMIT】
?SELECT selection_list /要查詢的列名稱/
FROM table_list /要查詢的表名稱/?
WHERE condition /行條件/?
GROUP BY grouping_columns /對結(jié)果分組/
HAVING condition /分組后的行條件/?
ORDER BY sorting_columns /對結(jié)果排序/
LIMIT o?set_start, row_count /結(jié)果限定/
數(shù)據(jù)完整性
實體完整性: 域完整性: 引用完整性: 學生表(學號 ,姓名) 成績表( 學號,科目,成績)
實體完整性約束
實體:即表中的一行(一條記錄)代表一個實體(entity)
實體完整性的作用:標識每一行數(shù)據(jù)不重復。
約束類型:
主鍵約束(primary key)? 唯一約束(unique)? 自動增長列(auto_increment)
域完整性約束
域完整性約束的作用:限制此單元格的數(shù)據(jù)正確乌助,不對其它單元格起作用溜在,域代表當前單元格
域完整性約束:數(shù)據(jù)類型、非空約束(not null)他托、默認值約束(default)?
check約束(mysql 5.5不支持)check(sex='男'or? sex='女')
引用完整性約束
參照完整性約束
多表查詢
多個表之間是有關系的掖肋,那么關系靠誰來維護?
多表約束:外鍵約束。
多表的關系
一對多關系
客戶和訂單赏参,分類和商品志笼,部門和員工.
一對多建表原則:在多的一方創(chuàng)建一個字段,字段作為外鍵指向一方的主鍵.
多對多關系
學生和課程:
多對多關系建表原則:需要創(chuàng)建第三張表,中間表中至少兩個字段把篓,這兩個字段分別作為外鍵指向各自一 方的主鍵.
一對一關系
一個丈夫?qū)粋€妻子
一個員工對應一個簡歷
在實際的開發(fā)中應用不多.因為一對一可以創(chuàng)建成一張表.
兩種建表原則:
唯一外鍵對應:在多的一方創(chuàng)建一個外鍵指向一的一方的主鍵纫溃,將外鍵設置為unique和非空.
主鍵對應:讓一對一的雙方的主鍵進行建立關系.
多表查詢
多表查詢有如下幾種:
1 合并結(jié)果集;UNION 韧掩、 UNION ALL
2 連接查詢
? 2.1內(nèi)連接 [INNER] JOIN? ON
? 2.2外連接 OUTER JOIN ON
左外連接 LEFT [OUTER] JOIN
#成績表(從表) create table score( ? ? ?? id int, ? ? ?? score int, ? ? ?? sid int ,? ? ? ?? CONSTRAINT fk_score_sid foreign key(sid) references student(sid) ); -- 外鍵列的數(shù)據(jù)類型一定要與主鍵的類型一致
ALTER TABLE score ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES student(sid);
右外連接 RIGHT [OUTER] JOIN
3 子查詢
合并結(jié)果集
作用:合并結(jié)果集就是把兩個select語句的查詢結(jié)果合并到一起紊浩!
合并結(jié)果集有兩種方式:
l? UNION:去除重復記錄,例如:SELECT* FROM t1 UNION SELECT * FROM t2;
l? UNION ALL:不去除重復記錄坊谁,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2费彼。
注意:被合并的兩個結(jié)果:列數(shù)必須相同,列類型可以不同
內(nèi)連接
上面的連接語句就是內(nèi)連接呜袁,但它不是SQL標準中的查詢方式敌买,可以理解為方言简珠!
SQL標準的內(nèi)連接為:
SELECT * FROM emp e INNER JOIN dept d ON e.deptno=d.deptno; 注意:on后面 主外鍵關系
外連接
包括左外連接和右外連接阶界,外連接的特點:查詢出的結(jié)果存在不滿足條件的可能。
a.左外連接:以左表為主表聋庵,右表是從表
SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.deptno=d.deptno;