Java面試題集錦09—Web開發(fā)相關技術

32.什么是Servlet
Servlet在Java Web服務器中就充當了信息資源的最小表示單位,代表了一個用戶可以通過瀏覽器獲取的資源。Servlet可以進行無限的擴展,它可以使用Java的所有類庫資源,為用戶返回文本、圖片、音頻、視頻等各類信息資源。
從編程角度來看,Servlet是一個Java類,這個類需要實現(xiàn)Servlet接口,提供一個公開的無參數(shù)的構(gòu)造方法。由Web容器來控制它的創(chuàng)建、初始化、提供服務、銷毀等。它的各種行為方式通過在web.xml文件中的配置來決定

33.Servlet的生命周期是怎么樣的
Servlet的生命周期分為4個階段:加載、初始化、提供服務和銷毀,這些過程都是由Web容器來掌控。開發(fā)者關注最多的是初始化和提供服務兩個階段,在init()方法中,開發(fā)者可以獲取配置在web.xml中的初始化參數(shù)service()方法中的代碼,會在Servlet的請求來到時被調(diào)用。

34.Servlet接口有哪些實現(xiàn)類
在Java EE的SDK中,一共提供了以下3個Servlet接口的實現(xiàn)類

  • javax.faces.webapp.FacesServlet。用于JSF的Servlet,一般很少使用
  • javax/servlet.GenericServlet。它是一個抽象類,不能直接使用,它提供了除server()方法以外的所有抽象方法的默認實現(xiàn),可用于一般的Servlet開發(fā)。
  • javax.servlet.http.HttpServlet。該類是開發(fā)者使用最多的一個類,它不但提供了所有抽象方法的默認實現(xiàn),還提供了不同的方法以區(qū)分不同類型的HTTP請求,例如doPost()、doGet()等。

35.如何在Servlet中獲取請求參數(shù)的值
在Servlet中,任何負責做出響應的方法(例如,service()、doPost()和doGet())都會包含一個ServletRequest對象參數(shù),不管是POST還是GET的請求方式,Servlet都可以通過ServletRequest接口的getParameter()或getParameterValues()方法獲取到。前者適用于只有一個值的參數(shù),后者多用于有多值的參數(shù),例如,復選框(checkbox)

//獲取參數(shù)名為username的用戶名,返回字符串   
String username = request.getParameter("username");
//獲取參數(shù)名為password的密碼,返回字符串
String password = request.getParameter("password");
//獲取參數(shù)名為hobby的愛好數(shù)組,返回的是字符串數(shù)組
String[ ] hobbies = request.getParameterValues("hobby");

36.Forward(轉(zhuǎn)發(fā))和Redirect(重定向)的區(qū)別
Forward和Redirect代表了兩種請求轉(zhuǎn)發(fā)方式:直接請求轉(zhuǎn)發(fā)和重定向。對應到代碼里,分別是RequestDispatcher類的forward()方法和HttpServletResponse類的sendRedirect()方法。在Servlet中調(diào)用轉(zhuǎn)發(fā)和重定向的語句如下:

request.getRequestDispatcher("new.jsp").forward(request,response);//轉(zhuǎn)發(fā)
response.sendRedirect("new.jsp");        //重定向
  1. 轉(zhuǎn)發(fā)是服務器行為;重定向是客戶端行為
  2. 轉(zhuǎn)發(fā)行為瀏覽器只做一次訪問請求;重定向行為瀏覽器做至少兩次的訪問請求。
  3. 轉(zhuǎn)發(fā)只能將請求轉(zhuǎn)發(fā)給同一個Web應用中的組件;而重定向不僅可以重定向到當前應用程序中的其他資源,還可以重定向到同一個站點上的其他應用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源。
  4. 轉(zhuǎn)發(fā)方法請求轉(zhuǎn)發(fā)過程結(jié)束后,瀏覽器地址欄保持初始的URL地址;重定向訪問過程結(jié)束后,瀏覽器地址欄由初始的URL地址變成重定向的目標URL。
  5. 轉(zhuǎn)發(fā)方法的調(diào)用者與被調(diào)用者之間共享相同的request對象和response對象,它們屬于同一個訪問請求和響應過程;而重定向的調(diào)用者與被調(diào)用者使用各自的request對象和response對象,它們屬于兩個獨立的訪問請求和響應過程。

