基于Servlet面试题进行JavaWeb入门学习
常見面試題
1、說一說Servlet生命周期
2、Post和Get在servlet處理中有何區(qū)別
3、轉(zhuǎn)發(fā)與重定向的區(qū)別
4、?編寫Servlet需要繼承的類是什么?
5、編寫Servlet通常需要實現(xiàn)的兩個方法是什么?
6、要獲取用戶信息,如何獲取
7、如何配置servlet
Servlet基礎
Servlet基礎
Servlet是運行在服務器上的Java小程序,B/S架構(gòu)的應用需要訪問數(shù)據(jù)庫、或一些邏輯處理,均由servlet進行處理,他用來擴充基于http協(xié)議的web服務器。
Servlet生命周期包括三部分:
初始化:Web容器加載servlet,調(diào)用init()方法
處理請求:當請求到達時,運行其service()方法。service()自動派遣運行與請求相對應的doXXX(doGet或者doPost)方法。
銷毀:服務結(jié)束,web容器會調(diào)用servlet的distroy()方法銷毀servlet。
HTTP協(xié)議
HTTP協(xié)議屬于應用層協(xié)議,那么基于TCP通信,分為非持續(xù)和持續(xù)型。
客戶端(一般是瀏覽器)發(fā)起80端口(一般)http請求,位于指定ip的并且監(jiān)聽該端口的服務器進行響應。
http方式指的則是GET、POST等動詞,代表了對于url(統(tǒng)一資源定位符)和uri(統(tǒng)一資源標識符)的相關(guān)操作,http那么我們最熟悉的就是通過瀏覽器的地址欄,發(fā)送http請求,而地址欄填入的信息,例如www.baidu.com,就是發(fā)送向百度的ip地址所在的服務器請求頁面,而地址欄的操作對應的http方式則是GET,目的是獲取頁面。而對于一個頁面的請求http://localhost:8080/index?username=javatree,他能收到什么樣的請求呢?
這是運行在我的電腦上的服務器所接受到的請求消息,那么第一行GET則是標志著對于url的操作,緊跟著的就是所獲取資源的地址:/index,是從我們的localhost:8080后面開始的,localhost是本機地址,8080為服務器端口,后面跟著資源名,再后面則是對應的協(xié)議標準,使用HTTP/1.1協(xié)議。
Servlet基本流程
最早支持 Servlet 技術(shù)的是 JavaSoft 的 Java Web Server。此后,一些其它的基于 Java 的 Web Server 開始支持標準的 Servlet API。Servlet 的主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動態(tài) Web 內(nèi)容。這個過程為:
1.?客戶端發(fā)送請求至服務器端;
2.?服務器將請求信息發(fā)送至(對應的)Servlet;
3.?Servlet 生成響應內(nèi)容并將其傳給服務器。響應內(nèi)容動態(tài)生成,通常取決于客戶端的請求;
4.?服務器將響應返回給客戶端。
拿上面的圖來舉例子,服務器收到請求,解析出請求地址為/index,找到對應處理/index請求的servlet,然后找到對應處理GET請求的doGet函數(shù),傳入的參數(shù)存放在HttpServletRequest請求中,即我們的username,那么處理函數(shù)處理結(jié)束后,交給瀏覽器一個資源(頁面,圖片,xml數(shù)據(jù)),通過response交互,然后瀏覽器拿到服務器給的資源后顯示在瀏覽器中,完成整個響應.
Servlet常用對象
Request:封裝用戶提交信息,每次請求都會產(chǎn)生一個新的request,生命周期:一次請求,常用函數(shù):
1. setAttribute()在Request域中存儲數(shù)據(jù)
?2. setCharacterEncoding()設置請求參數(shù)的編碼方式,只對post請求有效
?3. getMethod()獲取請求類型
?4. getParameter()獲取指定請求參數(shù)值
?5. getParameterNames()獲取所有請求參數(shù),返回一個Enumeration枚舉類
?6. getAttribute()獲取域中存儲的數(shù)據(jù)
?7. getAttributeNames()獲取域中所有數(shù)據(jù),返回一個Enumeration枚舉類
?8. getContextPath()返回當前WEB項目相對路徑
?9. getCookies()獲取所有Cookie,返回一個Cookie數(shù)組
?10. getRequestDispatcher()獲取轉(zhuǎn)發(fā)器,參數(shù)路徑以/打頭,代表WebRoot(當前WEB項目根目錄)
?11. getSession()獲取Session對象
Response:對客戶的請求做出動態(tài)的響應,向客戶端發(fā)送數(shù)據(jù)。生命周期:一次請求,常用函數(shù):
1. setContentType()告知瀏覽器數(shù)據(jù)類型
?2. setCharacterEncoding設置Response的編碼方式
?3. setHeader()設置消息頭
?4. setStatus()設置狀態(tài)嗎
?5. addCookie()添加Cookie
?6. sendRedirect()重定向
?7. getOutputStream()獲取通向瀏覽器的字節(jié)流(同一次請求處理中,字節(jié)流和字符流不能同時存在)
?8. getWriter()獲取通向瀏覽器的字符流(同一次請求處理中,字節(jié)流和字符流不能同時存在)
Session:一次會話,jsp內(nèi)置對象,在jsp頁面被裝載后創(chuàng)建。生命期:從打開瀏覽器連接服務器開始,會為該次會話創(chuàng)建session,直到關(guān)閉瀏覽器結(jié)束。用途多在需要保存用戶信息以供調(diào)用或一些需要較久保存的數(shù)據(jù)
ServletContext ?:應用程序開啟到結(jié)束,共享。
創(chuàng)建一個servlet
創(chuàng)建servlet需要導入對應的java servlet-api包,并將想要成為servlet處理的類繼承HttpServlet即可
添加路徑映射
Servlet添加url到servlet有兩種方法
第一種:使用注解
上例則是使用注解方式,在繼承了httpservlet的類使用webservlet注解進行映射,所有請求/validateCodeCheck的請求都會在這個類進行執(zhí)行,那么httpservlet較多被重寫的函數(shù)有:doPost,doGet,doHead(用的較少)。
第二種:添加mapper
在web.xml下
Servlet-name是給下面的servlet-class起的名稱,servlet-class則是處理的完整包路徑+類名
添加映射,url-pattern則是想要映射到的地址,而servlet-name則是處理該請求的servlet名稱,在上面的servlet定義的
可以看到在httpservlet基類中定義了響應的method,只需要重寫想要響應的請求對應的函數(shù)即可,比如在此例中我們重寫doGet
doGet(HttpServletRequest req,HttpServletResponse resp){
????????String user = req.getParameter(”username”);
????????System.out.println(user);
}
我們就能看到輸出了在瀏覽器中輸入的javatree,那么如何返回頁面呢?
第一種:重定位(sendRedirect)
將頁面重新定位至指定文件,這屬于response的方法,通知服務器訪問指定資源,但是當前請求結(jié)束,因此會發(fā)送新的request、response向轉(zhuǎn)發(fā)資源,之前做的將不會繼承到新資源的請求中去
第二種:請求轉(zhuǎn)發(fā)(getRequestDispatch)
屬于request方法,能夠使用forward傳遞request和response,能夠保留當前操作
示例:
注意調(diào)用的對象
request.setAttribute("username","javaTree");
response.sendRedirect("home.jsp");//重定向
request.getRequestDispacther("home.jsp").forword(request,response); //請求轉(zhuǎn)發(fā)
1、當用request.getRequestDispacther("/index.jsp").forword(request,response); 請求轉(zhuǎn)發(fā)后,結(jié)果頁面輸出:javaTree
2、當用response.sendRedirect("/index.jsp");重定向后,結(jié)果頁面輸出: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
總結(jié)
以上是生活随笔為你收集整理的基于Servlet面试题进行JavaWeb入门学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 买到假芯片,血的教训!
- 下一篇: java 中xsd文件在哪_在Java