● 請問JAVA應用服務器都有那些?
考察點:服務器
參考回答:
BEA WebLogic Server,
IBM WebSphere Application Server,
Oracle9i Application Server
jBoss,
Tomcat
● 請問在什么情況下回使用assert?
考察點:JAVA 調試
參考回答:
assertion (斷言)在軟件開發中是一種常用的調試方式,很多開發語言中都支持這種機制。在實現中,assertion就是在程序中的一條語句,它對一個 boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值為true;如果該值為false,說明程序已經處於不正確的狀態下,系統將給出警告或退出。一般來說,assertion用於保證程序最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高性能,在軟件發布后,assertion檢查通常是關閉的。
● 1分鍾之內只能處理1000個請求,你怎么實現,手撕代碼?
考察點:tomcat
參考回答:
限流的幾種方法:計數器,滑動窗口、漏桶法、令牌桶
● 請問如何在鏈接里不輸入項目名稱的情況下啟動項目?
考察點:tomcat
參考回答:
可在taomcat配置虛擬目錄。
● 請說明一下JSP中的靜態包含和動態包含的有哪些區別?
考察點:JSP
參考回答:
靜態包含是通過JSP的include指令包含頁面,動態包含是通過JSP標准動作<jsp:forward>包含頁面。靜態包含是編譯時包含,如果包含的頁面不存在則會產生編譯錯誤,而且兩個頁面的"contentType"屬性應保持一致,因為兩個頁面會合二為一,只產生一個class文件,因此被包含頁面發生的變動再包含它的頁面更新前不會得到更新。動態包含是運行時包含,可以向被包含的頁面傳遞參數,包含頁面和被包含頁面是獨立的,會編譯出兩個class文件,如果被包含的頁面不存在,不會產生編譯錯誤,也不影響頁面其他部分的執行。
例如:<%-- 靜態包含 --%>
<%@ include file="..." %>
<%-- 動態包含 --%>
<jsp:include page="...">
<jsp:param name="..." value="..." />
</jsp:include>
● 請說一下表達式語言(EL)的隱式對象以及該對象的作用
考察點:EL
參考回答:
EL的隱式對象包括:pageContext、initParam(訪問上下文參數)、param(訪問請求參數)、paramValues、header(訪問請求頭)、headerValues、cookie(訪問cookie)、applicationScope(訪問application作用域)、sessionScope(訪問session作用域)、requestScope(訪問request作用域)、pageScope(訪問page作用域)。
● 請談一談JSP有哪些內置對象?以及這些對象的作用分別是什么?
考察點:JSP
參考回答:
JSP有9個內置對象:
- request:封裝客戶端的請求,其中包含來自GET或POST請求的參數;
- response:封裝服務器對客戶端的響應;
- pageContext:通過該對象可以獲取其他對象;
- session:封裝用戶會話的對象;
- application:封裝服務器運行環境的對象;
- out:輸出服務器響應的輸出流對象;
- config:Web應用的配置對象;
- page:JSP頁面本身(相當於Java程序中的this);
- exception:封裝頁面拋出異常的對象。
如果用Servlet來生成網頁中的動態內容無疑是非常繁瑣的工作,另一方面,所有的文本和HTML標簽都是硬編碼,即使做出微小的修改,都需要進行重新編譯。JSP解決了Servlet的這些問題,它是Servlet很好的補充,可以專門用作為用戶呈現視圖(View),而Servlet作為控制器(Controller)專門負責處理用戶請求並轉發或重定向到某個頁面。基於Java的Web開發很多都同時使用了Servlet和JSP。JSP頁面其實是一個Servlet,能夠運行Servlet的服務器(Servlet容器)通常也是JSP容器,可以提供JSP頁面的運行環境,Tomcat就是一個Servlet/JSP容器。第一次請求一個JSP頁面時,Servlet/JSP容器首先將JSP頁面轉換成一個JSP頁面的實現類,這是一個實現了JspPage接口或其子接口HttpJspPage的Java類。JspPage接口是Servlet的子接口,因此每個JSP頁面都是一個Servlet。轉換成功后,容器會編譯Servlet類,之后容器加載和實例化Java字節碼,並執行它通常對Servlet所做的生命周期操作。對同一個JSP頁面的后續請求,容器會查看這個JSP頁面是否被修改過,如果修改過就會重新轉換並重新編譯並執行。如果沒有則執行內存中已經存在的Servlet實例。
● 說說weblogic中一個Domain的缺省目錄結構?比如要將一個簡單的helloWorld.jsp放入何目錄下,然后在瀏覽器上就可打入主機?
考察點:目錄結構
參考回答:
端口號//helloword.jsp就可以看到運行結果了? 又比如這其中用到了一個自己寫的javaBean該如何辦?
Domain 目錄服務器目錄applications,將應用目錄放在此目錄下將可以作為應用訪問,如果是Web應用,應用目錄需要滿足Web應用目錄要求,jsp文件可以直接放在應用目錄中,Javabean需要放在應用目錄的WEB-INF目錄的classes目錄中,設置服務器的缺省應用將可以實現在瀏覽器上無需輸入應用名。
● 請說明一下jsp有哪些動作? 這些動作的作用又分別是什么?
考察點:JSP
參考回答:
JSP 共有以下6種基本動作 jsp:include:在頁面被請求的時候引入一個文件。 jsp:useBean:尋找或者實例化一個JavaBean。
jsp:setProperty:設置JavaBean的屬性。 jsp:getProperty:輸出某個JavaBean的屬性。 jsp:forward:把請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型為Java插件生成OBJECT或EMBED標記。
● 請詳細說明一下Request對象的主要方法是什么?
考察點: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):刪除請求中的一個屬性
● 請簡要說明一下四種會話跟蹤技術分別是什么?
考察點:JSP
參考回答:
會話作用域ServletsJSP 頁面描述
page否是代表與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面request是是代表與 Web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 組件(由於forward 指令和 include 動作的關系)session是是代表與用於某個 Web 客戶機的一個用戶體驗相關的對象和屬性。一個 Web 會話可以也經常會跨越多個客戶機請求application是是代表與整個 Web 應用程序相關的對象和屬性。這實質上是跨越整個 Web 應用程序,包括多個頁面、請求和會話的一個全局作用域。
● 請簡要說明一下JSP和Servlet有哪些相同點和不同點?另外他們之間的聯系又是什么呢?
考察點:JSP
參考回答:
JSP 是Servlet技術的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯后是”類servlet”。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯
● 請說明一下JSP的內置對象以及該對象的使用方法。
考察點:JAVA對象
參考回答:
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實例
● 請說明一下web.xml文件中可以配置哪些內容?
考察點:xml文件
參考回答:
web.xml用於配置Web應用的相關信息,如:監聽器(listener)、過濾器(filter)、 Servlet、相關參數、會話超時時間、安全驗證方式、錯誤頁面等,下面是一些開發中常見的配置:
①配置Spring上下文加載監聽器加載Spring配置文件並創建IoC容器:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
②配置Spring的OpenSessionInView過濾器來解決延遲加載和Hibernate會話關閉的矛盾:
<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
③配置會話超時時間為10分鍾:
<session-config>
<session-timeout>10</session-timeout>
</session-config>
④配置404和Exception的錯誤頁面:
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
⑤配置安全認證方式:
<security-constraint>
<web-resource-collection>
<web-resource-name>ProtectedArea</web-resource-name>
<url-pattern>/admin/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<security-role>
<role-name>admin</role-name>
</security-role>
● 請談談你對Javaweb開發中的監聽器的理解?
考察點:監聽器
參考回答:
Java Web開發中的監聽器(listener)就是application、session、request三個對象創建、銷毀或者往其中添加修改刪除屬性時自動執行代碼的功能組件,如下所示:
①ServletContextListener:對Servlet上下文的創建和銷毀進行監聽。
②ServletContextAttributeListener:監聽Servlet上下文屬性的添加、刪除和替換。
③HttpSessionListener:對Session的創建和銷毀進行監聽。
session的銷毀有兩種情況:1). session超時(可以在web.xml中通過<session-config>/<session-timeout>標簽配置超時時間);2). 通過調用session對象的invalidate()方法使session失效。
④HttpSessionAttributeListener:對Session對象中屬性的添加、刪除和替換進行監聽。
⑤ServletRequestListener:對請求對象的初始化和銷毀進行監聽。
⑥ServletRequestAttributeListener:對請求對象屬性的添加、刪除和替換進行監聽。
● 請問過濾器有哪些作用?以及過濾器的用法又是什么呢?
考察點:過濾器
參考回答:
Java Web開發中的過濾器(filter)是從Servlet 2.3規范開始增加的功能,並在Servlet 2.4規范中得到增強。對Web應用來說,過濾器是一個駐留在服務器端的Web組件,它可以截取客戶端和服務器之間的請求與響應信息,並對這些信息進行過濾。當Web容器接受到一個對資源的請求時,它將判斷是否有過濾器與這個資源相關聯。如果有,那么容器將把請求交給過濾器進行處理。在過濾器中,你可以改變請求的內容,或者重新設置請求的報頭信息,然后再將請求發送給目標資源。當目標資源對請求作出響應時候,容器同樣會將響應先轉發給過濾器,在過濾器中你可以對響應的內容進行轉換,然后再將響應發送到客戶端。
常見的過濾器用途主要包括:對用戶請求進行統一認證、對用戶的訪問請求進行記錄和審核、對用戶發送的數據進行過濾或替換、轉換圖象格式、對響應內容進行壓縮以減少傳輸量、對請求或響應進行加解密處理、觸發資源訪問事件、對XML的輸出應用XSLT等。
和過濾器相關的接口主要有:Filter、FilterConfig和FilterChain。