答辯每個人的總分為1.5分。每個人主要問3個問題。
開發流程===》系統架構====》項目子產品+功能===》項目得失
重定向與轉發:?
九個隐式對象?
get與post的區辨:?
jsp有靜态包含,動态包含,兩者的區辨:?
什麼是MVC:?
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
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)
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>
<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