37.過濾器的作用和工作原理是什么
對于Web應用程序來說。過濾器是處于Web容器內(nèi)的一個組件,它會過濾特定請求資源請求信息和響應信息。一個請求來到的時候,Web容器會判斷是否有過濾器與該信息資源關聯(lián),如果有,則交給過濾器一一的處理,然后再交給目標資源,響應的時候則以相反的順序交給過濾器處理,最后再返回給用戶瀏覽器。
過濾器對應Filter接口,開發(fā)者一般需要實現(xiàn)doFilter()方法,并在web.xml文件夾中提供相應的配置。

38.監(jiān)聽器的作用和工作原理是什么
對于Web應用程序來說,監(jiān)聽器是處于Web容器內(nèi)的一個組件,它會對Web容器中的3種范圍對象進行監(jiān)聽:request、session和application。當這些范圍對象在創(chuàng)建或銷毀的時候,Web容器會主動的調(diào)用它們的初始化或銷毀的回調(diào)方法,從而達到事件響應的效果。根據(jù)范圍的不同,JavaEE為開發(fā)者提供了如下一些監(jiān)聽器接口。

  • Request事件監(jiān)聽器接口ServletRequestListener
  • Session事件監(jiān)聽器接口HttpSessionListener
  • Application事件監(jiān)聽器接口ServletContextListener

39.JSP的運行機制是什么
當客戶端發(fā)出一次對某個JSP的請求,Web容器處理該請求的過程如下:

  1. Web容器會檢驗JSP的語法是否正確
  2. 將JSP文件轉(zhuǎn)換成Servlet的源碼文件
  3. 編譯該源碼文件成為Class文件
  4. 創(chuàng)建一個該Servlet類的對象實例,以Servlet的方式為請求提供服務

40.JSP的內(nèi)置對象及其用途

  • application:它代表了整個Web應用程序,與Servlet上下文是同一個概念
  • session:Http會話對象
  • request:請求對象
  • response:返回對象
  • out:寫出流對象,用于返回數(shù)據(jù)給客戶端
  • page:普通的頁面對象
  • pageContext:頁面上下文,代表頁面的一個運行環(huán)境,通過它可以獲取到其他對象,如會話、請求等
  • exception:用于錯誤頁面,通過該對象可獲得異常的詳細信息
  • config:配置對象,用于獲取初始化參數(shù)等數(shù)據(jù)

41.JSP如何使用JavaBean
JSP使用JavaBean有兩種方式:夾雜在HTML中的JSP腳本和JSP動作標簽<jsp:useBean>

  1. 純JSP實現(xiàn)
    這種方式采用的是純粹的Java代碼來創(chuàng)建JavaBean對象和使用JavaBean,此時的JavaBean跟一個普通類沒什么區(qū)別,示例代碼如下:
    <%
    HelloBean bean = new HelloBean(); //創(chuàng)建HelloBean對象
    pageContext.setAttribute("helloBean", bean); //把bean放在page范圍中
    %>
    <%
    HelloBean bean2 = pageContext.setAttribute(); //獲得HelloBean對象
    response.write(bean2.getName()); //使用bean
    %>
  2. 用JSP動作標簽訪問JavaBean
    為了簡化JavaBean的使用,JSP還提供了一組動作標簽來幫助開發(fā)者使用JavaBean,它們是:
  • <jsp:useBean>,聲明和創(chuàng)建JavaBean
  • <jsp:setProperty>,為JavaBean的屬性設置值
  • 用<jsp:getProperty>,獲得JavaBean的屬性值

42.如何使用迭代標簽<c:forEach>循環(huán)顯示數(shù)據(jù)

  • 語法:
    1. 使用begin和end屬性進行整數(shù)范圍迭代
      <c:forEach begin="20" end="50" var="i" step="2">
      偶數(shù):<c:out value="${i}"/>

      </c:forEach>
    2. 使用items和var屬性進行集合迭代
      <table>
      <tr>
      <th>編號</th>
      <th>用戶名</th>
      <th>年齡</th>
      <th>性別</th>
      </tr>
      <c:forEach items="${users}" var="user" varStatus="status">
      <tr>
      <th>編號</th>
      <th>用戶名</th>
      <th>年齡</th>
      <th>性別</th>
      </tr>
      </c:forEach>
      </table>
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容