------------------------------- 1、Web開發:Servlet 3開發技術 ------------------------------- html
一、什麼是SERVLET?前端
Servlet就是一個運行在Web容器中的Java程序,Servlet用來接收和響應從客戶端發送過來的請求,一般使用HTTP協議。java
Servlet是一個特殊的Java程序,一個基於Java的Web應用一般包含一個或多個Servlet類。Servlet不可以自行建立並執行,它是在Servlet容器中運行的,容器將用戶的請求傳遞給Servlet程序,並將Servlet的響應回傳給用戶。程序員
Servlet處於服務器進程中,它經過多線程方式運行其service()方法,一個實例能夠服務於多個請求,而且其實例通常不會銷燬。web
二、SERVLET的生命週期spring
Web容器加載Servlet並將其實例化後,Servlet生命週期開始,容器運行其init()方法進行Servlet的初始化;請求到達時調用Servlet的service()方法,service()方法會根據須要調用與請求對應的doGet或doPost等方法;當服務器關閉或項目被卸載時服務器會將Servlet實例銷燬,此時會調用Servlet的destroy()方法。編程
三、SERVLET中FORWARD和REDIRECT的區別json
重定向(redirect):實際上是兩次request,第一次,客戶端request,A服務器響應,並response回來,告訴瀏覽器,你應該去B,而後客戶端再次向B發出請求。此時能夠看到瀏覽器地址欄中的url變了,並且歷史的回退按鈕也亮了。重定向能夠訪問本身web應用之外的資源。在重定向的過程當中,傳輸的信息會被丟失。
請求轉發(forward):是服務器內部把對一個request/response的處理權,移交給另一個.對於客戶端而言,它只知道本身最先請求的那個A,而不知道中間的B,甚至C、D。請求轉發過程當中,傳輸的信息不會丟失。設計模式
請求轉發(forward)是容器中控制權的轉向,是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL 的響應內容讀取過來,而後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,因此它的地址欄中仍是原來的地址。
重定向(redirect)就是服務器端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址,所以從瀏覽器的地址欄中能夠看到跳轉後的連接地址,很明顯redirect沒法訪問到服務器保護起來資源,可是能夠從一個網站redirect到其餘網站。forward更加高效,因此在知足須要時儘可能使用forward(經過調用RequestDispatcher對象的forward()方法,該對象能夠經過ServletRequest對象的getRequestDispatcher()方法得到),而且這樣也有助於隱藏實際的連接;在有些狀況下,好比須要訪問一個其它服務器上的資源,則必須使用重定向(經過HttpServletResponse對象調用其sendRedirect()方法實現)。
四、Servlet 3中的異步處理指的是什麼? 瀏覽器
在Servlet 3中引入了一項新的技術可讓Servlet異步處理請求。該方式很是適合那些執行時間很長,但用戶並不須要當即獲得結果的請求。
有了異步處理的支持,Servlet 線程再也不須要一直阻塞,直到業務處理完畢才能再輸出響應,最後才結束該 Servlet 線程。在接收到請求以後,Servlet 線程能夠將耗時的操做委派給另外一個線程來完成,本身在不生成響應的狀況下返回至容器。針對業務處理較耗時的狀況,這將大大減小服務器資源的佔用,而且提升併發處理速度。
Servlet異步處理的工做流程:
第一步,須要把你的servlet聲明爲syncSupport,servlet3 提供了註解的方式,也可使用web.xml配置的方式。
第二步,實現你的Servlet 的service方法。(1)調用request.startAsync()開啓異步模式,該方法將返回AsyncContext對象用於後臺線程異步處理該請求。後臺線程可以使用AsyncContext的getRequest()和getResponse()方法來讀取請求和寫Response,處理完成後調用AsyncContext.complete()結束請求處理。(2)service方法能夠退出了。(servlet 3還支持你將請求異步的dispatch到另外一個請求地址)。
像Tomcat這樣的Servlet容器,每一個請求須要佔用它一個線程,直到該請求被處理完才釋放。對於那些處理時間長,並且大部分是IO類操做的請求,這樣作會很浪費,由於處理它們的容器線程會花很長時間進行等待,卻不能爲其餘請求服務。若是有大量這樣的請求,容器的線程就會很快被佔滿,致使其餘請求被迫等待甚至超時。
因而Servlet3 添加了異步請求處理(asynchronous request processing)的新特性,有了它咱們就能夠把那些處理時間長的IO類請求丟給後臺線程去執行,從而能夠快速釋放容器線程用以服務更多的新請求。這樣作能夠大大提高咱們服務的性能(吞吐、時延和併發上都有改進)。下面將詳細介紹怎麼使用這個新特性。
有人可能會質疑,既然都有多線程了,還須要異步處理請求嗎?答案是確定的,由於若是一個任務處理時間至關長,那麼Servlet或Filter會一直佔用着請求處理線程直到任務結束,隨着併發用戶的增長,容器將會遭遇線程超出的風險,這這種狀況下不少的請求將會被堆積起來然後續的請求可能會遭遇拒絕服務,直到有資源能夠處理請求爲止。
異步特性能夠幫助應用節省容器中的線程,特別適合執行時間長並且用戶不須要獲得結果的任務,若是用戶不須要獲得結果則直接將一個Runnable對象交給Executor並當即返回便可。
推薦閱讀: Servlet3.0 新特性:新的註解支持、異步處理支持、可插拔組件支持
推薦閱讀:異步請求:原生Servlet實現、SpringMVC實現、SpringBoot實現
五、Servlet中如何獲取用戶提交的查詢參數或表單數據?
答:能夠調用請求對象HttpServletRequest的getParameter()方法,經過參數名得到參數值。若是有包含多個值的參數(例如複選框),能夠經過請求對象的getParameterValues()方法得到。固然也能夠經過請求對象的getParameterMap()得到一個參數名和參數值的映射(Map)。
六、Servlet中如何獲取用戶配置的初始化參數以及服務器上下文參數?
答:能夠經過重寫Servlet接口的init(ServletConfig)方法,並經過ServletConfig對象的getInitParameter()方法來獲取Servlet的初始化參數。
能夠經過ServletConfig對象的getServletContext()方法獲取ServletContext對象,並經過該對象的getInitParameter()方法來獲取服務器上下文參數。
固然,ServletContext對象也可經過請求對象的getServletContext()方法來得到。
七、如何設置請求的編碼以及響應內容的類型?
答:(1)經過請求對象ServletRequest的 setCharacterEncoding(String)方法能夠設置請求的編碼,其實要完全解決亂碼問題就應該讓頁面、服務器、請求和響應、Java程序都使用統一的編碼,最好的選擇固然是UTF-8;
(2)經過響應對象ServletResponse的 setContentType(String)方法能夠設置響應內容的類型,固然也能夠經過HttpServletResponsed對象的setHeader(String, String)方法來設置。
八、過濾器有哪些做用和用法?
答:(1)做用:對Web應用來講,過濾器是一個駐留在服務器端的Web組件,它能夠截取客戶端和服務器之間的請求與響應信息,並對這些信息進行過濾。
(2)過濾流程:當Web容器接受到一個對資源的請求時,它將判斷是否有過濾器與這個資源相關聯。若是有,那麼容器將把請求交給過濾器進行處理。在過濾器中,你能夠改變請求的內容,或者從新設置請求的報頭信息,而後再將請求發送給目標資源。當目標資源對請求做出響應時候,容器一樣會將響應先轉發給過濾器,在過濾器中你能夠對響應的內容進行轉換,而後再將響應發送到客戶端。
(3)常見用途:對請求進行統一認證、對請求進行記錄和審覈、對請求的參數數據進行過濾或替換、轉換圖象格式、對響應內容進行壓縮以減小傳輸量、對請求或響應進行加解密處理、觸發資源訪問事件、對XML的輸出應用XSLT等。
和過濾器相關的接口主要有:Filter、FilterConfig和FilterChain。
Java Web開發中的過濾器(filter)是從Servlet 2.3規範開始增長的功能,並在Servlet 2.4規範中獲得加強
九、監聽器有哪些做用和用法?
答:(1)監聽器的做用:在建立和銷燬 application、session、request對象時,或向 application、session、request對象中添加、修改、刪除屬性時,監聽器listener負責監聽以上的狀態變化,而後自動執行預約義代碼的。
(2)監聽器分類:
session的銷燬有兩種狀況:
(1)session超時;
(2)經過調用session對象的 invalidate()方法,使session失效。
十、web.xml文件中,能夠配置哪些內容?
web.xml文件,用於配置Web應用的相關信息,如:監聽器(listener)、過濾器(filter)、 Servlet、相關參數、會話超時時間、安全驗證方式、錯誤頁面等。下面是一些開發中常見的配置:
(1)配置Spring上下文加載監聽器:加載Spring配置文件並建立IoC容器
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
(2)配置Spring編碼過濾器,防止中文亂碼
<filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
(3)配置SpringMVC前端控制器DispatcherServlet,匹配全部的請求
<!-- 配置前端控制器DispatcherServlet,並匹配全部的請求 --> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
(4)配置會話超時時間爲10分鐘:
<session-config> <session-timeout>10</session-timeout> </session-config>
(5)配置404和Exception的錯誤頁面:
<error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page>
(6)配置安全認證方式:
<security-constraint> <web-resource-collection> <web-resource-name>ProtectedArea</web-resource-name> <url-pattern>/admin/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> </login-config> <security-role> <role-name>admin</role-name> </security-role>
補充:若是Web提供了有價值的商業信息或者是敏感數據,那麼站點的安全性就是必須考慮的問題。安全認證是實現安全性的重要手段,認證就是要解決 「Are you who you say you are?」的問題。認證的方式很是多,簡單說來能夠分爲三類:
A. What you know? — 口令
B. What you have? — 數字證書(U盾、密保卡)
C. Who you are? — 指紋識別、虹膜識別
在Tomcat中能夠經過創建安全套接字層(Secure Socket Layer, SSL)以及經過基本驗證或表單驗證來實現對安全性的支持。
說明:Servlet3 提供了基於註解的配置方式,能夠分別使用@WebServlet、@WebListener、@WebFilter註解,進行Servlet、Listener、Filter組件的配置。
------------------------------- 2、Spring 框架 -------------------------------
一、什麼是框架?
框架(Framework):IT語境中的框架,特指爲解決一個開放性問題而設計的具備必定約束性的支撐架構,在此結構上能夠根據具體問題擴展.安插更多的組成部分.從而更迅速和更方便的構建完整的解決問題的方案.
框架的特色:
二、選擇使用Spring框架的緣由(Spring框架爲企業級開發帶來的好處有哪些)?
答:
Spring 是輕量級的J2EE框架,Spring提供了IOC和AOP的支持,主要針對javabean的生命週期進行管理;Spring能夠單獨使用,也能夠跟其它框架組合使用。
三、在Web項目中如何得到Spring的IoC容器?
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
四、介紹一下Spring的兩大核心功能
答:(1)控制反轉和依賴注入:對象建立的控制權交給Spring容器進行管理。核心原理:工廠模式+反射+配置文件
(2)面向切面編程: 使用動態代理的方式,在方法執行先後或出現異常後作相關邏輯。咱們主要使用AOP來作: 事務處理、權限判斷、日誌記錄。
五、什麼是IoC和DI?DI是如何實現的?
答:IOC也叫作控制反轉,是Inversion of Control的縮寫,DI(Dependency Injection)叫依賴注入,是對IoC更簡單的詮釋。
控制反轉是把傳統上由程序直接操控的對象的調用權交給Spring容器,經過Spring容器來實現對象組件的裝配和管理。所謂的"控制反轉"就是對組件對象控制權的轉移,從程序代碼自己轉移到了外部容器,由容器來建立對象並管理對象之間的依賴關係。IoC體現了好萊塢原則 - "Don’t call me, we will call you"。
依賴注入的基本原則:應用組件不該該負責查找資源或者其餘依賴的協做對象。配置對象的工做應該由容器負責,查找資源的邏輯應該從應用組件的代碼中抽取出來,交給容器來完成。DI是對IoC更準確的描述,即組件之間的依賴關係由容器在運行期決定,形象的來講,即由容器動態的將某種依賴關係注入到組件之中。
六、Spring中自動裝配的方式有哪些?
說明:自動裝配沒有自定義裝配方式那麼精確,並且不能自動裝配簡單屬性(基本類型、字符串等),在使用時應注意。
七、Spring中的自動裝配有哪些限制?
八、依賴注入時如何注入集合屬性?
能夠在定義Bean屬性時,經過<list> 、<set> 、 <map> 、 <props> 分別爲其注入列表、集合、映射和鍵值對(都是字符串的映射屬性)。
九、Spring IoC容器配置Bean的方式?
十、闡述Spring框架中Bean的生命週期?
答:Spring框架中,一旦把一個Bean歸入Spring IOC容器之中,這個Bean的生命週期就會交由容器進行管理,通常擔當管理角色的是BeanFactory或者ApplicationContext,認識一下Bean的生命週期活動,對更好的利用它有很大的幫助。
下面以BeanFactory爲例,說明一個Bean的生命週期活動
推薦閱讀:Spring Bean生命週期詳解
十一、BeanFactory 和 ApplicationContext 對bean的管理上,有什麼區別?
十二、Spring中Bean的做用域有哪些?
在Spring的早期版本中,僅有兩個做用域:singleton 和 prototype。singleton單例模式下,Bean以單例存在;prototype原型模式下,每次從容器中調用Bean,都會返回一個新的實例。
Spring 2.x中針對WebApplicationContext新增了3個做用域,分別是:
說明:單例模式和原型模式都是重要的設計模式。通常狀況下,無狀態或狀態不可變的類適合使用單例模式。
在傳統開發中,因爲DAO持有Connection這個非線程安全對象於是沒有使用單例模式;但在Spring環境下,全部DAO類對能夠採用單例模式,由於Spring利用AOP和Java API中的ThreadLocal對非線程安全的對象進行了特殊處理。
1三、Spring中如何使用註解來配置Bean?有哪些相關的註解?
首先須要在Spring配置文件中增長註解自動掃描配置;而後用@Component、@Controller、@Service、@Repository註解來標註類,由Spring IoC容器來控制類對象的建立。
以上四個註解沒有本質區別,只不過@Controller一般用於控制器、@Service一般用於業務邏輯類、@Repository一般用於持久層類(如:DAO)、@Component一般用於普通的類。
1四、解釋一下什麼叫AOP(面向切面編程)?
AOP(Aspect-Oriented Programming)指一種程序設計範型,該範型以一種稱爲切面(aspect)的語言構造爲基礎,切面是一種新的模塊化機制,用來描述分散在對象、類或方法中的橫切關注點(crosscutting concern)。
1五、你是如何理解"橫切關注"這個概念的?
"橫切關注"是會影響到整個應用程序的關注功能,它跟正常的業務邏輯是正交的,沒有必然的聯繫,可是幾乎全部的業務邏輯都會涉及到這些關注功能。一般,事務、日誌、安全性等關注就是應用中的橫切關注功能。
1六、你如何理解AOP中的鏈接點(Joinpoint)、切點(Pointcut)、加強(Advice)、引介(Introduction)、織入(Weaving)、切面(Aspect)這些概念?
說明: Advice在國內的不少書面資料中都被翻譯成"通知",可是很顯然這個翻譯沒法表達其本質,有少許的讀物上將這個詞翻譯爲"加強",這個翻譯是對Advice較爲準確的詮釋,咱們經過AOP將橫切關注功能加到原有的業務邏輯上,這就是對原有業務邏輯的一種加強,這種加強能夠是前置加強、後置加強、返回後加強、拋異常時加強和包圍型加強。
------------------------------- 3、SpringMVC 框架 -------------------------------
一、什麼是MVC模式?
MVC全名是model view Controller,是模型(model)—視圖(view)—控制器(Controller)的縮寫,是一種軟件設計典範.
最簡單的實現,就是:jsp(view) + servlet(Controller) + javabean(model)
二、說一下對MVC框架的理解
經常使用的MVC框架有Struts二、SpringMVC,是爲了解決傳統的MVC模式(jsp+servlet+javabean)問題而出現的框架.
傳統MVC模式存在如下四種問題:
三、SpringMVC的執行流程
四、SpringMVC和Struts2有什麼不一樣?
SpringMVC 和 Struts2有如下六點不一樣,以下: