日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

基于Servlet面试题进行JavaWeb入门学习

發布時間:2023/12/20 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Servlet面试题进行JavaWeb入门学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

常見面試題

1、說一說Servlet生命周期

2PostGetservlet處理中有何區別

3、轉發與重定向的區別

4?編寫Servlet需要繼承的類是什么?

5、編寫Servlet通常需要實現的兩個方法是什么?

6要獲取用戶信息,如何獲取

7、如何配置servlet


Servlet基礎

Servlet基礎

Servlet是運行在服務器上的Java小程序,B/S架構的應用需要訪問數據庫、或一些邏輯處理,均由servlet進行處理,他用來擴充基于http協議的web服務器。

Servlet生命周期包括三部分:

初始化:Web容器加載servlet,調用init()方法

處理請求:當請求到達時,運行其service()方法。service()自動派遣運行與請求相對應的doXXX(doGet或者doPost)方法。

銷毀:服務結束,web容器會調用servlet的distroy()方法銷毀servlet。


HTTP協議


HTTP協議屬于應用層協議,那么基于TCP通信,分為非持續和持續型。


客戶端(一般是瀏覽器)發起80端口(一般)http請求,位于指定ip的并且監聽該端口的服務器進行響應。


http方式指的則是GET、POST等動詞,代表了對于url(統一資源定位符)和uri(統一資源標識符)的相關操作,http那么我們最熟悉的就是通過瀏覽器的地址欄,發送http請求,而地址欄填入的信息,例如www.baidu.com,就是發送向百度的ip地址所在的服務器請求頁面,而地址欄的操作對應的http方式則是GET,目的是獲取頁面。而對于一個頁面的請求http://localhost:8080/index?username=javatree,他能收到什么樣的請求呢?

這是運行在我的電腦上的服務器所接受到的請求消息,那么第一行GET則是標志著對于url的操作,緊跟著的就是所獲取資源的地址:/index,是從我們的localhost:8080后面開始的,localhost是本機地址,8080為服務器端口,后面跟著資源名,再后面則是對應的協議標準,使用HTTP/1.1協議。


Servlet基本流程

最早支持 Servlet 技術的是 JavaSoft 的 Java Web Server。此后,一些其它的基于 Java 的 Web Server 開始支持標準的 Servlet API。Servlet 的主要功能在于交互式地瀏覽和修改數據,生成動態 Web 內容。這個過程為:

1.?客戶端發送請求至服務器端;

2.?服務器將請求信息發送至(對應的)Servlet;

3.?Servlet 生成響應內容并將其傳給服務器。響應內容動態生成,通常取決于客戶端的請求;

4.?服務器將響應返回給客戶端。

拿上面的圖來舉例子,服務器收到請求,解析出請求地址為/index,找到對應處理/index請求的servlet,然后找到對應處理GET請求的doGet函數,傳入的參數存放在HttpServletRequest請求中,即我們的username,那么處理函數處理結束后,交給瀏覽器一個資源(頁面,圖片,xml數據),通過response交互,然后瀏覽器拿到服務器給的資源后顯示在瀏覽器中,完成整個響應.


Servlet常用對象

Request:封裝用戶提交信息,每次請求都會產生一個新的request,生命周期:一次請求,常用函數:

1. setAttribute()在Request域中存儲數據

?2. setCharacterEncoding()設置請求參數的編碼方式,只對post請求有效

?3. getMethod()獲取請求類型

?4. getParameter()獲取指定請求參數值

?5. getParameterNames()獲取所有請求參數,返回一個Enumeration枚舉類

?6. getAttribute()獲取域中存儲的數據

?7. getAttributeNames()獲取域中所有數據,返回一個Enumeration枚舉類

?8. getContextPath()返回當前WEB項目相對路徑

?9. getCookies()獲取所有Cookie,返回一個Cookie數組

?10. getRequestDispatcher()獲取轉發器,參數路徑以/打頭,代表WebRoot(當前WEB項目根目錄)

?11. getSession()獲取Session對象


Response:對客戶的請求做出動態的響應,向客戶端發送數據。生命周期:一次請求,常用函數:

1. setContentType()告知瀏覽器數據類型

?2. setCharacterEncoding設置Response的編碼方式

?3. setHeader()設置消息頭

?4. setStatus()設置狀態嗎

?5. addCookie()添加Cookie

?6. sendRedirect()重定向

?7. getOutputStream()獲取通向瀏覽器的字節流(同一次請求處理中,字節流和字符流不能同時存在)

?8. getWriter()獲取通向瀏覽器的字符流(同一次請求處理中,字節流和字符流不能同時存在)


Session:一次會話,jsp內置對象,在jsp頁面被裝載后創建。生命期:從打開瀏覽器連接服務器開始,會為該次會話創建session,直到關閉瀏覽器結束。用途多在需要保存用戶信息以供調用或一些需要較久保存的數據


ServletContext ?:應用程序開啟到結束,共享。


創建一個servlet

創建servlet需要導入對應的java servlet-api包,并將想要成為servlet處理的類繼承HttpServlet即可

添加路徑映射

Servlet添加url到servlet有兩種方法

第一種:使用注解

上例則是使用注解方式,在繼承了httpservlet的類使用webservlet注解進行映射,所有請求/validateCodeCheck的請求都會在這個類進行執行,那么httpservlet較多被重寫的函數有:doPost,doGet,doHead(用的較少)。

第二種:添加mapper

在web.xml下

Servlet-name是給下面的servlet-class起的名稱,servlet-class則是處理的完整包路徑+類名

添加映射,url-pattern則是想要映射到的地址,而servlet-name則是處理該請求的servlet名稱,在上面的servlet定義的



可以看到在httpservlet基類中定義了響應的method,只需要重寫想要響應的請求對應的函數即可,比如在此例中我們重寫doGet

doGet(HttpServletRequest req,HttpServletResponse resp){

????????String user = req.getParameter(”username”);

????????System.out.println(user);

}

我們就能看到輸出了在瀏覽器中輸入的javatree,那么如何返回頁面呢?


第一種:重定位(sendRedirect)

將頁面重新定位至指定文件,這屬于response的方法,通知服務器訪問指定資源,但是當前請求結束,因此會發送新的request、response向轉發資源,之前做的將不會繼承到新資源的請求中去


第二種:請求轉發(getRequestDispatch)

屬于request方法,能夠使用forward傳遞request和response,能夠保留當前操作

示例:

注意調用的對象

request.setAttribute("username","javaTree");

response.sendRedirect("home.jsp");//重定向

request.getRequestDispacther("home.jsp").forword(request,response); //請求轉發


1、當用request.getRequestDispacther("/index.jsp").forword(request,response); 請求轉發后,結果頁面輸出:javaTree

2、當用response.sendRedirect("/index.jsp");重定向后,結果頁面輸出:null


請求不同資源

Jsp文件:

請求:<form action="/validateCodeCheck" method="POST">

頁面請求登錄,重定向至index.jsp,瀏覽器收到服務器解析好的頁面文件

圖片:

請求:<img alt="驗證碼" id="scode" src="<%=request.getContextPath() %>/getCode" >

通過圖片io操作向response的輸出流中寫入圖片,完成圖片的響應


本次使用例子: http://git.oschina.net/Efin/Servlet



總結

以上是生活随笔為你收集整理的基于Servlet面试题进行JavaWeb入门学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。