【Java面試】Servlet常見面試題!

六星_研鑫發表於2020-07-29
1:什麼是B/S和C/S

 Browser/Server瀏覽器/伺服器(瘦客戶端)     

 Custom/Server 客戶端/伺服器(胖客戶端)



點選免費獲取最新BATJ面試題,2020最新面試技巧和簡歷模板!


2:描述war包、jar包、ear包的結構

war-

--myweb

---WEB-INF

----web.xml

----lib

----classes

jar-

--myjar

---META-INF

----.MF

ear-

--META-INF

---Application.xml

--.war

 --.jar


3:什麼是servlet?servlet主要做什麼?

網路服務的請求和響應方式

透過WEB瀏覽器呼叫servlet的方法,主要是在服務端寫動態程式碼與伺服器端交流;


4:servlet 與cgi相比的優點?servlet的缺點

優點:

 效能(執行緒比程式更快)

 可伸縮

 Java強健且物件導向

 Java獨立的平臺

缺點:

   處理程式碼(業務邏輯)與HTML(表現邏輯)混合在一起


5:常用的servlet包的名稱是?

javax.servlet

javax.servlet.http


6:描述servlet介面的層次結構?

Servlet

--genericServlet

--HttpServlet

--自己的servlet

ServletRequest

ServletResponse


7:對比get方法和post方法?

get方法: 請求對伺服器沒有負面影響,Form資料量小,資料的內部應在url中可見; 明文傳輸,安全度低。

post方法:請求的資料過程改變伺服器的狀態,Form資料量大,資料的內部應在url中不可見,安全度高;


8:歸類描述HttpServletRequest介面都完成那些功能

1.讀取和寫入HTTP頭標 

2.取得和設定cookies

3.取得路徑資訊 

4.標識HTTP會話。


9:歸類描述HttpServletResponse介面都完成那些功能

HttpServletResponse加入表示狀態碼、狀態資訊和響應頭標的方法,它還負責對URL中寫入一Web頁面的HTTP會話ID進行解碼。


10:描述Service方法所完成的基本功能?預設是在那裡實現的?

service方法是在servlet生命週期中的服務期,根據HTTP請求方法(GET、POST等),將請求分發到doGet、doPost等方法

HttpServlet類實現


11:如何開發自己的Servlet?描述應該做的步驟和每步需要完成的工作

1.引jar包

  1)構建開發環境 common包-->lib包-->servlet--->api.jar

 2.開發servlet類

      1)首先繼承HttpServlet

      2)實現 doGet() doPost()

      3)定義 doGet() doPost()

  3.建個web應用

  4.部署

安裝web容器,例如Tomcat

在Tomcat的webapps目錄下新建一個資料夾作為web程式的根

在根下新建一個名為WEB-INF的資料夾,裡面建立一個web.xml的檔案、一個classes的資料夾、一個lib資料夾按照servlet的DTD配置web.xml檔案。

把編譯好的servlet的class檔案複製到classes目錄下lib檔案存放程式所需要的jar包


12:為何servlet需要部署描述?

 servlet需要配置web.xml檔案來使容器認識servlet程式


13:Servlet基本的描述應該是?請寫出來

<servlet>
 
<servlet-name>Hello</servlet-name>
 
<servlet-class>sl314.web.FormBasedHello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/greeting</url-pattern>
</servlet-mapping>


14:如何在html中使用servlet

FORM標記

ACTION– 指定form資訊的目的地(相關的URL)

METHOD – 指定HTTP方法(GET或POST)

語法:

<FORM ACTION=’servlet-URL’ METHOD=’{GET|POST}’>

{HTML form tags and other HTML content}

</FORM>


15:如何接受request中的引數

String userName = (String)request.getParameter("userName")方法


16:如何接受request中header的值

request.getHeader(name);

request.getHeaders(names);等


17:如何輸出html

PrintWriter pw = response.getWriter();

pw.write("<html>");

pw.write("Hello");

pw.write("</html>");


