1. 程式人生 > >公司內部傳遞的Java技術問答集錦

公司內部傳遞的Java技術問答集錦

enter url html 另一個 sql 打開 patch head 銷毀

1 說出Servlet的生命周期,並說出Servlet和CGI的區別

Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。

與CGI的區別在於Servlet處於服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務於多個請求,並且其實例一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成後就銷毀,所以效率上低於servlet。

2 forward 和redirect的區別

forward是服務器內部請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。

redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數重新請求,所以session,request參數都可以獲取。

3 JSP中動態INCLUDE與靜態INCLUDE的區別
技術分享圖片
公司內部傳遞的Java技術問答集錦

動態INCLUDE用jsp:include動作實現 <jsp:include page="included.jsp" flush="true" />它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數。

靜態INCLUDE用include偽碼實現,不會檢查所含文件的變化,適用於包含靜態頁面<%@ include file="included.htm" %>

4 JSP的內置對象及方法

request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,並且提供了幾個用於獲取cookie, header, 和session數據的有用的方法。

response表示HttpServletResponse對象,並提供了幾個用於設置送回瀏覽器的響應的方法(如cookies,頭信息等)。

out對象是javax.jsp.JspWriter的一個實例,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。

pageContext表示一個javax.servlet.jsp.PageContext對象。它是用於方便存取各種範圍的名字空間、servlet相關的對象的API,並且包裝了通用的servlet相關功能的方法。

session表示一個請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態信息。

applicaton 表示一個javax.servle.ServletContext對象。這有助於查找有關servlet引擎和servlet環境的信息。

config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。

page表示從該頁面產生的一個servlet實例。

5 JSP的常用指令

<%@page language=”java” contenType=”text/html;charset=gb2312” session=”true” buffer=”64kb” autoFlush=”true” isThreadSafe=”true” info=”text” errorPage=”error.jsp” isErrorPage=”true” isELIgnored=”true” pageEncoding=”gb2312” import=”java.sql.*”%>
isErrorPage(是否能使用Exception對象),isELIgnored(是否忽略表達式)

<%@include file=”filename”%>
<%@taglib prefix=”c”uri=”http://……”%>
6 什麽情況下調用doGet()和doPost()?

Jsp頁面中的form標簽裏的method屬性為get時調用doGet(),為post時調用doPost()。

7 如何現實servlet的單線程模式

<%@ page isThreadSafe=”false”%>

8 頁面間對象傳遞的方法

request,session,application,cookie等

9 JSP和Servlet有哪些相同點和不同點,他們之間的聯系是什麽?

JSP 是Servlet技術的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯後是"類servlet"。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML裏分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。

10 四種會話跟蹤技術

page是代表與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面。

request是代表與 Web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 組件(由於 forward 指令和 include 動作的關系)。

session是代表與用於某個 Web 客戶機的一個用戶體驗相關的對象和屬性。一個 Web 會話可以也經常會跨越多個客戶機請求。

application是代表與整個 Web 應用程序相關的對象和屬性。這實質上是跨越整個 Web 應用程序,包括多個頁面、請求和會話的一個全局作用域。

11 Request對象的主要方法

setAttribute(String name,Object):設置名字為name的request的參數值

getAttribute(String name):返回由name指定的屬性值

getAttributeNames():返回request對象所有屬性的名字集合,結果是一個枚舉的實例

getCookies():返回客戶端的所有Cookie對象,結果是一個Cookie數組

getCharacterEncoding():返回請求中的字符編碼方式

getContentLength():返回請求的Body的長度

getHeader(String name):獲得HTTP協議定義的文件頭信息

getHeaders(String name):返回指定名字的request Header的所有值,結果是一個枚舉的實例

getHeaderNames():返回所以request Header的名字,結果是一個枚舉的實例

getInputStream():返回請求的輸入流,用於獲得請求中的數據

getMethod():獲得客戶端向服務器端傳送數據的方法

getParameter(String name):獲得客戶端傳送給服務器端的有name指定的參數值

getParameterNames():獲得客戶端傳送給服務器端的所有參數的名字,結果是一個枚舉的實例

getParameterValues(String name):獲得有name指定的參數的所有值

getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱

getQueryString():獲得查詢字符串

getRequestURI():獲取發出請求字符串的客戶端地址

getRemoteAddr():獲取客戶端的IP地址

getRemoteHost():獲取客戶端的名字

getSession([Boolean create]):返回和請求相關Session

getServerName():獲取服務器的名字

getServletPath():獲取客戶端所請求的腳本文件的路徑

getServerPort():獲取服務器的端口號

removeAttribute(String name):刪除請求中的一個屬性

12 J2EE是技術還是平臺還是框架?

J2EE本身是一個標準,一個為企業分布式應用的開發提供的標準平臺。J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。

