答辯每個人的總分為1.5分。每個人主要問3個問題。
開發流程===》系統架構====》項目模塊+功能===》項目得失
重定向與轉發:?
九個隱式對象?
get與post的區辨:?
jsp有靜態包含,動態包含,兩者的區辨:?
什么是MVC:?
web系統架構:?
java web項目答辯總結試題
注釋:用楷體寫的就是用自己組織的話來回答老師的問題。
1 http協議全名和特點
(答辯老師:你對HTTP的是怎么理解的:
答辯同學:首先HTTP是一種超文本傳輸協議,也是一種無狀態的協議。
瀏覽器通過HTTP協議與web服務器交換信息,他處理信息交換的過程是:
客戶端和web服務器建立連接--->客戶端發送HTTP請求--->服務器端接收客戶端的HTTP請求,生成HTTP響應回發--->服務器端關閉連接
HTTP請求,HTTP請求里有包含有請求行,請求頭,空行,消息體。
HTTP響應里又包含狀態行,響應碼,空行,消息體。
)
HTTP是一種超文本傳輸協議(HyperText Transfer Protocol),是一種無狀態的協議;HTTP遵循請求/響應模型 。
1.支持客戶/服務器模式。
2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯系的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
3.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
4.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
2 請求信息和響應信息包括
請求:請求行 請求頭 空行 消息體
響應:狀態行 響應頭 空行 消息體
3 tomcat目錄結構 -- 內容信息
( 說說你知道的tomcat下的一些子目錄有哪些,並且說說你的的理解:
答:首先他要有可以啟動服務的嘛,一般的啟動的都是在bin目錄下。
安裝之后一般都是有jar文件,jar文件是放在lib目錄下的。(一般在做每一個項目的時候,就算沒有lib,都會自己建立一個lib來存放jar文件的)。
在創建項目的時候,就會把你創建的項目放在webapps目錄下。
自己所寫的jsp生成的Servlet就存放在work里面。
一些配置文件就放在conf目錄下。
有記錄這些動作的,就需要日志記錄,就有logs日志文件。(可以根據英文來記憶目錄的名字)
)
bin:啟動和關閉服務器的腳本文件
lib:服務器及所有的應用都能共用的jar文件
conf:存放配置文件
webapps:應用程序部署目錄
logs:日志文件
work:由JSP生成的Servlet的存放目錄
4 servlet的生命周期
(說說你對Servlet生命周期的了解:
答:Servlet生命周期大體分為三個階段,
第一個階段:初始化:准備工作,觸發init()方法。
第二個階段:服務: 處理瀏覽器的各種請求並作出響應。觸發server()方法。
第三個階段:銷毀: 容器關閉,觸發destroy()方法。
)
Servle生命周期大體可以分為:初始化,服務,銷毀3個階段。
初始化:第一個階段主要工作,容器裝載並實例化servlet,並觸發init()方法裝載資源。
服務階段:主要處理來源於客戶端的各種請求與給出響應,請求到達時觸發service()方法,處理請求產生響應。servlet是多線程的,容器只裝載一個servlet實例,初始化只執行一次,但是請求達到時,每個請求被servlet的service()方法執行的線程並發處理。
銷毀: servlet的銷毀代表着該servlet實例被容器丟棄,一般是容器關閉或容器需要空閑內存時,容器通過調用destroy()來銷毀。
6 重定向 轉發 的原理
( 談談你了解的重定向與轉發(重定向與轉發的區別):
答:重定向:
重定向的使用是:response.sendRedirect(url);
重定向后,瀏覽器的地址欄會發生變化,變成新的目標URL;
使用重定向瀏覽器會發起兩次不同的請求。因為重定向是可以請求到其他應用程序中的資源。
轉發:
轉發的使用是:request.getRequestDispatcher(/path).forward(request, response);
轉發后,瀏覽器的地址欄的地址不會發生變化,因為轉發是共享的request和response對象,屬於同一個請求響應過程。由服務器內部完成。
)
請求轉發:
只能將請求轉發到同一個WEB應用中的組件,請求轉發的組件與組件之間共享相同的request 對象和response 對象,它們屬於同一個訪問請求和響應過程。
由服務器內部完成請求的轉發,並返回了響應。
所以轉發過程中瀏覽器地址不會跳轉路徑,依舊是前一個URL,由於轉發請求的工作都是服務器完成。安全性較高。
重定向:
可以將請求重定向到當前應用程序中的其他資源,還可以重定向到同一個站點上的其他應用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源。
請求者與被請求者使用各自的request 對象和response 對象,它們屬於兩個獨立的訪問請求和響應過程。
瀏覽器發起了2次不同的請求,所以重定向的訪問過程結束后,瀏覽器地址欄中顯示的URL會發生改變,由初始的URL地址變成重定向的目標URL。
7 session的原理
(
解釋session是的工作原理:
答:服務器會創建一個session對象,這個session對象是存放在服務器的。創建session對象的,服務器還會產生一個sessionID,這個sessionID是存放在客戶端的。當我們關閉瀏覽器的時候,sessionID會被銷毀,但是session對象是不一定被銷毀的。session對象可以設置一個超時。
)
Session對象的原理在於,服務器可以給客戶端創建並維護一個Session對象,用於存放數據。
在創建Session對象的同時,服務器將會為該Session對象產生一個唯一的編號,這個編號稱之為SessionID,服務器以Cookie的方式將SessionID存放在客戶端。Session對象是保存在服務器端,瀏覽器關閉時並不意味着Session對象被刪除。
8 JSP與servlet的區別
(
談談及自己認為的JSP與Servlet的區別:
答:JSP主要是設置網頁的,側重於視圖。Servlet主要是寫功能的,側重控制邏輯。
)
解釋1 :JSP是Servlet技術的擴展,本質上就是Servlet的簡易方式。JSP編譯后是“類servlet”。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。
解釋2:JSP在本質上就是SERVLET,但是兩者的創建方式不一樣.Servlet完全是JAVA程序代碼構成擅長於流程控制和事務處理而通過Servlet來生成動態網頁;JSP由HTML代碼和JSP標簽構成,可以方便地編寫動態網頁
因此在實際應用中采用Servlet來控制業務流程,而采用JSP來生成動態網頁.在struts框架中,JSP位於MVC設計模式的視圖層,而Servlet位於控制層.
9 談談自己的ajax的理解
( 談談你自己對Ajax的理解:
答:Ajax是異步的JavaScript和XML,它不是語言,是一種新方法,主要用它來更新部分網頁。
)
AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。
AJAX 不是新的編程語言,而是一種使用現有標准的新方法。
AJAX 是與服務器交換數據並更新部分網頁的藝術,在不重新加載整個頁面的情況下。
10 response與request對象的創建與銷毀-- (時間)
(response對象與request對象是怎么創建於銷毀的:
答:當運行Servelt的時候,創建response對象與request對象,一個請求和響應完成以后tRequest和Response就會由容器負責銷毀。
)
Web服務器收到客戶端的http請求,會針對每一次請求,分別創建一個用於代表請求的request對象、和代表響應的response對象。
11 怎樣部署一個servlet (配置)
(在web.xml里怎樣去部署一個Servlet:
答:先注冊(servlet),servlet下有一個servlet-name是用於聲明一個servlet的名字,servlet-class是用來寫java類完整的位置。
與servlet同級的一個映射(servlet-mapping),servlet-mapping里有個servlet-name是映射的邏輯名字,必須與<servlet>下的name一致,url-patter映射路徑。
)
注冊Servlet
<servlet>
<servlet-name>InitUser</servlet-name>--- 聲明一個在web應用程序中唯一的名字
<servlet-class>com.cy.servlet.InitUser</servlet-class> ----java類完整的位置
( 初始化參數 對單個的servlet
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param>
)
</servlet>
映射Servlet
<servlet-mapping>
<servlet-name>InitUser</servlet-name>
<url-pattern>/InitUser</url-pattern>
</servlet-mapping>
12 經常遇到出錯的狀態碼並解釋意思(解釋)
( 答:200:表示正確
302:一般使用轉發的時候會遇到
404:找不到指定的位置
500:服務器報錯
)
200:正確
302:客戶請求的文檔在其他地方,新的URL在location頭中給出,瀏覽器應該自動訪問新的URL
404:無法找到指定的位置的資源。
500:服務器遇到了意料不到的情況,不能完成客戶的請求。
13 把數據從servlet查出轉發到jsp顯示數據的方式
( 答:一般有三種方法,1 可以用腳本。 2 可以用EL表達式。3 使用javabean。)
1 腳本
2 EL表達式
3 JavaBean
14 異常處理 執行順序 try catch finally
(答:在try中捕獲到異常,執行catch中的代碼,最后執行finally。一般finally里的方法都會執行。)
如果在try{}中捕獲相應的異常,中斷當前代碼的執行,轉而去執行catch{}中的內容,最后去執行 finally{}中方法,一般來說finally中的方法都是會被執行的,其中finally中很大程度上用於資源的釋放。
finally中的代碼總是會執行嗎?
如果一個方法內在執行try{}語句之前就已經return了,那么finally語句指定不會執行了。因為它根本沒有進入try語句中 如果在一個try語句中調用System.exit(0);方法,那么就會退出當前java虛擬機,那么finally也就沒有執行的機會了。
15 HttpServletRequest對象獲取請求參數的方法:
getParameter(parameterName) 返回一個字符串對象。
getParameterValues(parameterName) 返回一個字符串數組對象。
getParameterNames() 以Enumeration(枚舉)的方式返回請求中所有的表單參數名列表。
16 servlet映射的路徑的方式有幾種-- <url-pattern>...<url-pattern>
精確模式匹配。這種類型的模式用於將請求一對一映射到指定的Servlet。
擴展名匹配“*.擴展名”。在這種情況下,所有以指定擴展名結尾的URL都轉向指定的Servlet。
路徑映射。路徑映射必須以'/'開始,以'/*'結尾,在這之間可以出現任意字符。路徑匹配通常用於將對某個目錄的所有請求轉向一個指定的Servlet。
默認的Servlet,'/'。默認的Servlet映射用於定義一個在沒有給出路徑信息時請求轉向的Servlet。
17 配置servlet時初始化參數的方式
初始化web應用程序參數(<contes-param>必須出現在任何Servlet標記之前)
<contes-param>
<param-name>charset</param-name>
<param-value>utf-8</param-value>
</contes-param>
初始化參數 對單個的servlet
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param>
18 response對象輸出文本,二進制數據
getWrite() :文本
getOutputStream():文本 ,但是一般都是發送非文本的二進制信息
19 談談你對session的了解 :
(答:
首先從字面意思來解釋他,就是會話的意思嘛。
當你啟動一個服務的時候調用HttpServletRequest.getSession(true)這個的語句的時候,session對象就被創建了。服務器可以為瀏覽器創建並維護一個session對象,他的作用是來存放數據的。在創建session的同時,服務器也會為這個session對象產生一個唯一的編號sessionID,這個sessionID是放在瀏覽器里的。當你第二次去訪問服務器的時候,服務器就會通過這個sessionID來檢查到以前的session對象,並進行對其訪問。
可以為session刪除的時候,是在session超時的時候,或者是調用了session的invalidate()方法,也可以是服務器關閉或停止的時候。並不會因為瀏覽器的關閉的時候,session對象唄刪除。
)
20 servletConfig 與servletContext 對象的使用
servletConfig:初始化參數
servletContext:上下文對象 只創建一次
21 cookie 與 session的區別:(創建 作用 保存位置)
(答:cookie是以鍵值對的方式保存在客戶端,session對象是保存在服務器的,創建session的時候會創建一個sessionID,sessionID是保存在客戶端的。)
創建:創建了一個cookie,並將他發送到瀏覽器,默認情況下它是一個會話級別的cookie:存儲在瀏覽器的內存中,用戶退出瀏覽器之后被刪除。
server端程序(如Servlet)調用HttpServletRequest.getSession(true)這樣的語句時才會被創建。
保存位置:cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
22 提交表單上傳文件時用提交的方式:
(答:上傳文件,在一個form表單里,需要定義enctype="multipart/form-data" 提交方式為post)
enctype="multipart/form-data" post
24 jar包存放的位置:
WEB-INF/lib
25 get方式與post方式提交的區別:
提交數據類型:get 一般提交文本;post提交文本,二進制文本。
提交數據長度:get有一定的長度;post沒有限制。
提交數據可見性:get 作為URL地址的一部分顯示在瀏覽器的地址欄;post作為請求的消息體,不可見。
提交數據緩存:get 緩存在瀏覽器URL歷史狀態中;post 不會被瀏覽器緩存。
總的來說: POST的安全性要比GET的安全性高。
27 servletContext對象作用:
(答:servletCotext對象主要用setAttribute方法來綁定參數,使用getAttribute來得到綁定的參數)
setAttribute綁參數 與 得到參數getAttribute
28 重定向過程:(對應的狀態碼(302))
(答:先是瀏覽器發送http請求,服務器接收請求響應個302狀態碼給瀏覽器,然后瀏覽器接收302后,再發送個http請求,請求一個url地址。最后服務器接收請求,跳到新的地址)
客戶瀏覽器發送http請求----》web服務器接受后發送302狀態碼響應及對應新的location給客戶瀏覽器--》客戶瀏覽器發現是302響應,則自動再發送一個新的http請求,請求url是新的location地址----》服務器根據此請求尋找資源並發送給客戶。在這里location可以重定向到任意URL,既然是瀏覽器重新發出了請求,則就沒有什么request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶可以觀察到地址的變化的。重定向行為是瀏覽器做了至少兩次的訪問請求的。
29 什么叫URL重寫:
URL重寫就是首先獲得一個進入的URL請求然后把它重新寫成網站可以處理的另一個URL的過程
30 JSP動作,(include forWord) 指令:(taglib include page)
(你了解的JSP的動作有哪些,指令有哪些,分別的作用是什么:
答:動作有include和forWord兩種,指令有page include taglib 三種。
include作用(動作)的是把查詢的那個頁面插入到當前這個頁面來;
forWord作用就是跳轉到forWord里那個page的地址去;
page就是為當前的這個頁面做一些指令的;
include(指令)就是把另外一個文件包含在jsp中;
taglib 就是一般用來如何訪問標簽庫的一些准備工作的
)
<jsp:include>動作: 是一種動態的包含,它把顯示的結果查入到當前頁面來顯示。其語法格式為: <jsp:include page=”localURL” flush=”true”> Page表示相對路徑;flush為真時表示緩沖區填滿時自動清空。
<jsp:forward>動作: 是將客戶端所發出來的請求,從一個JSP頁面轉發到另一個JSP頁面。其語法格式為: <jsp:forward page=”relativeURL” />
Page指令為當前頁面提供處理指令
Include指令用於把另一個文件包含在JSP中
Taglib指令制定如何包含和訪問自定義標簽庫
31 jsp導入標簽庫 :
(答:就jsp需要導入標簽庫,首先需要兩個jar文件,一個提供的是jsp標准庫的API類,另一個提供的是標記庫的實現類。我們是把jar文件放在WEB-INF下的lib目錄下的。再到jsp頁面中使用taglib指令把他導入jsp中,例如:<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %> c就是一個前綴)。
需要兩個JAR文件。第一個文件是jstl.jar,它為JSTL標記庫提供API類。第二個文件是standard.jar,它提供了標記庫的實現類 。復制到WEB-INF目錄下的lib子目錄下
通過<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>引入到jsp中。 核心標准標記庫
32 javaBean的規范:
(答:他必須是個公共類;
有一個空的構造函數,
屬性都是私有的,通過getter()setter()方法來得到和設置屬性值,所有要有getter()和setter()方法,
要實現Serializable 接口)
JavaBean 類必須是一個公共類,並將其訪問屬性設置為 public。
JavaBean 類必須有一個空的構造函數。
一個JavaBean類不應有公共實例變量,類變量都為private。要訪問這些類變量,應該通過一組存取方法(getXxx 和 setXxx)來訪問,不能以大寫字母開始命名成員變量。
JavaBean應該是可序列化(serializable)的,即實現java.io.Serializable 接口
33 jsp指令:(taglib include page)
Page指令為當前頁面提供處理指令
Include指令用於把另一個文件包含在JSP中
Taglib指令制定如何包含和訪問自定義標簽庫
34 隱式對象:
out session page request response config pageContext application exception
35 jsp遍歷數據:
<c:foreach>
<c:forTokens>標記用於循環處理字符串中由分隔符分隔的各成員
37 Web應用程序狀態管理的解決方案:
1 表單隱藏字段
2 Cookie
3 URL重寫
4 Session會話跟蹤
38 說說 context request session 各自的生命周期是怎樣的:
(答:context是一個上下文對象,每個容器都會產生一個實現servletcontext接口的實例,在服務停止的時候,context就結束了。
request的生命周期是request請求域,一個請求結束,則request結束。
session的生命周期是session會話域,瀏覽器訪問的時候,session就開始,當session超過時間限制后,session注銷而失效 或是人為使用session.invalidate();使用session失效; 或是關閉服務器,session就失效了。)
39 常用的監聽器:
上下文監聽器
會話監聽器
請求監聽器
HttpSessionBindingListener是唯一個不需要再web.xml中注冊的listener
40 配置過濾器:
<filter>
<filter-name>Filter1</filter-name>
<filter-class>com.cy.Filter1</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter1</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
41 jsp運行階段:
翻譯 編譯 類裝載 類實例化 初始化 服務 銷毀
42 靜態 動態包含數據:
include 指令用於把例外一個文件靜態包含在jsp中。語法:<%@ include file = “url”%>,特點:共享request請求域,先包含再編譯,不檢查包含頁面的變化。
<jsp:include>動態包含,語法:<jsp:include page=”url” flush=”true”>特點:不共享request請求域,先編譯再包含,會檢查包含頁面的變化。
43 EL表達式取值的順序:
(在EL表達式中如果我們沒有規定他的作用域是哪個,那么他的作用域執行順序是怎樣的:
答:他的順序是先是page 接着是request 然后是session 最后是application。
)
作用域順序 page request session application
44 XMLHttpRequest屬性和方法:
(Ajax中的對象XMLHttpRequest是用來做什么的以及他的屬性和方法有哪些:
答: 首先要知道XMLHttpRequest用於在后台與服務器交換數據用的。
他的屬性有兩種,就是responseText,一字符串的形式響應數據,還有就是 responseXML是以xml的形式響應數據。
他的方法我們最常用的就是open()方法。里面帶有三個參數,一個是請求方式method:get/post,第二個需要跳轉的文件位置,第三個就是是同步還是異步。
)
屬性:
responseText:會的字符串形式的響應數據
responseXML:獲得XML形式的響應數據
方法:
open(method,url,async)
- method:請求的類型;GET 或 POST
- url:文件在服務器上的位置
- async:true(異步)或 false(同步)
open(String):
- string:僅用於 POST 請求
45 表單提交文件:
(答:要顯示表單提交文件就要使用enctype="multipart/form-data",並且提交方式必須為post)。
enctype="multipart/form-data" 不能用get方式
48 http處理流程 :
(答:首先瀏覽器一服務器建立連接,接着瀏覽器發送http請求,然后服務器響應http請求,把請求得到的內容返回給瀏覽器,最后服務器關閉連接)
客戶端和web服務器建立連接--->客戶端發送HTTP請求--->服務器端接收客戶端的HTTP請求,生成HTTP響應回發--->服務器端關閉連接。客戶端解析回發響應,恢復頁面。
49 怎么實現轉發?
(答:實現轉發就是使用request的getRequestDispatcher()方法,例如:request.getRequestDispatcher(/path).forword(req,resp);這樣就實現了轉發。)
request.getRequestDispatcher(/path).forword(req,resp);
50 為什么要管理用戶狀態?
(答:因為瀏覽器發送請求時,http是一種無狀態的協議,當你再一次發送請求的時候,服務器又會重新去創建頁面。之前訪問存在的信息都不見了。所以我們需要管理用戶的狀態。)
web應用程序是無狀態的。每次從服務器請求頁的時候,都會創建網頁類的一個新實例。這通常意味着每次在往返過程中會丟失該頁的及控件中的所有信息。http是一種無狀態連接。
51 web必要的目錄結構:
(答:WEB-INF,WEB-INF下的lib文件與web.xml配置文件。一些有關網頁的代碼,如html,css,jsp文件。一些需要導入的包,java代碼。)
配置文件(web.xml) ;靜態文件和JSP類;文件和包
52 過濾器對應請求的四種類型:forWord include request error
(答:四種類型是:request,include,forWord,error,一般默認方式是request)
過濾器對應的請求方式,可以是REQUEST、INCLUDE、FORWARD、ERROR四種之一,默認是REQUEST