18:如何設定輸出的contentType

response.getContentType()


19:描述servlet的生命週期?

生命週期是指servlet例項在web容器中從:首次建立呼叫init方法開始初始化期,經過service方法執行期,一直到destory方法銷燬期 結束

servlet例項的生命週期由web容器來管理


20:描述init,service,destroy方法的功能和特點

init方法:   是在servlet例項建立時呼叫的方法,用於建立或開啟任何與servlet相關資源和初始化servlet的狀態Servlet規範保證呼叫init方法前不會處理任何請求。

service方法:是servlet真正處理客戶端傳過來的請求的方法,由web容器呼叫,根據HTTP請求方法(GET、POST等),將請求分發到doGet、doPost等方法

destory方法:是在servlet例項被銷燬時有web容器呼叫。Servlet規範確保在destroy方法呼叫之前所有請求的處理均完成需要覆蓋destroy方法的情況:釋放任何在init方法中開啟的與servlet相關的資源儲存servlet的狀態


21:什麼是回撥方法?有什麼特點?

由容器來呼叫程式的方法

由容器來決定什麼時候來調


22:如何設定初始化servlet的引數?

<init-param>
 
       <param-name>greetingText</param-name>
 
       <param-value>Hello</param-value>
 
  </init-param>



23:如何獲取servlet初始化的引數

public void init() {
 
     greetingText = getInitParameter("greetingText");
 
     System.out.println(">> greetingText = '" + greetingText + "'");
 
}



24:ServletConfig介面預設在那裡實現的

GenericServlet類實現ServletConfig介面


25:什麼是ServletContext?有什麼作用?

Servlet上下文 

ServletContext物件是Web應用的執行時表示,可透過其實現Web應用中的資源共享


26:如何訪問ServletContext介面?是在那裡實現的?

Servlet透過getServletContext()方法訪問

GenericServlet類實現


27:ServletContext介面的功能包括?分別用程式碼示例

只讀初始化引數: getInitParameter(name:String) : String

getInitParameterNames() : Enumeration

讀寫訪問應用級屬性:getAttribute(name:String) : Object

setAttribute(name:String, value:Object)

getAttributeNames() : Enumeration

只讀訪問檔案資源: getResource(path) : URL

getResourceAsStream(path) : InputStream

寫web應用日誌檔案:log(message:String)

log(message:String, Throwable:excp)


28:如何設定Context的引數?

<context-param>
 
<param-name>catalogFileName</param-name>
 
<param-value>/WEB-INF/catalog.txt</param-value>
 
</context-param>


29:如何獲取Context設定的引數值?

ServletContext context = sce.getServletContext();
 
String catalogFileName = context.getInitParameter(“catalogFileName”);



30:描述Web應用的生命週期?

Web容器啟動時,初始化每個Web應用

可以建立"監聽器"物件觸發這些事件;

Web容器關閉時,銷燬每個Web應用


31:如何用程式碼實現監控Web應用的生命週期?

public class Test implements ServletContextListener{
 
public void contextInitialized(ServletContextEvent sce) {
 
//
 
}
 
}
 
<listener>
 
<listener-class>
    com.csy.Test
</listener-class>
</listener>


32:web應用中如下錯誤碼示什麼意思:400,401,404,500

400    Bad Request

401    Unauthorized

404    Not Found

500    Internal Server Error


33:描述Web應用中用宣告方式來進行錯誤處理的兩種方法

使用error-page元素宣告一個給定HTTP狀態碼的處理器

<error-page>

 <error-code>404</error-code>

 <location>/error/404.html</location>

</error-page>

可以宣告任意數量的錯誤頁面,但一個給定的狀態碼只能對應一個頁面

使用exception-type元素宣告給定Java異常的處理器

<error-page>

 <exception-type>

        java.lang.ArithmeticException

 </exception-type>

<location>/error/ExceptionPage</location>

</error-page>

可以宣告任意數量的錯誤頁面,但一個給定的異常型別只對應一個頁面