J2EE是一套全然不同於傳統應用開發的技術架構,包含許多組件,主要可簡化且規範應用系統的開發與部署,進而提高可移植性、安全與再用價值,其核心是一組技術規範與指南,其中所包含的各類組件、服務架構及技術層次,均有共通的標準及規格,讓各種依循J2EE架構的不同平臺之間,存在良好的兼容性,解決過去企業後端使用的信息產品彼此之間無法兼容,導致企業內部或外部難以互通的窘境。

13 Servlet執行時一般實現哪幾個方法?

public void init(ServletConfig config) public ServletConfig getServletConfig() public String getServletInfo() public void service(ServletRequest request,ServletResponse response) public void destroy()
14 請對以下在J2EE中常用的名詞進行解釋(或簡單描述)

Web容器: 給處於其中的應用程序組件(JSP,SERVLET)提供一個環境,使JSP,SERVLET直接更容器中的環境變量接×××互,不必關註其它系統問題。主 要有WEB服務器來實現。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴格遵守J2EE規範中的WEB APPLICATION 標準。我們把遵守以上標準的WEB服務器就叫做J2EE中的WEB容器。

EJB容器:Enterprise java bean 容器。更具有行業領域特色。他提供給運行在其中的組件EJB各種管理功能。只要滿足J2EE規範的EJB放入該容器,馬上就會被容器進行高效率的管理。並且可以通過現成的接口來獲得系統級別的服務。例如郵件服務、事務管理。

JNDI:(Java Naming & Directory Interface)JAVA命名目錄服務。主要提供的功能是:提供一個目錄系統,讓其它各地的應用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應用程序的功能。

JMS:(Java Message Service)JAVA消息服務。主要實現各個應用程序之間的通訊。包括點對點和廣播。

JTA:(Java Transaction API)JAVA事務服務。提供各種分布式事務服務。應用程序只需調用其提供的接口即可。

JAF:(Java Action FrameWork)JAVA安全認證框架。提供一些安全控制方面的框架。讓開發者通過各種部署和自定義實現自己的個性安全控制策略。

RMI/IOP: (Remote Method Invocation /internet對象請求中介協議)他們主要用於通過遠程調用服務。例如,遠程有一臺計算機上運行一個程序,它提供股票分析服務,我們可以在本地計算機 上實現對其直接調用。當然這是要通過一定的規範才能在異構的系統之間進行通信。RMI是JAVA特有的。

15 MVC的各個部分都有那些技術來實現?如何實現?

