1課程回顧
會話管理
1)會話管理:管理瀏覽器和服務(wù)器之間的會話過程中產(chǎn)生的會話數(shù)據(jù)
2)Cookie技術(shù):會話數(shù)據(jù)保存在瀏覽器客戶端。
Cookie核心的API:
2.1在服務(wù)器端創(chuàng)建Cookie對象
Cookeie cookie = new Cookie("name","value");
2.2把cookie發(fā)送給瀏覽器端(通過響應(yīng)頭:set-cookie)
response.addCookie(cookie);
2.3瀏覽器帶著cookie信息訪問服務(wù)器(通過請求頭:cookie)肌似,服務(wù)器得到cookie信息
Cookie[] cookies = request.getCookies();
局限:
1)只能保存字符串類型,不能保存中文
2)一個cookie不能超過4kb
3)Session技術(shù):會話數(shù)據(jù)保存在服務(wù)器端车海。(內(nèi)存)
Session核心的API:
3.1創(chuàng)建或得到session對象
HttpSession session = request.getSession(); //創(chuàng)建或得到session對象
request.getSession(false); //得到session對象
3.2會話數(shù)據(jù)保存session對象中浑彰,和得到會話數(shù)據(jù)
session.setAttribute("name",Object);保存數(shù)據(jù)
session.getAttribute("name")得到數(shù)據(jù)
注意:
1)session.setIntactiveInterval(時間);設(shè)置session過期時間
2)session.invalidate()手動銷毀session對象
2 Session案例
用戶登錄場景
3編程實戰(zhàn)
通訊錄程序
軟件的生命周期
3.1需求分析(需求分析師)
功能分析:
1)添加聯(lián)系人
2)修改聯(lián)系人
3)刪除聯(lián)系人
4)查詢所有聯(lián)系人
功能流轉(zhuǎn)
美工設(shè)計:設(shè)計軟件的靜態(tài)原型
3.2需求設(shè)計(系統(tǒng)分析師/架構(gòu)師/資深開發(fā)人員)
1)設(shè)計實體(抽象實體)
聯(lián)系人實體:
class Contact{
private String id;
private String name;
private String gender;
private int age;
private String phone;
private String email;
private String qq;
}
2)設(shè)計“數(shù)據(jù)庫”,(xml代替"數(shù)據(jù)庫")
contact.xml
張三
男
20
13433334444
zs@qq.com
43222222
3)設(shè)計涉及的接口
DAO接口(數(shù)據(jù)訪問對象):實體對象的CRUD方法去件。
項目原則:通常一個實體對象就會對應(yīng)一個DAO接口和一個DAO實現(xiàn)類
interface ContactDao{
public void addContact(Contact contact);//添加聯(lián)系人
public void updateContact(Contact contact);//修改聯(lián)系人
public void deleteContact(String id);//刪除聯(lián)系人
public List findAll();? //查詢所有聯(lián)系人
public Contact findById(String id);//根據(jù)編號查詢聯(lián)系人
}
4)設(shè)計項目的目錄結(jié)構(gòu)
項目名稱:contactSys_web
目錄結(jié)構(gòu):
|- contactSys_web
|-src
|-gz.itcast.contactSys_web.entity :存放實體對象
|-gz.itcast.contactSys_web.dao :存放dao的接口
|-gz.itcast.contactSys_web.dao.impl:存放dao的實現(xiàn)類
|-gz.itcast.contactSys_web.servlet:存放servlet的類
|-gz.itcast.contactSys_web.test:存放單元測試類
|-gz.itcast.contactSys_web.util:存放工具類
|-gz.itcast.contactSys_web.exception:存放自定義異常類
|-WebRoot
|-html文件
|-images:目錄笨农。存放圖片資源
|-css:目錄就缆。存放css資源
|-js:目錄。存放js資源
3.3編碼實現(xiàn)(軟件開發(fā)工程師/攻城獅)
開發(fā)順序:
設(shè)計數(shù)據(jù)庫->實體-> DAO接口谒亦,DAO實現(xiàn)-> Servlet+html頁面
3.4功能測試(測試攻城獅)
3.5性能測試(測試攻城獅)
3.6部署上線(實施攻城獅)
3.7維護階段(實施攻城獅)
4 Jsp基礎(chǔ)
4.1 Jsp引入
Servlet的作用:用java語言開發(fā)動態(tài)資源的技術(shù)=咴住!份招!
Jsp的作用:用java語言(+html語言)開發(fā)動態(tài)資源的技術(shù)G薪摇!锁摔!
Jsp就是servlet@!谐腰!
4.2 Jsp的特點
1)jsp的運行必須交給tomcat服務(wù)器T斜!J励背!
tomcat的work目錄:tomcat服務(wù)器存放jsp運行時的臨時文件
2)jsp頁面既可以寫html代碼,也可以寫java代碼砸西。
(html頁面不能寫java代碼叶眉。而jsp頁面可以寫java代碼)
4.3體驗jsp頁面作用
需求:顯示當(dāng)前時間到瀏覽器上
可以把jsp頁面當(dāng)做html頁面在tomcat中訪問V啡濉!衅疙!
4.4 Jsp的執(zhí)行過程
問題:訪問http://localhost:8080/day12/01.hello.jsp如何顯示效果莲趣?
1)訪問到01.hello.jsp頁面,tomcat掃描到j(luò)sp文件炼蛤,在%tomcat%/work把jsp文件翻譯成java源文件
(01.hello.jsp? ->? _01_hello_jsp.java)(翻譯)
2)tomcat服務(wù)器把java源文件編譯成class字節(jié)碼文件(編譯)
(_01_hello_jsp.java? ->? _01_hello_jsp.class)
3)tomcat服務(wù)器構(gòu)造_01_hello_jsp類對象
4)tomcat服務(wù)器調(diào)用_01_hello_jsp類里面方法妖爷,返回內(nèi)容顯示到瀏覽器蝶涩。
第一次訪問jsp:
走(1)(2)(3)(4)
第n次訪問jsp:
走(4)
注意:
1)jsp文件修改了或jsp的臨時文件被刪除了理朋,要重新走翻譯(1)和編譯(2)的過程
4.5疑問
問題:為什么Jsp就是servlet!B唐浮嗽上!
jsp翻譯的java文件:
public final class_01_hello_jspextendsorg.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
HttpJspBase類:
public abstract class org.apache.jasper.runtime.HttpJspBaseextends javax.servlet.http.HttpServletimplements javax.servlet.jsp.HttpJspPage {
結(jié)論: Jsp就是一個servlet程序!Oㄈ痢兽愤!
servlet的技術(shù)可以用在jsp程序中
jsp的技術(shù)并不是全部適用于servlet程序!
Servlet的生命周期:
1)構(gòu)造方法(第1次訪問)
2)init方法(第1次訪問)
3)service方法
4)destroy方法
Jsp的生命周期
1)翻譯: jsp->java文件
2)編譯: java文件->class文件(servlet程序)
3)構(gòu)造方法(第1次訪問)
4)init方法(第1次訪問):_jspInit()
5)service方法:_jspService()
6)destroy方法:_jspDestroy()
5 Jsp語法
5.1 Jsp模板
jsp頁面中的html代碼就是jsp的模板
5.2 Jsp表達式
語法:<%=變量或表達式%>
作用:向瀏覽器輸出變量的值或表達式計算的結(jié)果
注意:
1)表達式的原理就是翻譯成out.print(“變量”);通過該方法向瀏覽器寫出內(nèi)容
2)表達式后面不需要帶分號結(jié)束挪圾。
5.3 Jsp的腳本
語法:<%java代碼%>
作用:執(zhí)行java代碼
注意:
1)原理把腳本中java代碼原封不動拷貝到_jspService方法中執(zhí)行浅萧。
5.4 Jsp的聲明
語法:<%!變量或方法%>
作用:聲明jsp的變量或方法
注意:
1)變量翻譯成成員變量,方法翻譯成成員方法哲思。
5.5 Jsp的注釋
語法:<%!--? jsp注釋--%>
注意;
1)html的注釋會被翻譯和執(zhí)行洼畅。而jsp的注釋不能被翻譯和執(zhí)行。
6 Jsp的三大指令
6.1 include指令
作用:在當(dāng)前頁面用于包含其他頁面
語法:<%@include file="common/header.jsp"%>
注意:
1)原理是把被包含的頁面(header.jsp)的內(nèi)容翻譯到包含頁面(index.jsp)中,合并成翻譯成一個java源文件棚赔,再編譯運行5鄞亍!靠益,這種包含叫靜態(tài)包含(源碼包含)
2)如果使用靜態(tài)包含丧肴,被包含頁面中不需要出現(xiàn)全局的html標(biāo)簽了!k屎蟆S蟾 (如html、head壳快、body)
6.2 page指令
作用:告訴tomcat服務(wù)器如何翻譯jsp文件
<%@page
language="java"--告訴服務(wù)器使用什么動態(tài)語言來翻譯jsp文件
import="java.util.*"--告訴服務(wù)器java文件使用什么包
導(dǎo)入包途样,多個包之間用逗號分割
pageEncoding="utf-8"--告訴服務(wù)器使用什么編碼翻譯jsp文件(成java文件)
contentType="text/html; charset=utf-8"服務(wù)器發(fā)送瀏覽器的數(shù)據(jù)類型和內(nèi)容編碼
注意:在開發(fā)工具中,以后只需要設(shè)置pageEncoding即可解決中文亂碼問題
errorPage="error.jsp"
isErrorPage="false"
buffer="8kb"
session="true"
isELIgnored="false"
%>
6.3 taglib指令
總結(jié):
1)編碼實戰(zhàn):
1.1 servlet應(yīng)用
1.2初步了解軟件開發(fā)流程
2)Jsp基礎(chǔ)
2.1 Jsp的執(zhí)行原理(翻譯-》編譯-》servlet的生命周期)
2.2語法(jsp表達式濒憋,jsp腳本)
2.3指令
include指令
page指令