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

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

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

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

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

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

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

36.Forward(轉(zhuǎn)發(fā))和Redirect(重定向)的區(qū)別
Forward和Redirect代表了兩種請求轉(zhuǎn)發(fā)方式:直接請求轉(zhuǎn)發(fā)和重定向。對應(yīng)到代碼里,分別是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ā)是服務(wù)器行為;重定向是客戶端行為
  2. 轉(zhuǎn)發(fā)行為瀏覽器只做一次訪問請求;重定向行為瀏覽器做至少兩次的訪問請求。
  3. 轉(zhuǎn)發(fā)只能將請求轉(zhuǎn)發(fā)給同一個(gè)Web應(yīng)用中的組件;而重定向不僅可以重定向到當(dāng)前應(yīng)用程序中的其他資源,還可以重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序中的資源,甚至是使用絕對URL重定向到其他站點(diǎn)的資源。
  4. 轉(zhuǎn)發(fā)方法請求轉(zhuǎn)發(fā)過程結(jié)束后,瀏覽器地址欄保持初始的URL地址;重定向訪問過程結(jié)束后,瀏覽器地址欄由初始的URL地址變成重定向的目標(biāo)URL。
  5. 轉(zhuǎn)發(fā)方法的調(diào)用者與被調(diào)用者之間共享相同的request對象和response對象,它們屬于同一個(gè)訪問請求和響應(yīng)過程;而重定向的調(diào)用者與被調(diào)用者使用各自的request對象和response對象,它們屬于兩個(gè)獨(dú)立的訪問請求和響應(yīng)過程。

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

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

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

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

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

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

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

41.JSP如何使用JavaBean
JSP使用JavaBean有兩種方式:夾雜在HTML中的JSP腳本和JSP動(dòng)作標(biāo)簽<jsp:useBean>

  1. 純JSP實(shí)現(xiàn)
    這種方式采用的是純粹的Java代碼來創(chuàng)建JavaBean對象和使用JavaBean,此時(shí)的JavaBean跟一個(gè)普通類沒什么區(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動(dòng)作標(biāo)簽訪問JavaBean
    為了簡化JavaBean的使用,JSP還提供了一組動(dòng)作標(biāo)簽來幫助開發(fā)者使用JavaBean,它們是:
  • <jsp:useBean>,聲明和創(chuàng)建JavaBean
  • <jsp:setProperty>,為JavaBean的屬性設(shè)置值
  • 用<jsp:getProperty>,獲得JavaBean的屬性值

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

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

      </c:forEach>
    2. 使用items和var屬性進(jìn)行集合迭代
      <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>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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