日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA WEB部分易混淆问题总结

發(fā)布時(shí)間:2025/4/16 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA WEB部分易混淆问题总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

前言???

????最近在看了一些java基礎(chǔ)問題,順便將這段時(shí)間看到的容易混淆和已忘記的問題進(jìn)行整理總結(jié)一下.

接下來會(huì)再寫一些數(shù)據(jù)庫方面易混淆或者不常用易忘記的問題梳理

??? 上一篇是java基礎(chǔ)方面易混淆問題總結(jié):? https://my.oschina.net/u/2342969/blog/1631422

問題列表

??? 1、servlet中forward()與redirect()的區(qū)別

???????? forward是服務(wù)源,服務(wù)器直接訪問標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容來,然后把些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)發(fā)送的內(nèi)容是從哪兒來的,所以它的地址還是原來的地址。更加高效,它可以滿足需要時(shí),盡量使用forward()方法,這樣也有助于隱藏實(shí)際的鏈接。
????????redirect就是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,訴瀏覽器重新去求那個(gè)地址,一般來說瀏覽器會(huì)用求的所有參數(shù)重新請求,但是在需要跳轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源,必須使用此方法

??? 2、Request對象的主要方法

????????setAttribute(String name,Object):設(shè)置名字為name的request的參數(shù)值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request對象所有屬性的名字集合,結(jié)果是一個(gè)枚舉的實(shí)例
getCookies():返回客戶端的所有Cookie對象,結(jié)果是一個(gè)Cookie數(shù)組
getCharacterEncoding():返回請求中的字符編碼方式
getContentLength():返回請求的Body的長度
getHeader(String name):獲得HTTP協(xié)議定義的文件頭信息
getHeaders(String name):返回指定名字的request Header的所有值,結(jié)果是一個(gè)枚舉的實(shí)例
getHeaderNames():返回所以request Header的名字,結(jié)果是一個(gè)枚舉的實(shí)例
getInputStream():返回請求的輸入流,用于獲得請求中的數(shù)據(jù)
getMethod():獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法
getParameter(String name):獲得客戶端傳送給服務(wù)器端的有name指定的參數(shù)值
getParameterNames():獲得客戶端傳送給服務(wù)器端的所有參數(shù)的名字,結(jié)果是一個(gè)枚舉的實(shí)例
getParametervalues(String name):獲得有name指定的參數(shù)的所有值
getProtocol():獲取客戶端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱
getQueryString():獲得查詢字符串
getRequestURI():獲取發(fā)出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Boolean create]):返回和請求相關(guān)Session
getServerName():獲取服務(wù)器的名字
getServletPath():獲取客戶端所請求的腳本文件的路徑
getServerPort():獲取服務(wù)器的端口號
removeAttribute(String name):刪除請求中的一個(gè)屬性

??? 3、request.getAttribute()和 request.getParameter()有何區(qū)別?

????????getParameter得到的都是String類型的。或者是http://a.jsp?id=123中的123,或者是某個(gè)表單提交過去的數(shù)據(jù)。
getAttribute則可以是對象。
getParameter()是獲取POST/GET傳遞的參數(shù)值;
getAttribute()是獲取對象容器中的數(shù)據(jù)值;
getParameter:用于客戶端重定向時(shí),即點(diǎn)擊了鏈接或提交按扭時(shí)傳值用,即用于在用表單或url重定向傳值時(shí)接收數(shù)據(jù)用。
getAttribute:用于服務(wù)器端重定向時(shí),即在sevlet中使用了forward函數(shù),或struts中使用了mapping.findForward。getAttribute只能收到程序用setAttribute傳過來的值。
getParameter()是獲取POST/GET傳遞的參數(shù)值;
getAttribute()是獲取SESSION的值;
另外,可以用setAttribute,getAttribute發(fā)送接收對象.而getParameter顯然只能傳字符串。setAttribute是應(yīng)用服務(wù)器把這個(gè)對象放在該頁面所對應(yīng)的一塊內(nèi)存中去,當(dāng)你的頁面服務(wù)器重定向到另一個(gè)頁面時(shí),應(yīng)用服務(wù)器會(huì)把這塊內(nèi)存拷貝另一個(gè)頁面所對應(yīng)的內(nèi)存中。這樣getAttribute就能取得你所設(shè)下的值,當(dāng)然這種方法可以傳對象。session也一樣,只是對象在內(nèi)存中的生命周期不一樣而已。getParameter只是應(yīng)用服務(wù)器在分析你送上來的request頁面的文本時(shí),取得你設(shè)在表單或url重定向時(shí)的值。
getParameter返回的是String, 用于讀取提交的表單中的值;
getAttribute返回的是Object,需進(jìn)行轉(zhuǎn)換,可用setAttribute設(shè)置成任意對象,使用很靈活,可隨時(shí)用;

??? 4、jsp有哪些內(nèi)置對象?作用分別是什么?分別有什么方法?

