day01XML上
一、XML的做用
二、XML的基本語法
三、DTD約束
四、DTD的基本語法(看懂DTD就ok)
五、XML的解析方式:原理
六、JAXP的DOM方式解析基本練習
七、JAXP的DOM方式解析案例
day02XML下
一、JAXP進行DOM解析的案例作完
二、JAXP進行SAX解析的原理和實際應用
三、DOm4J簡介和基本練習
四、Junit單元測試
五、Xpath
六、Dom4J改寫原有的案例
七、Debug調試
八、Schema約束
day03基礎增強
java基礎增強
一、JDK5.0介紹
二、靜態導入
三、自動裝箱和拆箱
四、加強for循環
五、可變參數
六、枚舉
七、反射
八、內省
九、泛型
day04Web開發入門
1、泛型
2、Web開發的基本概念
3、Web開發須要的服務器
4、Tomcat的安裝與啓動遇到的問題
5、Tomcat的目錄結構
6、JavaWeb應用的目錄結構
7、如何部署本身的應用到Tomcat中
8、Tomcat組成部分詳解:
虛擬目錄
虛擬主機
鏈接器
day05Http協議及Servlet入門
*****1、HTTP協議
1.1協議的做用及版本
1.2協議的組成
1.3協議詳細講解
2、Servlet概述
*****3、編寫第一個Servlet案例應用
*****4、Servlet的生命週期
*****5、Servlet的孩子們(模板方法設計模式)
** 6、Servlet配置
*****7、Servlet中的線程安全問題
*****8、ServletContext對象
day06ServletContext及HttpServletResponse
****1、Servlet中的線程安全問題
***2、Servlet的配置對象:ServletConfig
*****3、ServletContext詳解
插入:ServletAPI中的主要接口或類的核心類圖
**4、請求和響應對象概述
*****5、HttpServletResponse詳解
5.1輸出中文數據:
字節流:
字符流:
5.2控制不要緩存
5.3控制緩存時間
5.4動態生成隨機驗證碼圖片
5.5定時刷新
5.6文件下載(中文文件名的文件下載)
5.7HttpServletResponse細節
1.response向客戶端發送數據,能夠經過page指令的contentType屬性或是setContentType()方法來設置傳送文件。
2.public void flushBuffer() throws IOException 強制將response緩衝區中的數據發送到客戶端。
3.Int set/getBufferSize()返回緩衝區的大小,以字節爲單位。沒有緩衝區返回0;
4.String set/getCharacterEncoding() 獲字符集名稱。
5.String set/getContentType()返回response中mime類型。
6.getOutputStream();獲取一個在response中寫入二進制數據的輸出流ServletOutputStream。Jsp頁面不建議用,數據位文本數據。
7.getWriter()獲取一在response中寫入文本數據的PintWriter對象。
8.sendRedirect() 用於進行頁面重定向 public void sendRedirect()(String location) throws IOException
*****6、HttpServletRequest詳解
6.1經常使用簡單方法
6.2獲取請求消息頭
6.3獲取請求參數(內省)
6.4經常使用表單數據的獲取
6.5域對象
6.6請求轉發和重定向
6.7轉發和重定向細節(實際開發中知道一個原則)
day07HttpServletRequest和Cookie入門
*****1、HttpServletRequest詳解
6.1經常使用簡單方法
public abstract interface javax.servlet.http.HttpServletrequest extends javax.servlet.Servlet Request;
1.getAttribute() 參數name的屬性值做爲對象返回
2.getAttributeNames() 獲得Enumeration對象,對象中包括這次請求中可用的屬性的值得名稱。
3.getCharacterEncoding() 返回請求的字符編碼的名稱,若是未指定,返回null;
4.getContentType() 返回請求的mime類型,若是類型未知,返回null
5.getContentPath()獲得請求URL中請求的應用上下文路徑。若是web應用就是Tomcat安裝目錄的wwebapps子目錄中國的ROOT,getcontentPath();返回「」;若是爲其餘目錄,則返回相對於Web應用服務器的根目錄的子目錄。若是當前Web應用
爲webapp,則getContextPath()方法返回值是「webapp」。
6.getlocalAddress() 返回接受請求web服務器的地址。
7.getLocalName() 返回接收請求的服務器名。
8.getMethod() 獲得請求所用的Http請求類型。get put post
9.getParameter() name參數,獲得請求中指令的參數值。
10.getParameterMap 獲得請求中全部參數的一個Map對象。參數爲鍵 字符串數組做爲值。
11.getParamterNames() 得到全部請求中參數名稱的枚舉。
12.getParameterValues() 一個請求參數值數組 內容爲請求中指定參數name的多個值。若是找不到那麼參數 返回null
13.getProtocol() 返回請求所用協議的名稱和版本,如 HTTP/1.1
14.getQueryString() 返回請求URL中所包含的位於路徑以後的查詢字符串
15.getRemoteAddr()返回客戶端IP
16.getRemoteHost() 返回客戶端機器名
17.getRemotePort()客戶端代理端口號
18.getRequestUri()返回請路徑uri
19.getRequestUrl()返回請路徑url
20.getServerPort() 接受請求服務器的端口號
21.getServletPath() URI中表示Servlet的部分
22.getSession() 獲得與當前請求相關聯的httpsession對象,若是請求沒有回話,就會建立回話並返回會話對象。
23.removeAttribute()參數name 從請求中刪除指定名稱name的屬性。
24.setAttribute() 參數name 將指定的屬性對象attribute用名稱name保存於請求中。
public void setAttribute(String name,Object attribute)
25.setCharacterEncoding() 設置讀取請求數據時所使用的字符編碼,此方法必須在調用request的全部其餘方法以前調用,其後才能行讀取參數。
6.2獲取請求消息頭
6.3獲取請求參數(內省)
6.4經常使用表單數據的獲取
HTML表單經過post get 方法,post較經常使用。使用request對象的getParameter()方法獲得表單中數據項的值
6.5域對象
6.6請求轉發和重定向
一、請求轉發:(當前應用內轉)
方式一:
ServletContext.getRequestDispatcher(String path):path必須以"/"開頭,表示絕對路徑
方式二:
ServletRequest.getRequestDispatcher(String path):path若是"/"開頭,表示絕對路徑;若是不以"/"開頭,表示相對路徑
二、轉發的細節:AServlet(源組件)--->BServlet(目標組件)
**轉發前會清空response的正文。
轉發頁面上只會輸出目標組件的輸出,源組件的任何頁面輸出都無效。
原則:轉發前,不要刷新或關閉response的輸出流。
三、包含:RequestDispatcher
AServlet(源組件)--->BServlet(目標組件):AServlet包含BServlet的輸出內容
目標組件全部設置的頭都無效,正文有效。
6.7轉發和重定向細節(實際開發中知道一個原則)
*****2、會話概述
3、Cookie和HttpSession簡介
4、Cookie詳細介紹
5、Cookie案例:
5.1記住用戶最後一次的訪問時間
5.2記住用戶登陸時的用戶名
5.3電商網站:記住用戶商品的歷史瀏覽記錄
day08Cookie的案例及HttpSession
1、Cookie的案例:記錄用戶最近商品的訪問記錄
2、HttpSession概述及原理探討
3、HttpSession案例:
完成用戶的一次性登陸(隨機驗證碼驗證)
簡單購物原理案例
防止表單的重複提交(Base64編碼)
4、客戶端禁用Cookie後的會話數據保存問題
5、HttpSession對象的狀態及轉換(序列化)
day09JSP入門及語法
****
1、JSP概述
一、JSP:Java Server Pages(運行在服務器端的頁面)。就是Servlet。
學習JSP學好的關鍵:時刻聯想到Servlet便可。
二、JSP的原理
JSP會被Tomcat翻譯成一個Servlet。該Servlet在Tomcat\work\catalina\locahot\day09\....
三、JSP、Servlet開發的最佳實踐:
Servlet:通常做爲控制組件,處理業務邏輯
JSP:通常做爲顯示組件,顯示數據
2、JSP的語法
一、JSP的模板元素:(先寫HTML)
就是JSP中的那些HTML標記
做用:頁面佈局和美化
二、JSP的Java腳本表達式:
做用:輸出數據到頁面上
語法:<%=表達式%>(實際上就是調用輸出流打印到頁面上)
三、JSP中的Java腳本片斷:(實際開發中,應作到JSP中不能出現一行Java腳本片斷)
做用:書寫Java代碼邏輯
語法:<%
語句1;
語句2;
%>
原理:其中的語句會原封不動的被服務器翻譯到對應的Servlet的service方法中。
四、JSP的聲明:(瞭解其原理)
做用:定義類的成員
語法:<%!
你的Java代碼
%>
五、JSP的註釋:
做用:註釋Java腳本代碼
語法:<%--這是註釋--%>
3、JSP的指令:給JSP引擎用的(服務器用的)
基本的語法格式:<%@ 指令名稱 屬性1="值1" 屬性2="值2" ....%>
做用:告訴服務器,該如何處理JSP中除了指令以外的內容的。
3.1page
做用:定義JSP頁面的各類屬性
屬性:
language:指示JSP頁面中使用腳本語言。默認值java,目前只支持java。
extends:指示JSP對應的Servlet類的父類。不要修改。
*import:導入JSP中的Java腳本使用到的類或包。(如同Java中的import語句)
JSP引擎自動導入如下包中的類:
javax.servlet.*
javax.servlet.http.*
javax.servlet.jsp.*
注意:一個import屬性能夠導入多個包,用逗號分隔。
*sessioin:指示JSP頁面是否建立HttpSession對象。默認值是true,建立
*buffer:指示JSP用的輸出流的緩存大小.默認值是8Kb。
autoFlush:自動刷新輸出流的緩存。
isThreadSafe:指示頁面是不是線程安全的(過期的)。默認是true。
true:不安全的。
false:安全的。指示JSP對應的Servlet實現SingleThreadModel接口。
*errorPage:指示當前頁面出錯後轉向(轉發)的頁面。
目標頁面若是以"/"(當前應用)就是絕對路徑。
配置全局錯誤提示頁面:
web.xml
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
*isErrorPage:指示當前頁面是否產生Exception對象。
*contentType:指定當前頁面的MIME類型。做用與Servlet中的response.setContentType()做用徹底一致
*pageEncoding:通知引擎讀取JSP時採用的編碼(由於要翻譯)
還有contentType屬性的做用。
*isELIgnored:是否忽略EL表達式。${1+1}。默認值是false。
page指令最簡單的使用方式:<%@ page pageEncoding="UTF-8"%>
3.2include(靜態包含,開發中能用靜的不用動的)
做用:包含其餘的組件。
語法:<%@include file=""%>file指定要包含的目標組件。路徑若是以"/"(當前應用)就是絕對路徑。
原理:把目標組件的內容加到源組件中,輸出結果。
動態包含:
採用動做元素:<jsp:include page=""/>路徑若是以"/"(當前應用)就是絕對路徑。
3.3taglib
做用:引入外部的標籤
語法:<%@taglib uri="標籤名稱空間" prefix="前綴"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
4、JSP的內置對象(9個JSP內置對象)
JSP的內置對象引用名稱 對應的類型
request HttpServletRequest
response HttpServletResponse
session HttpSession(有開關的:page指令的session屬性的取值)
application ServletContext
config ServletConfig
page this(當前Servlet對象)
exception java.lang.Throwable(有開關的:page指令的isErrorPage屬性改成true)
out JspWriter
pageContext javax.servlet.jsp.PageContext很是重要
有三大做用:
一、自己是一個域對象。同時還能操做其餘三個域對象(PageContext ServletRequest HttpSession ServletContext)
自己表示的域範圍是本頁面。
void setAttribute(String name,Object value)
void removeAttribute(String name)
Object getAttribute(String name)
操做其餘的三個域對象
void setAttribute(String name,Object value,int scope)
void removeAttribute(String name,int scope)
Object getAttribute(String name,int scope)
參數int scope是由PageContext類提供的靜態變量規定的。
PageContext.PAGE_SCOPE:頁面範圍(是PageContext自己中的那個Map,代號page)
PageContext.REQUEST_SCOPE:請求範圍(是ServletRequest中的那個Map,代號request)
PageContext.SESSION_SCOPE:請求範圍(是HttpSession中的那個Map,代號session)
PageContext.APPLICATION_SCOPE:請求範圍(是ServletContext中的那個Map,代號application)
(很是有用)Object findAttribute(String name):依次按照page request session application範圍搜索指定名稱的對象,找到爲止。
二、獲取其餘8個隱式對象
三、提供了轉發和包含的方便方法
RequestDispatcher rd = request.getRequestDispatcher("/url");
rd.forward(request,response);
pageContext.forward("url");
pageContext.include("url");
*****5、四大域對象(兩個資源之間互傳數據)
JSP中隱式對象的名稱 範圍名稱 具體的類型
pageContext page javax.servlet.jsp.PageContext
request request javax.servlet.ServletRequest (顯示完數據就沒有用了)
session session javax.servlet.http.HttpSession (顯示完數據了,過一會本身還要用)
application application javax.servlet.ServletContext (顯示完數據了,你們都要用。不建議使用,若是使用,必須同步處理)
6、JSP經常使用的動做元素
<jsp:include/>
<jsp:forward/>
<jsp:param/>:在包含和轉發時,利用該標籤傳遞請求參數
6、如何調試JSP出現的錯誤
day10JavaBean及EL
*****1、JavaBean的概念
一、JavaBean就是一個遵循特殊寫法的普通類
二、特殊寫法
a、必須有默認的構造方法
b、全部字段定位私有的
c、提供公有的getter或setter方法,屬性
d、通常實現java.io.Serializable
三、必定要符合Java的命名規範。
***四、應用場景:
在企業級開發中,JavaBean是用來傳遞數據的。
*****2、JavaWeb的開發模型
模型一:瞭解
JSP+JavaBean
模型二:開發實際應用
程序中
M:廚師 JavaBean:模型
V:上的菜 JSP:顯示頁面
C:服務檯 Servlet:控制器
MVC+三層架構
***3、JSP中操做JavaBean的動做元素
jsp:useBean
做用:用於在指定域範圍內查找指定名稱的JavaBean對象,找到了就直接使用;沒有找到,建立一個,並放到指定的域範圍內。
屬性:
id:必須的。JavaBean的名稱
class:JavaBean的完整類名
scope:域範圍。默認是page範圍。可選值:page request session application
注意:若是該標籤有主體內容,只在建立新對象時纔會執行。
jsp:setProperty(必須先使用useBean)
做用:調用JavaBean的setter方法。還能自動類型轉換,僅限基本類型
屬性:
property:必須的。屬性名稱。好比setName,名稱是name。
可使用通配符*。使用前提是請求參數的名稱與屬性的名稱徹底一致。
name:必須的。哪一個對象的?即jsp:useBean中的id的取值。
value:屬性的取值。支持直接量;支持表達式(<%=表達式%>)。
param:請求參數名
jsp:getProperty
做用:調用JavaBean的getter方法。
property:必須的。屬性的名稱。好比getName,名稱是name。
name:必須的。哪一個對象的?即jsp:useBean中的id的取值。
*****開發原則:JSP頁面中不能出現一行Java腳本<%%>和Java表達式<%=%>
Java腳本:替代方案,自定義標籤。
Java表達式:替代方案,EL表達式。 Struts2框架:OGNL表達式。
*****4、EL表達式
它只是JSP中的表達式,不是一種開發語言。
基本語法:${EL表達式}
4.1獲取數據
*****EL表達式只能獲取四大域中的數據。
EL表達式獲取的對象若是是null,頁面不會顯示數據。所以,EL表達式中永遠不會出現空指針異常
p.name:調用域中名稱爲p對象的getName方法,點運算符是用於獲取屬性的取值的。
.運算符:
[]運算符:.運算符能作的,[]也能作。[]能作的,.不必定能作。
好比${p.name}===${p['name']}==${p["name"]}
優秀在能夠取不符合Java命名規範的東東。
4.2數學邏輯運算:
empty運算符:若是判斷的對象是null或者空字符串,都返回true。對於集合,即便集合對象自己不是null,沒有任何元素,也返回true。
EL表達式不支持字符串鏈接操做。
4.3獲取JSP的內置對象(11大EL內置對象):難點,不要與JSP的內置對象和範圍名稱搞混
11大EL隱式對象中,其中一個是表示自身對象外,其他都是表示的Map結構
EL隱式對象名稱 Java類型 備註
pageContext javax.servlet.jsp.PageContext 與JSP中的內置對象徹底相同
剩餘的都是表明的Map集合
pageScope java.util.Map 表明着PageContext頁面範圍域那個Map
requestScope java.util.Map 表明着ServletRequest請求範圍域那個Map
sessionScope java.util.Map 表明着HttpSession會話範圍域那個Map
applicationScope java.util.Map 表明着ServletContext應用範圍域那個Map
param java.util.Map 表明着請求參數。key:請求參數的名稱。value:請求參數的值,它是一個字符串。
paramValues java.util.Map 表明着請求參數。key:請求參數的名稱。value:請求參數的值,它是一個字符串數組。
header java.util.Map 表明着請求消息頭。key:頭名稱。value:頭值,它是一個字符串。
headerValues java.util.Map 表明着請求消息頭。key:頭名稱。value:頭值,它是一個字符串數組。
cookie java.util.Map 表明客戶端提交的Cookie的Map。key:cookie的name。value:cookie對象自己
initParam java.util.Map 表明着全局初始化參數(web.xml中context-param).key:參數名稱。value:參數值
4.4調用普通類的靜態方法(EL函數)
編寫步驟(自定義EL函數的編寫步驟即自定義標籤的編寫步驟):
a、編寫一個普通的java類,提供一個靜態方法
public class FunctionDemo {
public static String toUpperCase(String str){
return str.toUpperCase();
}
}
b、在JavaWeb應用的WEB-INF目錄下創建一個擴展名是tld(taglib definition)的XML文件(參考Tomcat中的示例)。內容以下:
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>myfn</short-name>
<uri>http://www.itcast.cn/myfn</uri>
<function><!-- 定義函數 -->
<name>toUppercase</name>
<function-class>cn.itcast.el.FunctionDemo</function-class>
<function-signature>java.lang.String toUpperCase( java.lang.String )</function-signature>
</function>
</taglib>
c、(可選步驟)前提是把tld文件放到了WEB-INF目錄下。
告知應用,tld文件和tld中的uri的對應。修改web.xml,增長如下內容:
<jsp-config>
<taglib>
<taglib-uri>http://www.itcast.cn/myfn</taglib-uri>
<taglib-location>/WEB-INF/myfn.tld</taglib-location>
</taglib>
</jsp-config>
d、在JSP中使用
用taglib指令,引入自定義的EL函數庫
<%@ taglib uri="http://www.itcast.cn/myfn" prefix="myfn"%>
${myfn:toUppercase(p)}
**5、SUN提供的標準EL函數庫
JSTL標準標籤:(Jsp Standard Tag Libary)
***Core:核心
**Fmt:國際化
SQL:數據庫操做
XML:xml操做
**fn:EL函數庫
導入JSTL的jar包。standard.jar jstl.jar
*****6、JSTL中的核心標籤庫(替換掉JSP中的Java腳本)
c:if
做用:判斷是否爲true,若是爲true,那麼標籤的主體內容就會顯示。
屬性:
test:必須的。要求必須是boolean的。支持表達式(EL或Java表達式)
var:保存test運算結果的變量
scope: 保存的域範圍。默認是page
c:forEach
遍歷:數組、List、Set、Map
屬性:
items:要遍歷的目標對象。支持表達式
var:變量名。指向當前遍歷的集合中的一個元素
begin:開始的索引(含)
end:結束的索引(含)
step:步長。默認是1
varStatus:取一個名字,引用了一個對象。
該對象有如下方法:
int getIndex():當前記錄的索引號。從0開始
int getCount():當前記錄的順序。從1開始
boolean isFirst():是不是第一條記錄
boolean isLast():是不是最後一條記錄
day11簡單購物車
階段編碼實戰小案例
案例:
1、你們書寫小實例時遇到的主要問題
一、書寫代碼要仔細認真,符合規範。
二、編寫代碼要一步步來作。
三、會調錯。多用debug,看異常堆棧。
簡單購物車
難點:購物車的構建
技術架構:JSP+Servlet。
MVC+三層架構
要求:JSP中不能出現一行Java腳本和Java表達式
1、搞清楚你要作什麼?需求。
2、搭建開發環境:拷貝jar包。
jstl.jar standard.jar
3、實際的開發。
day12用戶註冊與登陸
一、技術要求:
MVC+三層架構
JSP+Servlet
JSP頁面不能出現一行Java腳本和Java表達式
數據庫採用XML來擔當
保留好每個實現的單元測試
要求系統的反應不能超過500毫秒。
day13MySQL及SQL入門
約定:
shell>window下輸入的命令
mysql>進入MySQL程序後,輸入的MySQL的命令
1、SQL簡介
一、SQL:Structured Query Language結構化查詢語言
他是客戶與數據庫打交道的通道
二、SQL是有工業標準的。ANSI
符合工業標準的SQL,稱之爲普通話。
不一樣的數據庫都在SQL工業標準的基礎上進行擴展,擴展的部分稱之爲方言。
三、驗證安裝是否成功
shell>mysql -u root -p
mysql>SHOW DATABASES; //顯示目前有幾個庫
2、DDL:數據定義語言 Data Definition Language
做用:定義數據庫或者表結構的。
操做的對象:數據庫或表的結構的。
關鍵字:CREATE ALTER DROP
建立一個名稱爲mydb1的數據庫。
mysql>CREATE DATABASE mydb1;
查看數據庫的建立細節
mysql>SHOW CREATE DATABASE mydb1;
建立一個使用gbk字符集的mydb2數據庫。
mysql>CREATE DATABASE mydb2 CHARACTER SET gbk;
建立一個使用gbk字符集,並帶校對規則的mydb3數據庫。
mysql>CREATE DATABASE mydb3 CHARACTER SET gbk COLLATE gbk_chinese_ci;
查看當前數據庫服務器中的全部數據庫
mysql>SHOW DATABASES;
查看前面建立的mydb2數據庫的定義信息
mysql>SHOW CREATE DATABASE mydb1;
刪除前面建立的mydb3數據庫
mysql>DROP DATABASE mydb3;
建立表以前必定先選擇數據庫
mysql>USE test;
建立一個員工表
mysql>CREATE TABLE employee(
id int,
name varchar(200),
gender varchar(10),
birthday date,
entry_date date,
job varchar(200),
salary float(8,2),
resume text
);
顯示當前數據庫中的全部表格
mysql>SHOW TABLES;
在上面員工表的基本上增長一個image列。
mysql>ALTER TABLE employee ADD image blob;
查看錶結構的定義
mysql>DESC employee;
修改job列,使其長度爲60。
mysql>ALTER TABLE employee MODIFY job varchar(60);
刪除image列。
mysql>ALTER TABLE employee DROP image;
表名改成user。
mysql>RENAME TABLE employee TO user;
查看錶的建立細節
mysql>SHOW CREATE TABLE user;
修改表的字符集爲gbk
mysql>ALTER TABLE user CHARACTER SET gbk;
列名name修改成username
mysql>ALTER TABLE user CHANGE name username varchar(100);
3、DML:Data Manipulation Language 數據操做語言
做用:操做表中的數據的。
關鍵:INSERT UPDATE DELETE
特別注意:日期或字符串、字符要使用單引號引發來。
查看錶中的全部記錄
mysql>SELECT * FROM user;
使用insert語句向表中插入三個員工的信息。
建議:mysql>INSERT INTO user (id,username,gender,birthday,entry_date,job,salary,resume) VALUES (1,'zql','0','1991-09-07','2013-04-12','CTO',10000.00,'beauty');
mysql>INSERT INTO user VALUES (2,'gfy','1','1987-09-07','2013-04-12','CEO',10000.00,'hand');
mysql>INSERT INTO user (id,username,gender,birthday,entry_date,job,salary,resume) VALUES (3,'王翔雲','1','1989-09-07','2013-04-12','UFO',10000.00,'good boy');
插入中文時的問題:(編碼問題)
查看數據庫目前的各類編碼:
mysql>SHOW VARIABLES LIKE 'character%';
通知服務器客戶端使用的編碼字符集
mysql>SET character_set_client=gbk;
顯示時亂碼
mysql>SET character_set_results=gbk;
將全部員工薪水修改成5000元。
mysql>UPDATE user SET salary=5000;
將姓名爲’王翔雲’的員工薪水修改成3000元。
mysql>UPDATE user SET salary=3000 WHERE username='王翔雲';
將姓名爲’王翔雲’的員工薪水修改成4000元,job改成CMO。
mysql>UPDATE user SET salary=4000,job='CMO' WHERE username='王翔雲';
將zql的薪水在原有基礎上增長1000元。
mysql>UPDATE user SET salary=salary+1000 WHERE username='zql';
刪除表中名稱爲’王翔雲’的記錄。
mysql>DELETE FROM user WHERE username='王翔雲';
刪除表中全部記錄。
mysql>DELETE FROM user;(一條一條的刪除)
使用TRUNCATE刪除表中記錄。
mysql>TRUNCATE user;(摧毀整張表,而後重建表結構)
4、DQL簡單的:Data Query Language
關鍵字:SELECT
查詢表中全部學生的信息。
mysql>SELECT * FROM student;(不建議使用)
mysql>SELECT id,name,chinese,english,math FROM student;
查詢表中全部學生的姓名和對應的英語成績。
mysql>SELECT name,english FROM student;
過濾表中重複數據。
mysql>SELECT DISTINCT english FROM student;
SELECT語句支持一些基本的運算
在全部學生數學分數上加10分特長分。
mysql>SELECT id,name,math+10 FROM student;
統計每一個學生的總分。
mysql>SELECT name,chinese+english+math FROM student;
使用別名表示學生分數。
mysql>SELECT name AS 姓名,chinese+english+math 總分 FROM student;
查詢姓名爲王五的學生成績
msyql>SELECT name,english,chinese,math FROM student WHERE name='王五';
查詢英語成績大於90分的同窗
msyql>SELECT name,english,chinese,math FROM student WHERE english>90;
查詢總分大於200分的全部同窗
mysql>SELECT name,chinese+english+math FROM student WHERE (chinese+english+math)>200;
WHERE語句支持運算表達式
查詢英語分數在 80-90之間的同窗。
mysql>SELECT * FROM student WHERE english BETWEEN 84 AND 85;
查詢數學分數爲89,90,91的同窗。
mysql>SELECT * FROM student WHERE math IN (89,90,91);
查詢全部姓李的學生成績。
mysql>SELECT * FROM student WHERE name LIKE '李%';
查詢數學分>80,語文分>80的同窗。
mysql>SELECT * FROM student WHERE math>80 AND chinese>80;
對數學成績排序後輸出。
mysql>SELECT * FROM student ORDER BY math;//默認是升序
對總分排序後輸出,而後再按從高到低的順序輸出
mysql>SELECT name,chinese+english+math FROM student ORDER BY (chinese+english+math) DESC;
對姓李的學生數學成績排序輸出
mysql>SELECT name,math FROM student WHERE name LIKE '李%' ORDER BY math;
5、數據完整性
三個方面:
一、實體完整性:規定表中的一行在表中是惟一的實體。
通常是經過定義主鍵的形式來實現的。
關鍵字:PRIMARY KEY
特色:不能爲null,必須惟一
CREATE TABLE SHANG_HAI1(
id int PRIMARY KEY,
name varchar(100)
);
//實際開發中不建議使用。
CREATE TABLE shanghai2(
id int PRIMARY KEY auto_increment,
name varchar(100)
);
insert into shanghai2 (name) values('aa');
二、域完整性
指數據庫表的列(即字段)必須符合某種特定的數據類型或約束。
NOT NULL:不能爲空
UNIQUE:必須惟一
CREATE TABLE shanghai3(
id int PRIMARY KEY,
name varchar(100) NOT NULL,
idnum varchar(100) unique
);
關於主鍵:
(建議)邏輯主鍵:給編程人員用的。與具體業務無關
業務主鍵:用戶也能夠用。與具體業務有關了。
三、參照完整性(多表設計)
一對多
create table department(
id int primary key,
name varchar(100)
);
create table employee(
id int primary key,
name varchar(100),
salary float(8,2),
dept_id int,
constraint dept_id_fk foreign key(dept_id) references department(id)
);
多對多
create table teacher(
id int primary key,
name varchar(100),
salary float(8,2)
);
create table student1(
id int primary key,
name varchar(100),
grade varchar(10)
);
create table teacher_student1(
t_id int,
s_id int,
primary key(t_id,s_id),
constraint t_id_fk foreign key(t_id) references teacher(id),
constraint s_id_fk foreign key(s_id) references student1(id)
);
一對一
create table human(
id int primary key,
name varchar(100)
);
create table idcard(
id int primary key,
num varchar(100),
constraint huanm_id_fk foreign key(id) references human(id)
);
***1、表的複雜查詢
一、鏈接查詢
1.0鏈接的基本語法格式:
from TABLE1 join_type TABLE2 [on (join_condition)][where (query_condition)]
TABLE1:左表
TABLE2:右表
join_type:鏈接的類型。交叉、內鏈接、左外鏈接、右外鏈接
on:設置鏈接條件
where:對鏈接查詢的結果進步一的篩選
1.1交叉鏈接
select * from CUSTOMER cross join ORDERS;
或者
select * from CUSTOMER,ORDERS;
select c.name,o.order_number from CUSTOMER c,ORDERS o;
1.2內鏈接:
隱式內鏈接:(不使用on關鍵字,使用where)
select * from CUSTOMER c,ORDERS o where c.id=o.customer_id;
顯式內鏈接:(使用on關鍵字)
select * from CUSTOMER c inner join ORDERS o on c.id=o.customer_id;
1.3外鏈接:
左外鏈接:(返回符合鏈接條件的全部記錄,同時還返回左表中其他的全部記錄)
select * from CUSTOMER c left outer join ORDERS o on c.id=o.customer_id;
右外鏈接:(返回符合鏈接條件的全部記錄,同時還返回右表中其他的全部記錄)
select * from CUSTOMER c right outer join ORDERS o on c.id=o.customer_id;
二、子查詢(嵌套查詢)
查詢「陳冠希」的全部訂單信息
查詢「陳冠希」的客戶id select id from customer where name='陳冠希';
查詢訂單信息: select * from orders where customer_id=1;
子查詢: select * from orders where customer_id=(select id from customer where name='陳冠希');
三、聯合查詢
SELECT * FROM orders WHERE price>200 UNION SELECT * FROM orders WHERE customer_id=1;
取兩條語句的並集,並去除重複的記錄。
四、報表查詢(合計函數)(使用原來的test數據庫)
統計一個班級共有多少學生?
select count(*) from student;
統計數學成績大於90的學生有多少個?
select count(*) from student where math>=90;
統計總分大於250的人數有多少?
select count(*) from student where (chinese+math+english)>250;
統計一個班級數學總成績?
select sum(math) from student;
統計一個班級語文、英語、數學各科的總成績
select sum(chinese),sum(english),sum(math) from student;
統計一個班級語文、英語、數學的成績總和
select sum(chinese+english+math) from student;
統計一個班級語文成績平均分
select sum(chinese)/count(*) from student;
求一個班級數學平均分?
select avg(math) from student;
求一個班級總分平均分
select avg(chinese+english+math) from student;
Tips:若是要使用關鍵字做爲表名,要使用`(Esc按鍵下面的)包圍起來。
對訂單表中商品歸類後,顯示每一類商品的總價
select product,sum(price) from orders group by product;
查詢購買了幾類商品,而且每類總價大於100的商品
select product,sum(price) from orders group by product having sum(price)>100;
2、MySQL的數據庫的備份與恢復
數據庫的備份:(不會備份數據庫名)
shell>mysqldump -u root -psorry test>c:/test.sql
恢復數據庫:(數據庫名必須存在)
方式一:
shell>mysql -u root -psorry test<c:/test.sql
方式二:
mysql>USE test;
mysql>SOURCE c:/test.sql;
day14JDBC入門
3、JDBC概述
JDBC:Java DataBase Connectivity(Java鏈接數據庫的標準。SUN制定的)
JDBC和數據庫的驅動是什麼關係?JDBC是規範,抽象層,數據庫驅動是具體的實現。
JDBC規範由一些抽象類和接口組成,通常放在java.sql.*或javax.sql.*包中(JDK中帶)
*****4、JDBC編碼的步驟
準備:把數據庫的驅動加入到構建路徑中
一、加載驅動程序並註冊驅動
二、獲取與數據庫的鏈接
三、獲得表明SQL語句的對象,併發送SQL給數據庫
四、若是有查詢結果,獲得封裝了查詢結果的對象
五、遍歷結果
六、釋放佔用的資源
5、JDBC中經常使用接口和類的詳細講解
一、DriverManager
做用:註冊驅動,獲得數據庫的鏈接
註冊驅動:
DriverManager.registDriver(new com.mysql.jdbc.Driver());(不可取)
緣由:一、嚴重依賴具體的數據庫驅動。二、會致使驅動註冊2遍。
替代方案:
獲取數據庫的鏈接:
static Connection getConnection(String url,String user,String password):
url:數據庫的鏈接串。
mysql:jdbc:mysql://localhost:3306/day14數據庫名或者jdbc:mysql:///day14(鏈接本地默認端口上的mysql數據庫)
user:數據庫的用戶名
password:數據庫的密碼
static Connection getConnection(String url,Properties info)
static Connection getConnection(String url)
二、Connection
全部與數據庫交互都必須創建在鏈接的基礎上
三、Statement
做用:表明着SQL語句
經常使用的方法:
ResultSet executeQuery(String sql):sql是DQL語句
int executeUpdate(String sql):sql是DML語句。或者是沒有返回結果的DDL也能夠。返回值,表明着語句影響到的行數。
boolean execute(String sql):sql能夠是任何的sql語句。若是有結果集返回,返回true。不然返回false。
四、ResultSet
boolean next():下移一行
boolean previous():上移一行
void absolute(int row):第一行的記錄就是1
void beforeFirst():移動到第一行的前面
void afterLast():移動到最後一行的後面
五、釋放資源
6、利用JDBC對數據庫進行CRUD
7、利用JDBC改寫原有的用戶註冊和登陸的案例
8、SQL的注入及防範
PreparedStatement:(儘可能使用它,就不要再使用Statement)
做用:
一、預編譯SQL語句,數據庫執行效率高。
二、防止SQL注入
三、支持參數佔位符"?"
day15客戶系統及大數據分頁;大數據的存取及批處理
9、客戶管理系統(Web項目CRUD)
day16調用存儲過程;事務入門;隔離級別;數據庫鏈接池的原理;開源數據源;編寫本身的JDBC框架
1、獲取數據庫自動生成的主鍵
2、如何調用存儲過程
***3、事務入門
*****4、事務的特性(隔離級別)
*****5、數據庫鏈接池原理
*****6、編寫標準的數據庫鏈接池
編碼難題
*****包裝設計模式
*****默認適配器設計模式
*****基於接口的動態代理
***7、開源的數據源使用
DBCP
C3P0
**8、數據庫元信息的獲取(編寫框架時使用)
*****9、編寫屬於本身的JDBC框架(反射)
策略設計模式
day17使用DBUtils框架;實際開發中的事務控制;多表操做
1、小結
(必須練一遍會用)一、DBUtil的QueryRunner的基本使用
(必須練一遍會用)二、DBUtil中的全部結果處理器
(必須理解)三、實際開發中的事務控制
(必須明白)四、ThreadLocal
(必須明白類與數據庫的設計關係,必須作一遍)五、多表操做
day18自定義標籤
1、小結
(理解)一、自定義標籤的做用
(記住)二、自定義標籤的編寫步驟
(記住)三、傳統標籤的原理
(有什麼用)四、傳統標籤的附加功能
(記住)五、JSP中的標籤繼承體系
(會用,基本練習)六、簡單標籤的附加功能實現
(會寫)七、標籤案例及發佈標籤庫
(會用)八、JSTL中的剩餘核心標籤
day19國際化及過濾器概述,案例
1、什麼是國際化
2、國際化處理須要的類
Locale
文本:ResourceBundle
日期時間:DateFormat
數字貨幣:NumberFormat
批量格式化:MessageFormat
3、簡單介紹國際化的JSTL標籤庫
4、過濾器概述
5、編寫過濾的步驟
6、過濾器的執行過程
7、過濾器簡單案例:3個
8、過濾器的高級配置
9、鞏固包裝設計模式
10、過濾器高級案例:
全站Gzip壓縮(至關有難度)
day20包裝設計模式;過濾器高級案例;權限攔截
1、包裝設計模式:BufferedReader的readLine()方法增長行號
2、過濾器高級案例:
中文亂碼過濾器
髒話過濾器
HTML特殊標記過濾器
全站壓縮過濾器(超難)
3、基於URL的權限攔截過濾器
day21文件上傳下載;監聽器
1、文件上傳的原理
2、利用第三方組件實現文件上傳
3、文件上傳中要注意的9個問題
4、監聽器概念
5、觀察者設計模式
6、Servlet中提供的監聽器(8個)
7、監聽對象的建立和銷燬的監聽器
8、自定義HttpSession掃描器
Timer
TimerTash
9、監聽域對象變化的監聽器
10、感知型監聽器
11、統計在線用戶,能踢人。
day22JavaMail開發
JavaMail開發:JavaEE技術之一
1、郵件的學習目標
2、郵件開發相關的概念
3、郵件開發用到的協議:SMTP、POP、RFC82二、MIME
4、手工發送郵件和接收郵件(熟練SMTP等協議的)
5、冒充別人發送郵件
6、JavaMail的核心API簡介
7、建立郵件:(衛星)
只有文本的郵件
既有文本,文本中還內嵌圖片的郵件
既有文本,文本中還內嵌圖片的郵件,還有附件的郵件
8、發送郵件:(火箭)
*****9、案例:用戶註冊,發送激活郵件java