Java web獲取專欄圖片方法,學(xué)習(xí)筆記合集,整合servlet,萬能DAO重點(diǎn)知識【詩書畫唱】

一、頁面跳轉(zhuǎn)方式
二、傳參方式
在頁面中需要輸入日期框的時(shí)候,我們不能夠直接寫三個(gè)文本輸入框,可以使用腳本文件(從網(wǎng)上面下載)來引入一個(gè)日期框(JS文件)
在eclipse項(xiàng)目中使用日期框:
1、將日期腳本文件拷貝到工程WebContent目錄下(可以創(chuàng)建子文件夾)
2、創(chuàng)建jsp頁面,在頁面中引入日期腳本文件
"3、在頁面中編寫如下的代碼:
<input type=""text"" readonly?
? ? ? ? ? ? onclick=""new Calendar().show(this);"" />"
頁面跳轉(zhuǎn)的方式有兩種:
1、轉(zhuǎn)發(fā)
2、重定向
"區(qū)別:
1、瀏覽器地址欄顯示的最后的地址不同,轉(zhuǎn)發(fā)就顯示前面的請求的地址,而重定向會(huì)顯示最后跳轉(zhuǎn)的頁面的地址
2、轉(zhuǎn)發(fā)就是一次請求,重定向是兩次請求"
3、重定向可以跳轉(zhuǎn)到項(xiàng)目外面的頁面去
項(xiàng)目中一般建議使用轉(zhuǎn)發(fā)方式跳轉(zhuǎn)
JS代碼中優(yōu)先使用單引號
傳參方式:
"1、瀏覽器地址欄中直接傳入
http://localhost:8888/j190802/demo.jsp?act=admin&pwd=123&sex=男"
2、表單提交
一、getParameter和getAttribute的區(qū)別。
二、四大作用域:pageContext,request,session,application
三、EL表達(dá)式
getAttribute和setAttribute方法
getParameter和getAttribute的區(qū)別:
1、getParameter返回值是String,getAttribute返回值是Object
2、getParameter方法是一個(gè)單身狗,沒有對應(yīng)的setParameter方法
如果調(diào)用setAttribute方法,后面的程序中就必定會(huì)調(diào)用getAttribute方法
3、getParameter的使用場景:表單提交時(shí)獲取數(shù)據(jù),url路徑中夾帶的參數(shù)
getAttribute的使用場景:頁面轉(zhuǎn)發(fā)時(shí)調(diào)用。
pageContext,session和application跟request和response一樣,可以直接拿過來使用
"pageContext,request,session以及application叫jsp頁面的四大作用域,指的就是你放在這些對象中的變量在哪個(gè)范圍內(nèi)有效。
四大作用域?qū)ο蠖加衧etAttribute方法和getAttribute方法。"
pageContext:表示放在這個(gè)對象中(調(diào)用setAttribute方法)的變量在本JSP頁面有效
request:表示放在同一次請求中的變量有效
session:表示同一次會(huì)話中的變量有效
application:只要不重啟服務(wù)器,放在里面的變量就會(huì)一直有效
request:當(dāng)進(jìn)行頁面轉(zhuǎn)發(fā)時(shí)傳遞參數(shù)
session:當(dāng)實(shí)現(xiàn)購物車功能時(shí)就需要使用session
購物車:需要訪問很多的頁面和發(fā)送很多的搜索請求,購物車中的數(shù)據(jù)必須要一直有效。
一、作業(yè)講解
二、EL表達(dá)式
EL表達(dá)式就是JSP中的一種特有的語言,可以簡化我們的java代碼。
EL表達(dá)式寫法:${表達(dá)式},注意:{}中間只能是表達(dá)式,不能是語句
EL表達(dá)式有兩種運(yùn)算符:.和[](JS對象的運(yùn)算符)
EL表達(dá)式可以寫在JSP頁面的任何地方
"EL表達(dá)式中的變量的顯示過程:會(huì)依次從pageContext,request,session以及
applicaion四個(gè)作用域中找這個(gè)變量,一旦找到了就返回這個(gè)值,如果四個(gè)作用域都找不到,就顯示為""""(不是顯示為null)"
一、EL表達(dá)式顯示map和list中的值。
二、通過EL表達(dá)式加載表單數(shù)據(jù),修改數(shù)據(jù)時(shí)使用
${}中比較兩個(gè)字符串是否相等,可以使用==也可以使用eq
${message == "success" ? "登錄成功" : "登錄失敗"}
${message eq "success" ? "登錄成功" : "登錄失敗"}
復(fù)習(xí)三大容器:List,Map,Set
List,Map和Set都是接口,所以不能夠直接new出來的
List最常用的實(shí)現(xiàn)類:ArrayList
Map最常用的實(shí)現(xiàn)類:HashMap
Set最常用的實(shí)現(xiàn)類:HashSet
一、EL表達(dá)式中的范圍變量
二、表單提交后的EL表達(dá)式
三、EL表達(dá)式
如果是通過表單方式提交的數(shù)據(jù),那么通過EL表達(dá)式獲取就必須使用param隱式對象
EL表達(dá)式中的范圍變量:
pageContext:pageScope
request:requestScope
session:sessionScope
application:applicationScope
上面四個(gè)scope變量都是用來替換getAttribute方法的
而param隱式對象就是用來替換getParameter方法的
讀取數(shù)據(jù)庫中的表中的數(shù)據(jù),將這些數(shù)據(jù)組裝成一個(gè)下拉框。
1、創(chuàng)建表eduinfo
2、在java代碼中創(chuàng)建一個(gè)這個(gè)表對應(yīng)的javabean,它的名字跟你的表名是一樣的Eduinfo
3、根據(jù)eduinfo表中的列來創(chuàng)建Eduinfo類的屬性,你的表中有幾個(gè)列javabean中就有一個(gè)屬性,而且屬性名要跟表的列名一致。
4、創(chuàng)建表對應(yīng)的數(shù)據(jù)訪問類(dao),EduinfoDao
一、登錄功能
知道實(shí)現(xiàn)一個(gè)功能的步驟
1、在mysql數(shù)據(jù)庫中創(chuàng)建一個(gè)表user,表結(jié)構(gòu):id,act,pwd
"2、搭建項(xiàng)目,需要?jiǎng)?chuàng)建一些包:
com.jy.bean:com/jy/bean,對應(yīng)每個(gè)表中的一條數(shù)據(jù)的,你有幾個(gè)表就創(chuàng)建一個(gè)bean
com.jy.dao:com/jy/dao,負(fù)責(zé)對表進(jìn)行增刪改查的,你有一個(gè)表就創(chuàng)建一個(gè)dao"
"com.jy是怎么來的:根據(jù)你所在的公司的網(wǎng)址來確定,www.jy.com,你的包名就將網(wǎng)址
倒過來寫就可以了com.jy"
"3、將數(shù)據(jù)庫的配置文件db.properties放到src目錄下,同時(shí)將數(shù)據(jù)庫的驅(qū)動(dòng)包拷貝到
工程的lib目錄下。將數(shù)據(jù)庫連接工具類拷貝到工程目錄下"
4、創(chuàng)建login.jsp頁面
"5、設(shè)計(jì)登錄的action即doLogin.jsp頁面,因?yàn)檫@個(gè)頁面沒有需要展示的東西,所以
我們將它的所有的html代碼都刪除。然后將doLogin.jsp的相對路徑寫到表單的actiion屬性中。"
6、實(shí)現(xiàn)登錄的業(yè)務(wù),編寫登錄的代碼
在項(xiàng)目中,一個(gè)方法的功能越簡單越單一就越能夠復(fù)用
二、登錄注冊功能:驗(yàn)證碼,人臉識別,短信驗(yàn)證
普通的注冊:輸入賬號密碼(輸入兩次),生日,學(xué)歷,愛好等
1、創(chuàng)建reg.jsp頁面
2、設(shè)計(jì)一個(gè)業(yè)務(wù)處理頁面doReg.jsp,將表單中的action設(shè)置為這個(gè)業(yè)務(wù)處理頁面
3、表單驗(yàn)證,保證用戶輸入的數(shù)據(jù)是正確的,不會(huì)破壞后臺(tái)的數(shù)據(jù)庫中的數(shù)據(jù)
一、HTTP協(xié)議
二、servlet
HTTP協(xié)議:超文本傳輸協(xié)議,文本代表字符串的意思,超文本代表圖片,音頻和視頻
游戲的鼻祖:泥巴游戲mud,它是一個(gè)純的文字游戲。
"網(wǎng)絡(luò)上面發(fā)送這些超文本時(shí),就必須要遵守一定的規(guī)則,這樣其他的人才能夠接收到
的超文本內(nèi)容,這個(gè)規(guī)則就叫超文本傳輸協(xié)議"
Javaweb就遵循HTTP協(xié)議
HTTP協(xié)議有兩個(gè)非常重要的請求方式:get請求方式和post請求方式
"404:找不到你需要的資源(jsp頁面,html頁面以及servlet),訪問路徑如果不會(huì)就
會(huì)報(bào)這個(gè)錯(cuò)誤"
500:表示后臺(tái)代碼出現(xiàn)了錯(cuò)誤(java代碼)
200:表示請求成功了
"Servlet:由java代碼編寫的一個(gè)小服務(wù)程序,它的作用非常的廣泛,可以實(shí)現(xiàn)非常多
的功能,登錄注冊增刪改查,附件上傳下載,導(dǎo)出excel文件,servlet其實(shí)就是一個(gè)java類。"
"使用servlet:servlet雖然是一個(gè)java類,但是不能夠直接運(yùn)行。它必須啟動(dòng)tomcat服
務(wù)器以后才能運(yùn)行。"
創(chuàng)建一個(gè)servlet,運(yùn)行它的時(shí)候在后臺(tái)打印Hello world.
1、創(chuàng)建一個(gè)java類,讓它繼承HttpServlet類,重寫doGet和doPost方法。
2、打開web.xml配置文件,對servlet進(jìn)行配置。
快捷配置一個(gè)servlet:
當(dāng)你在瀏覽器地址欄直接輸入一個(gè)servlet的訪問路徑時(shí),調(diào)用的是doGet方法
當(dāng)在表單中運(yùn)行一個(gè)servlet時(shí),會(huì)根據(jù)表單的method屬性來決定是調(diào)用doPost方法還是doGet方法。
post提交方式提交表單數(shù)據(jù)時(shí),提交的數(shù)據(jù)不會(huì)顯示在瀏覽器地址欄中
get提交方式提交表單數(shù)據(jù)時(shí),提交的數(shù)據(jù)會(huì)顯示在瀏覽器地址欄中。
post提交方式比較安全的。
get提交方式提交的數(shù)據(jù)量比較小
post提交方式提交的數(shù)據(jù)量比較大
一、servlet生命周期
二、init和destroy
三、loadonstartup servlet
四、servlet頁面跳轉(zhuǎn)方式
創(chuàng)建servlet的方式:
1、創(chuàng)建一個(gè)java類,讓他繼承HttpServlet,然后在web.xml中添加一段配置代碼。
2、new servlet就可以創(chuàng)建出來
在項(xiàng)目中,創(chuàng)建servlet實(shí)例的時(shí)機(jī):
"1、當(dāng)項(xiàng)目啟動(dòng)以后的第一個(gè)用戶請求這個(gè)servlet時(shí),就會(huì)new出一個(gè)servlet實(shí)例,
當(dāng)這個(gè)用戶使用完以后,servlet實(shí)例不會(huì)消失,會(huì)一直保存在項(xiàng)目中,當(dāng)下一次有用戶再次請求這個(gè)servlet的時(shí)候,就不會(huì)再new這個(gè)servlet,會(huì)直接使用前面保存在項(xiàng)目中的servlet實(shí)例。"
2、隨著項(xiàng)目啟動(dòng),會(huì)自動(dòng)的創(chuàng)建servlet
"第二個(gè)用戶也是訪問這個(gè)servlet,不會(huì)再new出一個(gè)servlet實(shí)例了,它會(huì)直接使用第
一次new出來的servlet實(shí)例"
loadonstartup servlet:隨著項(xiàng)目的啟動(dòng)會(huì)自動(dòng)運(yùn)行的
通過servlet來進(jìn)行頁面跳轉(zhuǎn):
創(chuàng)建一個(gè)LoginServlet,運(yùn)行這個(gè)servlet以后能夠跳轉(zhuǎn)到login.jsp頁面
jsp頁面每一個(gè)頁面其實(shí)都是一個(gè)servlet
jsp頁面轉(zhuǎn)換成servlet類以后的源代碼可以在tomcat服務(wù)器中的work目錄下找到
jsp頁面:在html代碼中寫java代碼
servlet:在java代碼中寫html代碼
實(shí)現(xiàn)重名驗(yàn)證
一、隱藏表單域
二、servlet中傳遞參數(shù)的方法
三、servlet中的四大作用域
四、jsp和servlet之間的關(guān)系(代碼塊)
jsp就是一個(gè)servlet,jsp頁面專門負(fù)責(zé)展示內(nèi)容,servlet專門用來做業(yè)務(wù)處理。
login.jsp:顯示登錄頁面
doLogin.jsp:必須使用servlet來代替了,專門用來處理登錄業(yè)務(wù)邏輯的
<%%>中的代碼其實(shí)就是寫在service方法中的代碼
<%=%>中的代碼也是寫在service方法中的代碼,就是一個(gè)打印變量的語句
<%!%>中的代碼其實(shí)就是servlet的成員屬性
<%----%>
1、url傳參方式:通過在訪問地址后面添加上?和&方法
訪問地址:http://localhost:8888/j190802/ps?act=admin&pwd=123
2、表單傳參方式:通過表單的action屬性調(diào)用servlet進(jìn)行傳參
隱藏表單域:
"當(dāng)我們修改數(shù)據(jù)時(shí),id是不能夠修改。id是不應(yīng)該顯示在頁面上,但是修改數(shù)據(jù)提交
表單時(shí)又需要這個(gè)id值。"
一、servlet中的四大作用域
二、購物車功能實(shí)現(xiàn)
幸存者偏差
jsp頁面有四大作用域:pageContext,request,session,application
jsp就是一個(gè)servlet,所以servlet中肯定也有四大作用域
pageContext在servlet中就相當(dāng)于this
request就是方法的參數(shù),兩者一樣
session在servlet中通過request.getSession()的方法獲取
application在servlet中通過this.getServletContext()的方法獲取
實(shí)現(xiàn)購物車功能
"登錄網(wǎng)站,打開商品列表界面,選擇你喜歡的商品進(jìn)行瀏覽(看很多頁面),一旦發(fā)現(xiàn)
喜歡的商品,就要將商品放入到購物車中。購物車中的數(shù)據(jù)還在一直存在"
"要發(fā)送很多的請求,最好將購物車中的商品放到session中,這樣的話不管你發(fā)送多少
次請求,購物車中的數(shù)據(jù)都不會(huì)消失掉。"
怎樣存放商品:商品的詳細(xì)信息(訂單對象),商品數(shù)量,最終選擇使用map來存放數(shù)據(jù)
List,Set,Map
一、實(shí)現(xiàn)個(gè)人游戲管理系統(tǒng)
1、創(chuàng)建表:每個(gè)表應(yīng)該有一個(gè)與業(yè)務(wù)無關(guān)的主鍵(int類型)
2、項(xiàng)目的準(zhǔn)備工作:導(dǎo)入mysql數(shù)據(jù)庫的驅(qū)動(dòng)包和db.properties文件(src目錄下)
"3、搭建一下項(xiàng)目的框架:項(xiàng)目中的代碼不是寫在一個(gè)類里面運(yùn)行就可以了,我們應(yīng)該
把代碼有條理的把它寫在不同的java類中,讓他們一起工作。"
簡單分層處理:
com.jy.bean:存放表對應(yīng)的數(shù)據(jù)模型的。每個(gè)表都對應(yīng)一個(gè)bean類
com.jy.dao:用來對表進(jìn)行增刪改查的類。每個(gè)表都對應(yīng)個(gè)dao類
com.jy.controller:就是存放servlet的。
com.jy.utils:存放項(xiàng)目中的一些常用工具類的,創(chuàng)建數(shù)據(jù)庫的連接工具類
4、寫界面:創(chuàng)建游戲管理查詢界面,游戲列表界面和游戲新增界面
5、實(shí)現(xiàn)按鈕的跳轉(zhuǎn)頁面的功能,具體的查詢新增功能暫時(shí)不需要實(shí)現(xiàn)
6、編寫后臺(tái)業(yè)務(wù)代碼
jsp頁面只負(fù)責(zé)做展示,盡量不要把業(yè)務(wù)代碼寫在jsp頁面上。
一、正則表達(dá)式
JS和JAVA等多種語言中都可以使用正則表達(dá)式,而且語法規(guī)則都一樣
正則表達(dá)式中的特殊字符:
?:表示出現(xiàn)的次數(shù)是1或者0,+:出現(xiàn)的次數(shù)不能為0,*:可以出現(xiàn)任意多次
^以什么開頭,$以什么結(jié)尾
.表示換行符\n以外的任何字符
正則表達(dá)式中的元字符
一、過濾器
javaweb中,除了servlet以外,還有一些比較重要的組件filter,listener
servlet:java小服務(wù)程序
filter:過濾器
listener:監(jiān)聽器
javaweb的三大組件,他們都是一個(gè)java類。
登錄就直接看到個(gè)人中心頁面。在訪問這個(gè)頁面之前,需要檢查你是否有登錄?
請求regServ之前,會(huì)先執(zhí)行過濾器中的代碼。
第一個(gè)過濾器FirstFilter
第二個(gè)過濾器SecondFilter
FirstFilter中的doFilter方法中的代碼
SecondFilter中的doFilter方法中的代碼
regServ中的代碼
SecondFilter中doFilter方法中的代碼
FirstFilter中doFilter方法中的代碼
創(chuàng)建登錄的servlet,創(chuàng)建一個(gè)注冊的servlet,創(chuàng)建一個(gè)index.jsp頁面
請創(chuàng)建一個(gè)過濾器,當(dāng)執(zhí)行登錄的servlet時(shí),才運(yùn)行過濾器中的代碼。
請創(chuàng)建另外一個(gè)過濾器,當(dāng)執(zhí)行jsp頁面時(shí)才會(huì)運(yùn)行過濾器中的代碼。
進(jìn)行匹配,如果servlet的url路徑跟Filter中的路徑匹配,就會(huì)執(zhí)行這個(gè)過濾器中的代碼
過濾器的url路徑匹配:
1、/*運(yùn)行項(xiàng)目中的任何servlet和jsp頁面都會(huì)執(zhí)行對應(yīng)的filter
2、*.jsp運(yùn)行項(xiàng)目中的任何jsp頁面都會(huì)執(zhí)行對應(yīng)的filter
3、/ls運(yùn)行項(xiàng)目中路徑中包含有l(wèi)s的servlet就會(huì)執(zhí)行對應(yīng)的filter
淘寶網(wǎng):login.jsp,cart.jsp,center.jsp
當(dāng)在瀏覽器地址欄輸入login.jsp頁面的訪問路徑時(shí),可以直接跳轉(zhuǎn)到index.jsp頁面。
當(dāng)在瀏覽器地址欄輸入cart.jsp,center.jsp頁面,不能直接跳轉(zhuǎn)過去,要先跳轉(zhuǎn)到登錄頁面才可以。
通過過濾器,實(shí)現(xiàn)了所有的servlet和jsp頁面的亂碼處理功能
實(shí)現(xiàn)了強(qiáng)制登錄的功能(攔截非法用戶的功能)
如果發(fā)現(xiàn)某一類servlet中有重復(fù)的代碼,就可以考慮使用過濾器
一、監(jiān)聽器Listener:其實(shí)就是一個(gè)java類
1、監(jiān)聽Session、request和application的創(chuàng)建和銷毀
HttpSessionListener,ServletContextListener,ServletRequestListener
2、監(jiān)聽對象屬性變化
HttpSessionAttributeListener,ServletContextAttributeListener,ServletRequestAttributeListener
3、監(jiān)聽Session內(nèi)的對象
HttpSessionBindingListener,HttpSessionActivationListener
跟js中的事件一樣:
項(xiàng)目一啟動(dòng)就要打印一句Hello world
方法一:使用loadonstartup servlet可以實(shí)現(xiàn)
方法二:使用Listener實(shí)現(xiàn),當(dāng)項(xiàng)目啟動(dòng)時(shí)馬上運(yùn)行代碼
ServletContextListener用來監(jiān)控application對象的創(chuàng)建和銷毀的監(jiān)聽器
當(dāng)啟動(dòng)一個(gè)javaweb項(xiàng)目時(shí),會(huì)創(chuàng)建唯一的一個(gè)application對象
servlet,filter和lister都需要在web.xml文件中進(jìn)行配置。
創(chuàng)建listener的步驟:
1、創(chuàng)建listener類
2、在web.xml文件中進(jìn)行配置
代碼緩存時(shí)可以使用監(jiān)聽器:ServletContextListener
統(tǒng)計(jì)本網(wǎng)頁的訪問次數(shù)。
統(tǒng)計(jì)在線人數(shù)。(必須使用HttpSessionListener,用來監(jiān)視session對象的創(chuàng)建和銷毀的)
"ServletRequestAttributeListener:當(dāng)調(diào)用request對象的setAttribute方法時(shí),會(huì)
運(yùn)行這個(gè)監(jiān)聽器中的代碼"
角色和權(quán)限:不同的角色登錄到系統(tǒng)中看到的內(nèi)容是不一樣的,這個(gè)就叫權(quán)限問題。
一、附件上傳
本地的拷貝:在同一臺(tái)電腦上進(jìn)行的操作。例如將一個(gè)文件從d盤拷貝到c盤。
在兩臺(tái)電腦之間進(jìn)行的拷貝,或者通過網(wǎng)頁的方式進(jìn)行的文件的拷貝。
附件上傳的步驟:
1、導(dǎo)包(附件上傳的包有很多種,我們今天使用的是這些包中的一種)
2、創(chuàng)建附件上傳的jsp頁面
3、創(chuàng)建附件上傳的servlet
在附件上傳中,除了type="file"的input標(biāo)簽以外,其他的input的isFormField都是true
地址:http://192.168.43.208:8888/j1908021/index.jsp
一、上傳圖片后顯示圖片
二、附件下載
將需要下載的文件放到服務(wù)器上,然后客戶端就可以通過訪問網(wǎng)頁來下載響應(yīng)的文件。
1、將需要下載的文件放到服務(wù)器上去
2、導(dǎo)包(附件上傳的包一樣)
3、創(chuàng)建附件下載的jsp頁面download.jsp
4、創(chuàng)建一個(gè)servlet實(shí)現(xiàn)附件下載功能
訪問地址:http://192.168.43.208:8888/j1908021/download.jsp
一、泛型參數(shù)
二、實(shí)現(xiàn)萬能DAO
一、整合servlet
登錄功能,注冊功能,修改密碼:公共模塊
商品新增,商品修改,商品查詢,商品刪除:商品模塊
"將一些功能放到同一個(gè)servlet中執(zhí)行。根據(jù)模塊功能整合,也就是說將同一個(gè)模塊中
的功能寫在一個(gè)servlet中。"
怎么樣將幾個(gè)功能寫在同一個(gè)servlet中,通過url傳參的方式