不能使用父類捕獲多種異常


34:描述記錄異常日誌的方法,都位於那些介面?

GenericServlet:

log(message:String)

log(message:String, Throwable:excp)

ServletContext:

log(message:String)

log(message:String, excp:Throwable)


35:什麼是會話?

Web容器可為每個使用者儲存一個"會話物件",用來儲存特定使用者的會話資訊


36:如何獲得會話?

HttpSession session = request.getSesseion();


37:會話Api的基本功能?

getID() :String

isNew() :boolean

getAttribute(name):Object

setAttribute(name,value)

removeAttribute(name)


38:如何銷燬會話?

1、可使用部署描述符控制所有會話的生命週期

    <session-config>

    <session-timeout>10</session-timeout>

    </session-config>

2、可使用控制特定會話物件的生命週期HttpSession介面

invalidate()

    getCreationTime() :long

getLastAccessedTime() :long

getMaxInactiveInterval() :int

    setMaxInactiveInterval(int)


39:描述會話保持狀態的基本原理

當客戶端第一次請求時,伺服器建立一個session與request繫結,用響應物件response來返回sessionid 放到客戶端的cookies中儲存下來,下次在傳送請求時,直接根據sessionid來檢索伺服器的會話(每次請求都會將所有的cookies帶到伺服器端)

 

40:如何讀寫cookie,程式碼示例

寫:String name = request.getParameter("firstName");
 
Cookie c = new Cookie("yourname", name);
 
response.addCookie(c);
 
讀:Cookie[] allCookies = request.getCookies();
 
for ( int i=0; i < allCookies.length; i++ ) {
 
          if ( allCookies[i].getName().equals(“yourname”) ) {
 
            name = allCookies[i].getValue();  
 
          }
 
    }



41:什麼是URL重寫,如何實現,程式碼示例

Cookie不能使用時,可使用URL重寫 request.encodeURL();

客戶在每個URL的後面追加額外的資料

伺服器將此識別符號與其儲存的有關會話資料相關聯


41:描述web應用的4種認證技術

BASIC – Web瀏覽器接收使用者名稱和口令,將其以明碼方式傳送給Web伺服器

DIGEST – Web瀏覽器接收使用者名稱和口令,使用加密演算法將此資料傳送給Web伺服器

FORM – Web應用提供傳送給Web瀏覽器的HTML form

CLIENT-CERT – Web容器使用SSL驗證使用者,服務端和客戶端的鏈路保護


42:什麼是授權,什麼是驗證?

授權是分局使用者角色劃分web資源的過程,其標識web應用中的安全域   分配許可權

web容器使用廠商指定的機制驗證使用者的角色   匹配許可權


43:什麼是HTTPS

HTTPS (Secure Hypertext Transfer Protocol) 是使用SSL協議的HTTP


44:什麼是審計?

也就是訪問跟蹤,是為web應用的每次訪問保留記錄的過程


45:如何實現宣告性授權

1、標識web資源集

2、標識角色

3、將web資源集影射到角色

4、標識每個角色中的使用者

在 web.xml裡配


46:描述servlet併發問題?

多個同類執行緒執行,可以共享同一個Servlet例項,共享的資料和資源未合理同步,可能會引起資料的衝突


47:描述Web應用中的六種屬性範圍

區域性變數(頁面範圍)

例項變數

類變數

請求屬性(請求範圍)

會話屬性(會話範圍)

上下文屬性(應用範圍)


48:支出上述六種那些是執行緒安全的

區域性變數和請求屬性


49:什麼是STM?如何實現?

SingleThreadModel介面

可以實現SingleThreadModel介面保證某一時刻只有一個請求執行service方法


50:如何實現併發管理?

儘可能使用區域性和請求屬性

使用synchronized語法控制併發

儘可能減少同步塊和同步方法的使用

使用正確設定了執行緒安全的資源類


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69977571/viewspace-2707930/,如需轉載,請註明出處,否則將追究法律責任。

相關文章