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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jsp与Servlet面试题

發布時間:2023/12/20 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jsp与Servlet面试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、、jsp有哪些內置對象作用分別是什么
答:JSP共有以下9種基本內置組件(可與ASP的6種內部組件相對應):
  request 用戶端請求,此請求會包含來自GET/POST請求的參數
response 網頁傳回服務器端的回應
pageContext 網頁的屬性是在這里管理
session 與請求有關的會話期
application : 服務器啟動時創建,服務器關閉時停止,為多個應用程序保存信息
out 用來傳送回應的輸出
config servlet的構架部件
page JSP網頁本身
exception 針對錯誤網頁,未捕捉的例外

二、jsp有哪些動作作用分別是什么
答:JSP共有以下6種基本動作
jsp:include:在頁面被請求的時候引入一個文件。
jsp:useBean:尋找或者實例化一個JavaBean。
jsp:setProperty:設置JavaBean的屬性。
jsp:getProperty:輸出某個JavaBean的屬性。
jsp:forward:把請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型為Java插件生成OBJECT或EMBED標記

三、JSP中動態INCLUDE與靜態INCLUDE的區別?
答:動態INCLUDE用jsp:include動作實現
它總是會檢查所含文件中的變化,適合用于包含動態頁面,并且可以帶參數
靜態INCLUDE用include偽碼實現,定不會檢查所含文件的變化,適用于包含靜態頁面

四、 Servlet生命周期
Servlet生命周期包括三部分:
初始化:Web容器加載servlet,調用init()方法
處理請求:當請求到達時,運行其service()方法。service()自動派遣運行與請求相對應的doXXX(doGet或者doPost)方法。
銷毀:服務結束,web容器會調用servlet的distroy()方法銷毀servlet。

五、get提交和post提交有何區別
(1)get一般用于從服務器上獲取數據,post一般用于向服務器傳送數據
(2)請求的時候參數的位置有區別,get的參數是拼接在url后面,用戶在瀏覽器地址欄可以看到。post是放在http包的包體中。
比如說用戶注冊,你不能把用戶提交的注冊信息用get的方式吧,那不是說把用戶的注冊信息都顯示在Url上了嗎,是不安全的。
(3)能提交的數據有區別,get方式能提交的數據只能是文本,且大小不超過1024個字節,而post不僅可以提交文本還有二進制文件。
所以說想上傳文件的話,那我們就需要使用post請求方式
(4)servlet在處理請求的時候分別對應使用doGet和doPost方式進行處理請求

六、JSP與Servlet有什么區別
Servlet是服務器端的程序,動態生成html頁面發送到客戶端,但是這樣程序里會有很多out.println(),Java與html語言混在一起很亂,所以后來sun公司推出了JSP.其實JSP就是Servlet,每次運行的時候JSP都首先被編譯成servlet文件,然后再被編譯成.class文件運行。有了jsp,在MVC項目中servlet不再負責動態生成頁面,轉而去負責控制程序邏輯的作用,控制jsp與javabean之間的流轉。

七、doGet與doPost方法的兩個參數是什么
HttpServletRequest:封裝了與請求相關的信息
HttpServletResponse:封裝了與響應相關的信息

八、request.getAttribute()和request.getParameter
(1)有setAttribute,沒有setParameter方法
(2)getParameter獲取到的值只能是字符串,不可以是對象,而getAttribute獲取到的值是Object類型的。
(3)通過form表單或者url來向另一個頁面或者servlet傳遞參數的時候需要用getParameter獲取值;getAttribute只能獲取setAttribute的值
(4)setAttribute是應用服務器把這個對象放到該頁面所對應的一塊內存當中,當你的頁面服務器重定向到另一個頁面的時候,應用服務器
會把這塊內存拷貝到另一個頁面對應的內存當中。通過getAttribute可以取得你存下的值,當然這種方法可以用來傳對象。
用session也是一樣的道理,這是說request和session的生命周期不一樣而已。

