基于Servlet面试题进行JavaWeb入门学习
常見面試題
1、說一說Servlet生命周期
2、Post和Get在servlet處理中有何區別
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入门学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 买到假芯片,血的教训!
- 下一篇: 华为宣布:免费培养8000名开发者!