java web知识总结——【华清远见】
servlet
-
Java web主要用的是sun公司制定的一種用于web服務(wù)器的功能的組件—servlet。
-
做Javaweb項(xiàng)目需要?jiǎng)?chuàng)建javaweb工程,和以往創(chuàng)建普通的Java項(xiàng)目不同,這個(gè)需要需要?jiǎng)?chuàng)建maven web項(xiàng)目,我自認(rèn)為創(chuàng)建maven web項(xiàng)目非常重要,其中需要很多細(xì)節(jié)需要注意,因?yàn)槲以趧?chuàng)建maven web項(xiàng)目時(shí)有很多次都要?jiǎng)?chuàng)建好幾次才會(huì)創(chuàng)建成功。以下是創(chuàng)建maven web項(xiàng)目的步驟
-
選擇maven項(xiàng)目 ,選擇項(xiàng)目的模板為maven-archetype-webapp.
-
設(shè)置項(xiàng)目的名字等信息
-
設(shè)置maven的路徑
-
項(xiàng)目創(chuàng)建成功之后需要進(jìn)行修改,找到項(xiàng)目結(jié)構(gòu),添加java, resources目錄
-
新建文件夾,設(shè)置文件夾類型
-
刪除原來(lái)低版本的web.xml文件
-
增加4.0版本的web.xml
-
安裝配置tomcat 服務(wù)器
-
java web項(xiàng)目運(yùn)行,需要運(yùn)行在支持java web項(xiàng)目的服務(wù)器上,常見(jiàn)的java web服務(wù)器:
tomcat
JBoss
Resin
Jetty
-
-
單擊右側(cè)的add configuration , 打開(kāi)配置窗口
-
選擇tomcat
-
選擇tomcat的路徑
-
修改項(xiàng)目的請(qǐng)求路徑
-
項(xiàng)目啟動(dòng)成功之后,訪問(wèn)的url:
-
修改控制臺(tái)亂碼:
-
servlet的配置
要繼承父類HttpServlet,在這里我也出現(xiàn)很多問(wèn)題,繼承父類時(shí)有時(shí)候會(huì)創(chuàng)建不上,經(jīng)過(guò)我自己去網(wǎng)上查閱才知道我的servlet包沒(méi)有導(dǎo)入進(jìn)去,我的最終解決方案是File–>Project Structure–>Libraries–>點(diǎn)左邊的"+"–>Java–>tomcat–>lib–>servlet-api.jar,導(dǎo)入jar包后問(wèn)題得以解決。
servlet類
servlet的一般有四個(gè)步驟:這四個(gè)步驟對(duì)于我來(lái)說(shuō)很實(shí)用,每次都會(huì)按照這個(gè)思路進(jìn)行編寫(xiě)代碼
- 設(shè)置編碼方式
- 獲取參數(shù)
- 處理數(shù)據(jù)
- 響應(yīng)結(jié)果
web.xml配置
<servlet> <!--給servlet命名--> <servlet-name>login</servlet-name> <!--servlet的類名--> <servlet-class>action.LoginServlet</servlet-class> </servlet> <servlet-mapping> <!--使用servlet的名字, 通過(guò)這個(gè)名字,找到servlet對(duì)應(yīng)的類--> <servlet-name>login</servlet-name> <!--servlet對(duì)應(yīng)的url地址 , 通過(guò)在瀏覽器中使用這個(gè)地址 ① 瀏覽器地址欄輸入這個(gè)地址 ② form的action , 表單提交使用 ③ 超鏈接中使用 --> <url-pattern>/login</url-pattern> </servlet-mapping>servlet的執(zhí)行方式
- 1.建立連接(ip:port):首先瀏覽器里面的通信模塊先跟服務(wù)器的通信模塊建立連接
- 2.發(fā)送請(qǐng)求(請(qǐng)求數(shù)據(jù)包):是瀏覽器發(fā)請(qǐng)求給服務(wù)器的通信模塊
- 3.tomcat解析請(qǐng)求數(shù)據(jù)包。將請(qǐng)求的參數(shù)保存在request對(duì)象中,創(chuàng)建一個(gè)response對(duì)象。
- 4.tomcat容器創(chuàng)建servlet對(duì)象
- 5.調(diào)用service方法即service(request,response)
- 6.將響應(yīng)數(shù)據(jù)打包
- 7.響應(yīng)結(jié)果(響應(yīng)數(shù)據(jù)包)
- 8.瀏覽器,解析響應(yīng)結(jié)果,渲染到網(wǎng)頁(yè)中
- 9.關(guān)閉連接
瀏覽器的緩存方式
-
服務(wù)器端:分為靜態(tài)內(nèi)容和動(dòng)態(tài)內(nèi)容
-
瀏覽器端:給定一個(gè)url地址,如果是靜態(tài)內(nèi)容就找緩存,緩存有就不再訪問(wèn)服務(wù)器了,目的是為了減少和服務(wù)器的交互。如果不希望訪問(wèn)緩存的內(nèi)容,那么每次訪問(wèn)的時(shí)候就給url地址帶不同的參數(shù)。如果是動(dòng)態(tài)內(nèi)容,就訪問(wèn)服務(wù)器。
jsp
jsp是一種運(yùn)行在服務(wù)器端的頁(yè)面, 它里面包含html, 嵌入一些java語(yǔ)言, 在服務(wù)器(tomcat)上經(jīng)過(guò)解析轉(zhuǎn)換, 輸出為html頁(yè)面。
jsp不需要配置,直接用他的路徑和文件名進(jìn)行訪問(wèn),jsp的本質(zhì)還是servlet。
轉(zhuǎn)發(fā)和重定向
轉(zhuǎn)發(fā)的就是一個(gè)請(qǐng)求處理了一部分功能,然后開(kāi)始另一個(gè)請(qǐng)求處理剩下的功能,其本質(zhì)就是一個(gè)請(qǐng)求。轉(zhuǎn)發(fā)是共享request,response對(duì)象 ,因此可以把需要轉(zhuǎn)發(fā)的數(shù)據(jù)保存在request對(duì)象中。瀏覽器的地址欄地址保存不變。(顯示第一個(gè)請(qǐng)求的地址)
一下是轉(zhuǎn)發(fā)的代碼:
// 3. 轉(zhuǎn)發(fā)到show.jsp // **** 轉(zhuǎn)發(fā)的目的是把數(shù)據(jù)傳輸?shù)絡(luò)sp頁(yè)面上,讓jsp頁(yè)面可以使用 req.setAttribute("emp" , emp); req.setAttribute("emps" , emps); req.setAttribute("nowtime" , nowTime); req.setAttribute("age" , age); req.setAttribute("emp1" , emp1); req.setAttribute("age1" , age1); RequestDispatcher requestDispatcher = req.getRequestDispatcher("show.jsp"); requestDispatcher.forward(req,resp);重定向是一個(gè)請(qǐng)求的功能完成了,然后開(kāi)啟另一個(gè)請(qǐng)求,做另一個(gè)功能。 本質(zhì)是兩個(gè)請(qǐng)求。(第一個(gè)請(qǐng)求是我們主動(dòng)發(fā)的, 第二個(gè)請(qǐng)求是瀏覽器收到302代碼和重定向的url地址, 然后瀏覽器主動(dòng)發(fā)送的請(qǐng)求。)重定向因?yàn)槭莾蓚€(gè)不同的請(qǐng)求,所以是兩個(gè)不同的request對(duì)象,因此不能共享數(shù)據(jù)。
瀏覽器地址欄的地址是顯示重定向的地址。(顯示第二個(gè)請(qǐng)求的地址)
resp.sendRedirect("show.jsp"); // 重定向el表達(dá)式
jsp頁(yè)面上,用于方便的獲取到轉(zhuǎn)發(fā)到j(luò)sp頁(yè)面上的數(shù)據(jù)的一種表達(dá)式語(yǔ)言。
語(yǔ)法規(guī)則: ${變量} , ${對(duì)象.屬性}
cookie
-
cookie:用于保存客戶端的狀態(tài)的計(jì)數(shù)。 當(dāng)我們有多次請(qǐng)求的時(shí)候,這個(gè)多次請(qǐng)求被看做一個(gè)整體,這個(gè)整體中有些數(shù)據(jù)需要保存的時(shí)候,可以使用cookie,把數(shù)據(jù)保存在瀏覽器中。
-
cookie的使用方式
- 服務(wù)器端代碼中,創(chuàng)建cookie對(duì)象,在response中添加cookie
- 客戶端訪問(wèn)服務(wù)器的時(shí)候,會(huì)將把當(dāng)前訪問(wèn)路徑有關(guān)的cookie發(fā)送到服務(wù)器端
- 服務(wù)器端可以在request中獲取到cookie數(shù)據(jù),然后對(duì)這些數(shù)據(jù)進(jìn)行使用
- 瀏覽器可以設(shè)置禁用cookie,或者用戶可以刪除cookie數(shù)據(jù),用戶可以查看到cookie數(shù)據(jù),所以重要數(shù)據(jù)不能直接保存在cookie中。
- cookie中存儲(chǔ)的是string , 并且存儲(chǔ)的數(shù)據(jù)大小也有限。
- cookie 可以設(shè)置有效期,過(guò)期之后,cookie會(huì)被瀏覽器清除掉。
session
session中保存數(shù)據(jù):
getSession(): 規(guī)則就是如果有就根據(jù)sessionid獲取session對(duì)象,如果沒(méi)有就直接創(chuàng)建一個(gè)session對(duì)象。
getSession(boolean) : true, 同getSession()功能, false , 如果找不到session對(duì)象,就返回null.
// **** 登錄成功的位置 HttpSession session = req.getSession(); // 獲取session對(duì)象 session.setAttribute("loginname" , name); // 把數(shù)據(jù)保存在session對(duì) 象中session中獲取數(shù)據(jù)
// 獲取session中的數(shù)據(jù): 返回值是Object Object loginname = session.getAttribute("loginname");session中刪除數(shù)據(jù)
// 刪除session中的數(shù)據(jù): session.removeAttribute("loginname");session默認(rèn)在會(huì)話期間有效
**發(fā)請(qǐng)求(和服務(wù)器開(kāi)始會(huì)話):**服務(wù)器會(huì)創(chuàng)建一個(gè)session對(duì)象,然后瀏覽器中保存這個(gè)session對(duì)象的sessionid(cookie:jsession)
**會(huì)話期間:**session中的數(shù)據(jù),所有請(qǐng)求都可以共享;request對(duì)象是每一次請(qǐng)求,都是一個(gè)單獨(dú)的新的對(duì)象,所以request不能共享數(shù)據(jù)。可以通過(guò)request對(duì)象的轉(zhuǎn)發(fā),來(lái)實(shí)現(xiàn)request中的數(shù)據(jù)共享。(servlet轉(zhuǎn)發(fā)到對(duì)應(yīng)的jsp)
**關(guān)閉瀏覽器:**關(guān)閉瀏覽器的時(shí)候cookie保存的session就消失了,session對(duì)象就無(wú)效了,會(huì)話結(jié)束。
**session會(huì)話超時(shí):**可以設(shè)置session的有效期,如果沒(méi)有設(shè)置session的有效期,默認(rèn)的有效期是30分鐘。
// 設(shè)置session的有效期 // setMaxInactiveInterval(秒) session.setMaxInactiveInterval(60);設(shè)置session無(wú)效:一般在退出系統(tǒng)的時(shí)候,需要清空session中保存的數(shù)據(jù),使用invalidate方法,讓session失效。
// 設(shè)置session無(wú)效 session.invalidate();cookie和session的區(qū)別
cookie:客戶端狀態(tài)管理的jis
session:服務(wù)器端狀態(tài)管理技術(shù)
過(guò)濾器(Filter)
過(guò)濾器類型:過(guò)濾器是sun提供一個(gè)組件, 需要依賴于tomcat容器運(yùn)行。
**過(guò)濾器的執(zhí)行過(guò)程:**訪問(wèn)請(qǐng)求的時(shí)候,先根據(jù)過(guò)濾器的配置,符號(hào)過(guò)濾器路徑的請(qǐng)求,則先進(jìn)入到過(guò)濾器中執(zhí)行,執(zhí)行結(jié)束之后,再根據(jù)情況,看是否需要進(jìn)入到ervle中。
學(xué)習(xí)總結(jié)
在本階段的學(xué)習(xí)中,可以由一下一句話概括"一講就懂,一點(diǎn)就通,一做就廢",其實(shí)由剛開(kāi)始學(xué)習(xí)Java的焦慮和不解已經(jīng)在慢慢的試著去解決和適應(yīng)了,以前遇到不會(huì)的問(wèn)題不知道如何下手解決,慢慢的跟著老師的步伐就已經(jīng)開(kāi)始學(xué)會(huì)"找錯(cuò)"了,在課堂上和平時(shí)如果遇到由bug我會(huì)先試著調(diào)試自己解決,實(shí)在不會(huì)的我會(huì)再問(wèn)老師和同學(xué),在這一點(diǎn)上我感覺(jué)剛開(kāi)始學(xué)習(xí)有點(diǎn)進(jìn)步。還有就是最先開(kāi)始接觸Java代碼時(shí)我心里有點(diǎn)抵觸,在后面老師和同學(xué)的幫助下我已經(jīng)調(diào)整了心態(tài),也漸漸的愛(ài)上了敲代碼,特別是在解決錯(cuò)誤成功的喜悅。
總結(jié)
以上是生活随笔為你收集整理的java web知识总结——【华清远见】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 华夏ERP在虚拟机Ubuntu上的安装(
- 下一篇: html 字段唯一性校验,使用Model