九、四種會話跟蹤技術
會話作用域ServletsJSP 頁面描述
page:是代表與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面
request是是代表與 Web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 組件(由于 forward 指令和 include 動作的關系)
session是是代表與用于某個 Web 客戶機的一個用戶體驗相關的對象和屬性。一個 Web 會話可以也經常會跨越多個客戶機請求
application是是代表與整個 Web 應用程序相關的對象和屬性。這實質上是跨越整個 Web 應用程序,包括多個頁面、請求和會話的一個全局作用域
page:當前頁面,也就是只要跳到別的頁面就失效了
request:一次會話,簡單的理解就是一次請求范圍內有效
session:瀏覽器進程,只要當前頁面沒有被關閉(沒有被程序強制清除),不管怎么跳轉都是有效的
application:服務器,只要服務器沒有重啟(沒有被程序強制清除),數據就有效

十、forward和redirect的區別
轉發與重定向
(1)從地址欄顯示來說
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送
的內容從哪里來的,所以它的地址欄還是原來的地址.redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是
新的URL.
(2)從數據共享來說
forward:轉發頁面和轉發到的頁面可以共享request里面的數據.
redirect:不能共享數據.
(3)從運用地方來說
forward:一般用于用戶登陸的時候,根據角色轉發到相應的模塊.
redirect:一般用于用戶注銷登陸時返回主頁面和跳轉到其它的網站等.
(4)從效率來說
forward:高.
redirect:低.

十一、Servlet的線程安全問題:
實例變量不正確的使用是造成Servlet線程不安全的主要原因。

從Servlet的調用過程可以看出,當客戶端第一次請求Servlet的時候,tomcat會根據web.xml配置文件實例化servlet
當又有一個客戶端訪問該servlet的時候,不會再實例化該servlet,也就是多個線程在使用這個實例。

JSP/Servlet容器默認是采用單實例多線程(這是造成線程安全的主因)方式處理多個請求的,這種默認以多線程方式執行的設計可大大降低對系統的資源需求,提高系統的并發量及響應時間。

Servlet本身是無狀態的,一個無狀態的Servlet是絕對線程安全的,無狀態對象設計也是解決線程安全問題的一種有效手段。

所以,servlet是否線程安全是由它的實現來決定的,如果它內部的屬性或方法會被多個線程改變,它就是線程不安全的,反之,就是線程安全的。

如何控制Servlet的線程安全性?

避免使用實例變量
避免使用非線程安全的集合
在多個Servlet中對某個外部對象(例如文件)的修改是務必加鎖(Synchronized,或者ReentrantLock),互斥訪問。
屬性的線程安全:ServletContext、HttpSession是線程安全的;ServletRequest是非線程安全的。

設計線程安全的Servlet

1.實現 SingleThreadModel 接口
該接口指定了系統如何處理對同一個Servlet的調用。如果一個Servlet被這個接口指定,那么在這個Servlet中的service方法將不會有兩個線程被同時執行,當然也就不存在線程安全的問題。但是,如果一個Servlet實現了SingleThreadModel接口,Servlet引擎將為每個新的請求創建一個單獨的Servlet實例,這將引起大量的系統開銷,在現在的Servlet開發中基本看不到SingleThreadModel的使用,這種方式了解即可,盡量避免使用。

2.同步對共享數據的操作
使用synchronized 關鍵字能保證一次只有一個線程可以訪問被保護的區段,可以通過同步塊操作來保證Servlet的線程安全。如果在程序中使用同步來保護要使用的共享的數據,也會使系統的性能大大下降。這是因為被同步的代碼塊在同一時刻只能有一個線程執行它,使得其同時處理客戶請求的吞吐量降低,而且很多客戶處于阻塞狀態。另外為保證主存內容和線程的工作內存中的數據的一致性,要頻繁地刷新緩存,這也會大大地影響系統的性能。所以在實際的開發中也應避免或最小化Servlet 中的同步代碼。

3.避免使用實例變量
線程安全問題很大部分是由實例變量造成的,只要在Servlet里面的任何方法里面都不使用實例變量,那么該Servlet就是線程安全的。

在Servlet中避免使用實例變量是保證Servlet線程安全的最佳選擇。

Java 內存模型中,方法中的臨時變量是在棧上分配空間,而且每個線程都有自己私有的棧空間,所以它們不會影響線程的安全

總結

以上是生活随笔為你收集整理的Jsp与Servlet面试题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。