MVC 是Model-View-Controller的簡寫。"Model" 代表的是應用的業務邏輯(通過JavaBean,EJB組件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重 用。

16 jsp有哪些動作?作用分別是什麽?

JSP 共有以下6種基本動作:

jsp:include:在頁面被請求的時候引入一個文件。
jsp:useBean:尋找或者實例化一個JavaBean。
jsp:setProperty:設置JavaBean的屬性。
jsp:getProperty:輸出某個JavaBean的屬性。
jsp:forward:把請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型為Java插件生成OBJECT或EMBED標記。
17 Cookie與Session的區別與聯系

Cookie機制采用的是在客戶端保持狀態的方案,而session機制采用的是在服務器端保持狀態的方案。

Cookie機制:正統的Cookie分發是通過 擴展HTTP協議來實現的,服務器通過 在HTTP的響應頭中加上一行特殊的指示 以提示瀏覽器按照指示生成相應的Cookie。然而純粹的客戶端腳本如JavaScript或者VBScript也可以生成Cookie。而Cookie的使用是由瀏覽器按照一定的原則在後臺自動發送給服務器的。瀏覽器檢查所有存儲的Cookie,如果某個Cookie所聲明的作用範圍大於等於將要請求的資源所在的位置,則把該Cookie附在請求資源的HTTP請求頭上發送給服務器。

Cookie的內容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成Cookie的作用範圍。若不設置過期時間,則表示這個Cookie的生命期為瀏覽器會話期間,關閉瀏覽器窗口,Cookie就消失。這種生命期為瀏覽器會話期的Cookie被稱為會話Cookie。

會話Cookie一般不存儲在硬盤上而是保存在內存裏,當然這種行為並不是規範規定的。若設置了過期時間,瀏覽器就會把Cookie保存到硬盤上,關閉後再次打開瀏覽器,這些Cookie 仍然有效直到超過設定的過期時間。存儲在硬盤上的Cookie 可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存裏的Cookie ,不同的瀏覽器有不同的處理方式 。

Session機制:session機制是一種服務器端的機制,服務器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。

具有1-5工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的可以加群。在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加群。如果沒有工作經驗,但基礎非常紮實,對java工作機制,常用設計思想,常用java開發框架掌握熟練的可以加群。java架構群:591240817 一起交流。

當程序需要為某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識(稱為session id),如果已包含則說明以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。保存這個session id的方式可以采用Cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給服務器。一般這個cookie的名字都是類似於SEEESIONID。但Cookie 可以被人為的禁止,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞回服務器。

經常被使用的一種技術叫做 URL重寫,就是把session id直接附加在URL路徑的後面。

還有一種技術叫做 表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞回服務器。比如:

<form name="testform" action="/xxx"> <input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> <input type="text"> </form>
實際上這種技術可以簡單的用對action應用URL重寫來代替。

Cookie 和Session 的區別:

cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,考慮到安全應當使用session。
session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,考慮到減輕服務器性能方面,應當使用 COOKIE。
單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能3K。
18 JSP的內置對象與作用

JSP共有以下9種基本內置組件(可與ASP的6種內部組件相對應):

request用戶端請求,此請求會包含來自GET/POST請求的參數
response 網頁傳回用戶端的回應
pageContext 網頁的屬性是在這裏管理
session 與請求有關的會話期
application servlet 正在執行的內容
out 用來傳送回應的輸出
config servlet的構架部件
page JSP網頁本身
exception 針對錯誤網頁,未捕捉的例外
19 jsp的兩種跳轉方式分別是什麽,有什麽區別?

帶request參數的跳轉
request.setAttribute("param", "value"); request.getRequestDispatcher("test.jsp").forward(request, response);
在目的頁面可以獲取參數:
String Value = request.getAttribute("param")==null?:(String)request.getAttribute("param");
不帶request參數的跳轉
response.sendredirect("test.jsp");
20 forward和redirect的區別

forward 是服務器內部重定向,程序收到請求後重新定向到另一個程序,客戶機並不知道;

redirect則是服務器收到請求後發送一個狀態頭給客戶,客戶將再請求一 次,這裏多了兩次網絡通信的來往。當然forward也有缺點,就是forward的頁面的路徑如果是相對路徑就會有些問題了。

forward 會將 request state , bean 等等信息帶往下一個 jsp。 redirect 是送到 client 端後再一次 request , 所以資料不被保留。
使用 forward 你就可以用 getAttribute() 來取的前一個 jsp 所放入的 bean 等資料

從地址欄顯示來說
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,所以它的地址欄還是原來的地址.
redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.所以redirect等於客戶端向服務器端發出兩次request,同時也接受兩次response。
從數據共享來說
forward:轉發頁面和轉發到的頁面可以共享request裏面的數據. redirect:不能共享數據.redirect不僅可以重定向到當前應用程序的其他資源,還可以重定向到同一個站點上的其他應用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源. forward,方法只能在同一個Web應用程序內的資源之間轉發請求. forward 是服務器內部的一種操作. redirect 是服務器通知客戶端,讓客戶端重新發起請求. 所以,你可以說 redirect 是一種間接的請求, 但是你不能說"一個請求是屬於forward還是redirect "。
從運用地方來說
forward:一般用於用戶登陸的時候,根據角色轉發到相應的模塊. redirect:一般用於用戶註銷登陸時返回主頁面和跳轉到其它的網站等.
從效率來說
forward:高. redirect:低.
21 描述JSP和Servlet的區別、共同點、各自應用的範圍

JSP在本質上就是SERVLET,但是兩者的創建方式不一樣.Servlet完全是JAVA程序代碼構成擅長於流程控制和事務處理而通過Servlet來生成動態網頁;JSP由HTML代碼和JSP標簽構成,可以方便地編寫動態網頁,因此在實際應用中采用Servlet來控制業務流程,而采用JSP來生成動態網頁.在struts框架中,JSP位於MVC設計模式的視圖層,而Servlet位於控制層.

22 列出Jsp中包含外部文件的2種方式,兩者有何區別。

<jsp:include page="b.jsp" />
<%@ include file="b.jsp" />
區別:

<jsp:include page="b.jsp" />(先執行,後包含)
此標簽表示法:能動態區別加進來的是動態頁面還是靜態頁面對於靜態頁面則直接將資源包含(僅取其文本)。
<%@ include file="b.jsp">此指令表示:靜態地包含頁面,不管其內容如何,不過是靜態頁面還是動態頁面都首先將頁面的內容先加進來。
<jsp:include page="b.jsp" />可以傳遞參數,如下:
<jsp:include page="b.jsp" > <jsp:param name="參數名" value="參數值"/> </jsp:include>
23 Jsp和Servlet中的請求轉發分別如何實現

servlet的轉發方式有兩種:

response.sendRedirect(response.encodeURL(相對路徑或絕對路徑)); request.getRequestDispatcher(相對路徑).forward();
jsp是servlet的擴展,除可用上面兩種之外,還可以用標簽:

<jsp:forward page="相對路徑" />

公司內部傳遞的Java技術問答集錦