????????JSP共有以下9個(gè)內(nèi)置的對象:
request 用戶端請求,此請求會(huì)包含來自GET/POST請求的參數(shù)
response 網(wǎng)頁傳回用戶端的回應(yīng)
pageContext 網(wǎng)頁的屬性是在這里管理
session 與請求有關(guān)的會(huì)話期
application servlet 正在執(zhí)行的內(nèi)容
out 用來傳送回應(yīng)的輸出
config servlet的構(gòu)架部件
page JSP網(wǎng)頁本身
exception 針對錯(cuò)誤網(wǎng)頁,未捕捉的例外
request表示HttpServletRequest對象。它包含了有關(guān)瀏覽器請求的信息,并且提供了幾個(gè)用于獲取cookie, header,和session數(shù)據(jù)的有用的方法。
response表示HttpServletResponse對象,并提供了幾個(gè)用于設(shè)置送回瀏覽器的響應(yīng)的方法(如cookies,頭信息等)
out對象是javax.jsp.JspWriter的一個(gè)實(shí)例,并提供了幾個(gè)方法使你能用于向?yàn)g覽器回送輸出結(jié)果。
pageContext表示一個(gè)javax.servlet.jsp.PageContext對象。它是用于方便存取各種范圍的名字空間、servlet相關(guān)的對象的API,并且包裝了通用的servlet相關(guān)功能的方法。
session表示一個(gè)請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態(tài)信息
applicaton 表示一個(gè)javax.servle.ServletContext對象。這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息
config表示一個(gè)javax.servlet.ServletConfig對象。該對象用于存取servlet實(shí)例的初始化參數(shù)。
page表示從該頁面產(chǎn)生的一個(gè)servlet實(shí)例

??? 5、注冊Jdbc驅(qū)動(dòng)程序的三種方式???????

????????1) Class.forName("com.mysql.jdbc.Driver");?? --> 推薦

????????2)DriverManager.registerDriver(new com.mysql.jdbc.Driver())

????????3) System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");?

????注釋:

?  第二種與第三種注冊的方法看起來更加的直接與好理解。第一種方法是通過Class把類先裝載到j(luò)ava的虛擬機(jī)中,并沒有創(chuàng)建Driver類的實(shí)例。

????第三種與第一種方法可以脫離jdbc的驅(qū)動(dòng)進(jìn)行編譯,第二種方法不可以的,它一定要有jdbc的驅(qū)動(dòng)才可以通過編譯,這樣對我們的程序就有很多的不好之處,為程序換數(shù)據(jù)庫會(huì)帶來麻煩

????第一種的好處在于能夠在編譯時(shí)不依賴于特定的JDBC?Driver庫,也就是減少了項(xiàng)目代碼的依賴性,而且也很容易改造成從配置文件讀取JDBC配置,從而可以在運(yùn)行時(shí)動(dòng)態(tài)更換數(shù)據(jù)庫連接驅(qū)動(dòng)。

??? 6、用JDBC如何調(diào)用存儲過程

??????? 前面注冊驅(qū)動(dòng)以及后面關(guān)閉資源等固定模式代碼就不貼了,直接貼核心代碼:

????????cstmt = cn.prepareCall("{callinsert_Student(?,?,?)}");
????????cstmt.registerOutParameter(3,Types.INTEGER);
????????cstmt.setString(1,"wangwu");
????????cstmt.setInt(2, 25);
????????cstmt.execute();

??? 7、JDBC中的PreparedStatement相比Statement的好處

??????? 1) PreparedStatement可以寫動(dòng)態(tài)參數(shù)化的查詢
????????用PreparedStatement你可以寫帶參數(shù)的sql查詢語句,通過使用相同的sql語句和不同的參數(shù)值來做查詢比創(chuàng)建一個(gè)不同的查詢語句要好

??????? 2) PreparedStatement比?Statement?更快
????????使用?PreparedStatement?最重要的一點(diǎn)好處是它擁有更佳的性能優(yōu)勢,SQL語句會(huì)預(yù)編譯在數(shù)據(jù)庫系統(tǒng)中。執(zhí)行計(jì)劃同樣會(huì)被緩存起來,它允許數(shù)據(jù)庫做參數(shù)化查詢。使用預(yù)處理語句比普通的查詢更快,因?yàn)樗龅墓ぷ鞲?#xff08;數(shù)據(jù)庫對SQL語句的分析,編譯,優(yōu)化已經(jīng)在第一次查詢前完成了)。為了減少數(shù)據(jù)庫的負(fù)載,生產(chǎn)環(huán)境中的JDBC代碼你應(yīng)該總是使用PreparedStatement?。值得注意的一點(diǎn)是:為了獲得性能上的優(yōu)勢,應(yīng)該使用參數(shù)化sql查詢而不是字符串追加的方式。

??????? 3) PreparedStatement可以防止SQL注入式攻擊

??? 8、數(shù)據(jù)連接池的工作機(jī)制是什么?

????????J2EE服務(wù)器啟動(dòng)時(shí)會(huì)建立一定數(shù)量的池連接,并一直維持不少于此數(shù)目的池連接。客戶端程序需要連接時(shí),池驅(qū)動(dòng)程序會(huì)返回一個(gè)未使用的池連接并將其表記為忙。如果當(dāng)前沒有空閑連接,池驅(qū)動(dòng)程序就新建一定數(shù)量的連接,新建連接的數(shù)量有配置參數(shù)決定。當(dāng)使用的池連接調(diào)用完成后,池驅(qū)動(dòng)程序?qū)⒋诉B接表記為空閑,其他調(diào)用就可以使用這個(gè)連接。
????????實(shí)現(xiàn)方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正關(guān)連接,而是把它代理的Connection對象還回到連接池中。

轉(zhuǎn)載于:https://my.oschina.net/u/2342969/blog/1632435

總結(jié)

以上是生活随笔為你收集整理的JAVA WEB部分易混淆问题总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。