碼迷,www.tparu.icu
吉利平特名人堂 > 編程語言 > 詳細

药业平特:熟悉基于JSP和Servlet的Java Web開發,對Servlet和JSP的工作原理和生命周期有深入了解,熟練的使用JSTL和EL編寫無腳本動態頁面,有使用監聽器、過濾器等Web組件以及MVC架構模式進行Java Web項目開發的經驗。

時間:2018-07-02 01:29:10      閱讀:2519      評論:0      收藏:0      [點我收藏+]

吉利平特名人堂 www.tparu.icu 標簽:border   org   權限   post請求   通信   love   生命周期   客戶端   傳輸協議   

熟悉基于JSPServletJava Web開發,ServletJSP的工作原理和生命周期有深入了解,熟練的使用JSTLEL編寫無腳本動態頁面,有使用監聽器、過濾器等Web組件以及MVC架構模式進行Java Web項目開發的經驗。

1、說一說Servlet生命周期(非常重要)

Servlet生命周期包括三部分:

初始化:Web容器加載servlet,調用init()方法 只執行一次

處理請求:當請求到達時,運行其service()方法。service()自動調用與請求相對應的doXXX(doGet或者doPost)方法。 可執行多次

銷毀:服務結束,web容器會調用servlet的distroy()方法銷毀servlet。 只執行一次

2、get提交和post提交有何區別

2)請求的時候參數的位置有區別,get的參數是拼接在url后面,用戶在瀏覽器地址欄可以看到,不安全。post是放在請求體中更安全。。

3)能提交的數據有區別,get方式能提交的數據只能是文本,且大小不超過1024個字節,而post不僅可以提交文本還有二進制文件。

所以說想上傳文件的話,那我們就需要使用post請求方式

 

3、JSP與Servlet有什么區別

其實JSP本質Servlet,每次運行的時候JSP都首先被編譯成servlet文件,然后再被編譯成

.class文件運行。ServletJSP最主要的不同點在于,Servlet完全是Java代碼,并且完全從表現層中的HTML里分離開來。而JSPJavaHTML組合成一個,JSP側重于視圖,Servlet主要用于控制邏輯。

struts框架中,JSP位于MVC設計模式的視圖層,而Servlet位于控制層.

 

 

4、doGet與doPost方法的兩個參數是什么

HttpServletRequest:封裝了與請求相關的信息

HttpServletResponse:封裝了與響應相關的信息

5、request.getAttribute()和request.getParameter

1)有setAttribute,沒有setParameter方法

2)getParameter獲取到的值只能是字符串,不可以是對象,而getAttribute獲取到的值是Object類型的。

3)通過form表單或者url來向另一個頁面或者servlet傳遞參數的時候需要用getParameter獲取值;getAttribute只能獲取setAttribute的值

4)setAttribute是應用服務器把這個對象放到該頁面所對應的一塊內存當中,當你的頁面服務器重定向到另一個頁面的時候,應用服務器會把這塊內存拷貝到另一個頁面對應的內存當中。通過getAttribute可以取得你存下的值,當然這種方法可以用來傳對象。

session也是一樣的道理,這是說request和session的生命周期不一樣而已。

6、JSP有哪些內置對象,作用是什么?(非常重要)

 

JSP內置對象

名稱

作用

request

用戶端請求的信息

response

對客戶端的響應信息

session

與請求有關的會話期

pageContext

管理網頁屬性

application

服務器關閉之前可以在不同的用戶之間共享信息

out

向客戶端輸出數據

config

取得服務器的配置信息

page

指網頁本身

exception

顯示異常信息

7、四種會話跟蹤技術作用域

1)page:一個頁面

2)request::一次請求

3)session:一次會話

4)application:服務器從啟動到停止。

8、JSP中動態INCLUDE和靜態INCLUDE有什么區別(非常重要)

動態INCLUDE用jsp:include動作實現 <jsp:include page="included.jsp" flush="true" />會檢查所含文件中的變化,適合用于包含動態頁面,

并且可以帶參數.

靜態INCLUDE用include不會檢查所含文件的變化,適用于包含靜態頁面<%@ include file="included.htm" %>

Include在電商項目中的前端頁面使用,用于提取頁頭和頁腳,因為頁頭和頁腳在許多頁面都包含

9、forward和redirect的區別(非常重要)

轉發與重定向

1)從地址欄顯示來說 

服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把讀取內容容再發給瀏覽器.瀏覽器根本不知道服務器發送

的內容從哪里來的,所以它的地址欄還是原來的地址.redirect發送一個狀態碼,告訴瀏覽器去請求那個地址.所以地址欄顯示的是

新的URL.

2)從數據共享來說 

forward:轉發頁面和轉發到的頁面可以共享request里面的數據.

redirect:不能共享數據.

3) forward:一般用于用戶登陸的時候,根據角色轉發到相應的???

redirect:一般用于用戶注銷返回主頁面和跳轉到其它的網站等.

在項目中 redirect一般用于增刪改跳轉到查詢頁面

 

4)從效率來說 

forward:高.

redirect:低.

5、  說出JSP6個動作指令和作用?

·jsp:include:引入一個靜態或動態的文件。

·jsp:useBean:實例化一個JavaBean。

·jsp:setProperty:設置JavaBean的屬性。

·jsp:getProperty:獲取某個JavaBean的屬性。

·jsp:forward:轉到一個新的頁面。

·jsp:plugin:根據瀏覽器類型為Java插件生成標記。

6、  JSP3種跳轉方式

·response.sendRedirct()方法:重新發送請求。

·<jsp:forward page=”跳轉的頁面”/>:是服務器端的跳轉

 

·response.setHeader()方法:與response.sendRedirect()方法。

3.有三臺服務器,如果在一臺服務器上登陸了這個用戶,其他兩臺就不能再登陸這個用戶,使用session共享,你是怎么做的。

把所有的session的數據保存到Mysql服務器上,所有Web服務器都來這臺Mysql服務器來獲取Session數據。

6.如何處理servlet的線程不安全問題

線程安全就是多線程操作同一個對象不會有問題,線程同步一般來?;は叱貪踩?,所以可以在Servlet的線程里面加上同步方法或同步塊。(Synchronized)可以保證在同一時間只有一個線程訪問,(使用同步塊會導致性能變差,最好不去使用實例變量)

 

 

13.獲取頁面的元素和值有幾種方式,分別說一下

request.getParameter() 返回客戶端的請求參數與值

request.getParameterValues() 返回包含參數的所有值的數組

14.servlet和javaScript的區別,他們分別是什么作用

一個是服務端,一個是客戶端

Servlet是獨立于平臺和協議的服務器端的java應用程序,可以動態生成web頁面,并采用響應--請求的模式提供web服務

javaScript是一種解釋性語言,用于向html頁面提供交互行為,通常被直接嵌入在html頁面中

servletjava語言編寫的web應用

js是基于html上的一種解釋語言

15.jsp的執行原理

 客戶端發出請求(request),jsp引擎將jsp頁面翻譯成servletjava源文件,在Tomcat中將源文件編譯成class文件,并加載到內存中執行,把結果返回(response)給客戶端。

17.HTML和Servlet的異同

不同:
Html是靜態,servlet是動態
html頁面由服務器直接返回,
servlet是用來處理客戶請求,并返回html頁面
//servlet需要服務器調用servlet方法生成動態html頁面,且需要在web.xml中配置url路徑

18.會話跟蹤有哪些,他們的區別是什么

Cookie,sessionapplication,
Cookiehttp對象,客戶端與服務端都可以操縱

cookie是在客戶端保持狀態,session是在服務器端保持狀態,由于cookie是保存在客戶端本地的,所以數據很容易被竊取,當訪問量很多時,使用session則會降低服務器的性能,application的作用域是整個工程里只有一個,可以在不同瀏覽器之間共享數據,所有人都可以共享,因此application也是不安全的

19.session和application的作用

Session用于客戶端與服務器之間保持狀態的解決方案,數據保存在服務器內存中,底層是有cookie實現的

Application的作用域是整個工程里只有一個,可以在不同瀏覽器之間共享數據,所有人都可以共享,因此application是不安全的

 20.說說jsp的隱藏對象有哪些

Request,out,response , pageContext , session , application , config , page , exception,也即jsp的九大內置對象

21.request ,response,session 和 application是怎么用的

Request是客戶端向服務端發送請求

Response是服務端對客戶端請求做出響應

Sessionservlet中不能直接使用,需要通過getSession()創建,如果沒有設定它的生命周期,或者通過invildate()方法銷毀,關閉瀏覽器session就會消失

Application不能直接創建,存在于服務器的內存中,由服務器創建和銷毀

7.有幾種方式將頁面的值傳到后臺

可通過form表單的getpost將值傳遞到后臺,也可通過setAttribute()方法將值傳遞到后臺

28.一個form表單的值如何獲取

servlet中通過request.getParameter()方法可以獲取表單的值
或者是request.getParameterValuse();

29.傳遞參數到后臺有幾種方式

表單傳參,url傳參,jQuery.ajax傳參

30.Jsp中父頁面中怎么拿到子頁面的表單元素,不是拿值怎么拿

通過設置屬性setAttribute(),通過getAttribute()拿值,getParameter()方法可以做到

31.定義一個String類型的字符串,如果重定向之后還能不能獲得這個數據

不能

32.404和500是什么意思

404 :找不到url請求的路徑,一般是工程名不對或者拼寫錯誤

500 :服務器內部錯誤,一般是服務器內部代碼編寫錯誤,也有可能是拋異常導致

33.寫出5種JSTL常用標簽

<c:if>,<c:item>,<c:foreach>,<c:out>,<c:set>

34.在項目名和頁面路徑都沒有錯的情況下為什么會報404錯誤,它有什么原理在里面

工程名不對或者拼寫錯誤,404錯誤一般是找不到客戶端請求的文件

35.說出servlet的生命周期

web服務器啟動的時候,servlet生命周期開始,通過init方法初始化servlet,通過不同的請求調用doGetdoPost方法,最后通過destroy()方法進行銷毀

 36.Jsp頁面把一個元素隱藏的方法

通過使用屬性hidden可以將元素隱藏

37.Session,application,cookie的區別

Session不能通過new創建,要通過調用getSession()方法創建,數據保存在服務器端,單個客戶端session是共享的,底層是由cookie實現的,大小沒有限制

Application的作用域是整個工程只有共享一個,生命周期比session

Cookie需要通過new創建,數據保存在客戶端中,cookie保存的數據不能超過4k,不安全

38.我們在web應用開發過程中經常遇到輸出某種編碼的字符,如ISO-8859-1,如何輸出一個某種編碼的字符串

如將ISO-8859-1輸出為GBK格式的字符, 通過new String(byte[] bytes,String charset) 構造器設置編碼構造一個新的Stringnew String("ISO-8859-1","GBK");

39.Jsp里有那些標簽

jsp:include

 40.怎么判斷用戶請求時是第一次,如果客戶端和服務端斷開怎么連到上一次操作

通過session中的isNew()可以判斷是否是新用戶

41.請說下會話跟蹤技術

會話跟蹤技術是用于維持客戶端和服務器端通信的技術。

通過session,cookie或者application可實現會話跟蹤

42.如果創建servlet實例不用構造方法,怎么創建一個servlet實例

Web容器會自動為servlet寫一個無參的構造器,它使用class.forName("").newInstance()反射來創建servlet實例的

43.Servlet是安全的嗎?當service有一個實例變量,doGet和doPost去調用這個變量,會出現什么問題,你是如何解決的

是線程不安全的,因為servlet是單例模式,當多個客戶端共同訪問的時候線程不安全。

盡量用局部變量,同步塊,如果當前字段是不會改變的,用final修飾

44.Servlet和過濾器的區別

Servlet:是用來處理客戶端發送的請求,然后生成響應并將其傳給server服務器,

最后服務器將響應返回給客戶端

過濾器:是用于 servlet容器調用servlet的過程進行攔截

可以在servlet進行響應處理前后做一些特殊的處理

45說明一下jsp中<jsp: include page..>和<%@ include file%>的區別

<jsp:include page=""/> 動態導入

  是行為元素、是在請求處理階段引入的,引入執行頁面或servlet所生成的應答文本

先編譯,后包含,就是將每個jsp頁面都單獨轉化成html頁面,最后再將所有的html頁面相加,如果有相同變量不會沖突

<%@ include file="" %> 靜態導入

是指令元素

是編譯時包含,引入靜態文本(html,jsp),JSP頁面被轉化成servlet之前和它融和到一起。先包含,后編譯

就是將多個jsp一起解析,最后再一起生成html頁面,如果有相同變量會沖突

46. pageContext有什么作用

可以使用pageContext對象來設定屬性,并指定屬性的作用范圍,提供了對JSP頁面內所有的對象及名字空間的訪問

48.Servlet是單例還是多例

是單例的,可以提高性能

49.Filter與攔截器怎么執行的

首先初始化過濾器,然后服務器組織過濾器鏈,所有的請求都必須需要先通過過濾器鏈,

過濾器鏈是一個棧,遵循先進后出的原則 ,所有的請求需要經過一個一個的過濾器,執行順序要根據web.xml里配置的<filter-mapping>的位置前后執行,每個過濾器之間通過chain.doFilter連接, 最后抵達真正請求的資源,執行完后再從過濾器鏈退出

50.Jsp中如何進行分頁,項目中如何進行分頁?

需要上一頁和下一頁的超鏈接(至少需要這兩個),通過計算當前頁的頁碼獲取下一頁數據

的起始位置,然后在 MySql 中查詢,如果使用 Oracle 則需要另外計算下一頁數據的結

束位置。

使用hibernate框架,它可以針對不同的數據庫自動產生為你分頁的代碼。

 

4、html 和 jsp 的區別

1.最簡單的區別就是,HTML能直接打開,jsp只能發布到Tomact等服務器上才能打開 。
2.定義上HTML頁面是靜態頁面可以直接運行,JSP頁面是動態頁它運行時需要轉換成servlet。 
3.他們的表頭不同,這個是JSP的頭“ <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>”在表頭中有編碼格式和倒入包等。
4.也是很好區分的在jsp中用<%%>就可以寫Java代碼了,而html沒有<%%>。

 

 

 

服務器啟動時會建立一定數量的池連接,并一直維持不少于此數目的池連接??突Ф順絳蛐枰郵?,鏈接池驅動程序會返回一個未使用的池連接并將其表記為忙。如果當前沒有空閑連接,池驅動程序就新建一定數量的連接,新建連接的數量有配置參數決定。當使用的池連接調用完成后,池驅動程序將此連接表記為空閑,其他調用就可以使用這個連接。

相當于每個車隊隊長手下有固定的車輛,需要車輛時隊長會安排車輛, 并將派出車輛記錄, 如果當前沒有車輛可使用,隊長會呼叫和他一樣的其他隊長 派給他一定量的車輛.

 

5、

6、

7、2*****

Servlet事件監聽器 

監聽器就是一個實現特定接口的普通java程序,這個程序專門用于監聽另一個java對象的方法調用或屬性改變,當被監聽對象發生上述事件后,監聽器某個方法將立即被執行。

過濾器,是在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然后再傳入 action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者請求action前統一設置字符集,

 

攔截器,是在面向切面編程的時候用,就是在你的service或者一個方法,前調用一個方法,或者在方法后調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前打印出字符串(或者做其它業務邏輯的操作),也可以在你調用方法后打印出字符串,甚至在你拋出異常的時候做業務邏輯的操作。
攔截器用于 提取一些公共代碼在@before中執行,省去了重復代碼

對用戶提交的數據進行驗證.
攔截器與過濾器的區別:
攔截器是基于java的反射機制的,而過濾器是基于函數回調。
攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。


執行順序:過濾前 – 攔截前 – Action處理 – 攔截后 – 過濾后。個人認為過濾是一個橫向的過程,首先把客戶端提交的內容進行過濾(例如未登錄用戶不能訪問內部頁面的處理);過濾通過后,攔截器將檢查用戶提交數據的驗證,做一些前期的數據處理,接著把處理后的數據發給對應的Action;Action處理完成返回后,攔截器還可以做其他過程(還沒想到要做啥),再向上返回到過濾器的后續操作。

3***EL表達式

簡介:EL 全名為Expression Language。EL表達式一般操作的是作用域(application,session,request,pageContext)中的屬性,EL變量指某一個作用域中的屬性。
注:el表達式操作不了局部變量!

用法:

使用EL表達式獲取數據語法:“${標識符}”

EL表達式語句在執行時,會調用pageContext.findAttribute方法,用標識符為關鍵字,分別從page、request、session、application四個域中查找相應的對象,找到則返回相應對象,找不到則返回”” (注意,不是null,而是空字符串)。 
示例:${user}

EL表達式也可以很輕松獲取JavaBean的屬性,或獲取數組、Collection、Map類型集合的數據,例如:
${user.address.city}
${user.list[0]}:訪問有序集合某個位置的元素
${map.key}  : 獲得map集合中指定key的值

3、JSTL

JSP Standard Tag Library ,JSP標準標簽庫,核心標簽庫://java.sun.com/jsp/jstl/core 包含 Web 應用的常見工作,比如:循環、表達式賦值、基本輸入輸出等。

引用 <%@ taglib prefix="c" uri="//java.sun.com/jsp/jstl/core" %>

 

8、4*****

1.簡單的談一下SpringMVC的工作流程?

1.從第一點開始,請求的開始當然來源的用戶訪問的url,之后SpringMVC的工作正式開始,就好比一個人進城,必須要先經過城門才能進去,請求也是一樣,他必須先經過一個叫做Dispatcher Servlet的前端控制器, 

  2.之后,你總要有工作地點吧(請求需要工作),可是不認路?。ㄇ肭笮枰諛睦銼環治觶?,所以你需要先去找到地圖,然后在地圖上找到地點,在SpringMVC中,從Dispatcher Servlet開始率先找到Handler Mapper,該組件映射找到工作點的老板(HandlerAdapter)。

  3.到這里我們僅僅是知道怎么找到工作點而已,而且路徑是從城門(Dispatcher Servlet前端控制器)開始的,f我們按照地圖(HandlerMapper組件里面的信息)的指引找到了指使我們工作的HandlerAdapter。

  4.老板指使我們工作,此時我們化身為員工(Handler,也就是請求所對應的事件),我們工作的內容就控制層(也就是MVC中的C)下請求url所對應的方法,工作完成之后,我們需要提交工作數據呈現給老板看(返回ModelAndView對象給HandlerAdapter

  5.之后老板把你的工作數據貼到城門上(將ModelAndView對象返回給DispatcherServlet),再經歷一番修飾后呈現給來往的商人(用戶) 

  一個從大局上觀看的基本流程大概就是如此,然而SpringMVC在具體的實現上遠比這復雜許多,基本上在普通項目開發下我們在配置完SpringMVC要求配置環境后,所需要開發的地方就只有視圖層和控制層,控制層里面的代碼一般是有邏輯層和數據層的實現。

2.

流程 
1、用戶發送請求至前端控制器DispatcherServlet
2、DispatcherServlet收到請求調用HandlerMapping處理器映射器。 
3、處理器映射器找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。 
4、DispatcherServlet調用HandlerAdapter處理器適配器 
5、HandlerAdapter經過適配調用具體的處理器(Controller,也叫后端控制器)。 
6、Controller執行完成返回ModelAndView
7、HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet
8、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器 
9、ViewReslover解析后返回具體View
10、DispatcherServlet根據View進行渲染視圖(即將模型數據填充至視圖中)。 
11、DispatcherServlet響應用戶

2.如何解決POST請求中文亂碼問題,GET的又如何處理呢?

在web.xml中加入:

 

  1. <filter>
  2. <filter-name>CharacterEncodingFilter</filter-name>
  3. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  4. <init-param>
  5.     <param-name>encoding</param-name>
  6.     <param-value>utf-8</param-value>
  7. </init-param>
  8. </filter>
  9. <filter-mapping>
  10. <filter-name>CharacterEncodingFilter</filter-name>
  11. <url-pattern>/*</url-pattern>
  12. </filter-mapping>

以上可以解決post請求亂碼問題。對于get請求中文參數出現亂碼解決方法有兩個:

修改tomcat配置文件添加編碼與工程編碼一致,如下:

 

  1. <ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

 

 另外一種方法對參數進行重新編碼:

 

  1. String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

 

ISO8859-1是tomcat默認編碼,需要將tomcat編碼后的內容按utf-8編碼 

3.SpringMVC與Struts2的主要區別?

springmvc的入口是一個servlet即前端控制器,而struts2入口是一個filter過慮器。2. springmvc是基于方法開發(一個url對應一個方法),請求參數傳遞到方法的形參,可以設計為單例或多例(建議單例),struts2是基于類開發,傳遞參數是通過類的屬性(get,set),只能設計為多例。3. Struts采用值棧存儲請求和響應的數據,通過OGNL存取數據,

spring3mvc的方法之間基本上獨立的,獨享請求和響應數據
請求數據通過參數獲取,處理結果通過ModelMap交回給框架
方法之間不共享變量

3、由于Struts2需要針對每個request進行封裝,把request,session等servlet生命周期的變量封裝成一個一個Map,供給每個Action使用,并保證線程安全,所以在原則上,是比較耗費內存的。

4、SpringMVC集成了Ajax,使用非常方便,只需一個注解@ResponseBody就可以實現,然后直接返回響應文本即可,而Struts2攔截器集成了Ajax,在Action中處理時一般必須安裝插件或者自己寫代碼集成進去,使用起來也相對不方便。

11、SpringMVC可以認為已經100%零配置。

12、f-sm-1. 講下SpringMvc和Struts1,Struts2的比較的優勢

  性能上Struts1>SpringMvc>Struts2 開發速度上SpringMvcStruts2差不多,Struts1要高

f-sm-2. 講下SpringMvc的核心入口類是什么,Struts1,Struts2的分別是什么

  SpringMvc的是DispatchServlet,Struts1的是ActionServlet,Struts2的是StrutsPrepareAndExecuteFilter

f-sm-3. SpringMvc的控制器是不是單例模式,如果是,有什么問題,怎么解決

  是單例模式,所以在多線程訪問的時候有線程安全問題,不要用同步,會影響性能的,解決方案是在控制器里面不能寫字段

f-sm-4. SpingMvc中的控制器的注解一般用那個,有沒有別的注解可以替代

  一般用@Conntroller注解,表示是表現層,不能用用別的注解代替.

f-sm-5. @RequestMapping注解用在類上面有什么作用

  用于類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。

f-sm-6. 怎么樣把某個請求映射到特定的方法上面

  直接在方法上面加上注解@RequestMapping,并且在這個注解里面寫上要攔截的路徑

f-sm-7. 如果在攔截請求中,我想攔截get方式提交的方法,怎么配置

  可以在@RequestMapping注解里面加上method=RequestMethod.GET

f-sm-8. 如果在攔截請求中,我想攔截提交參數中包含"type=test"字符串,怎么配置

  可以在@RequestMapping注解里面加上params="type=test"

f-sm-9. 我想在攔截的方法里面得到從前臺傳入的參數,怎么得到

  直接在形參里面聲明這個參數就可以,但必須名字和傳過來的參數一樣

f-sm-10. 如果前臺有很多個參數傳入,并且這些參數都是一個對象的,那么怎么樣快速得到這個對象

  直接在方法中聲明這個對象,SpringMvc就自動會把屬性賦值到這個對象里面

f-sm-11. 怎么樣在方法里面得到Request,或者Session

  直接在方法的形參中聲明request,SpringMvc就自動把request對象傳入

f-sm-12. SpringMvc中函數的返回值是什么.

  返回值可以有很多類型,String, ModelAndView,當一般用String比較好

f-sm-13. SpringMvc怎么處理返回值的

  SpringMvc根據配置文件中InternalResourceViewResolver的前綴和后綴,用前綴+返回值+后綴組成完整的返回值

f-sm-14. SpringMVC怎么樣設定重定向和轉發的

  在返回值前面加"forward:"就可以讓結果轉發,譬如"forward:user.do?name=method4" 在返回值前面加"redirect:"就可以讓返回值重定向,譬如"redirect://www.baidu.com"

f-sm-15. SpringMvc用什么對象從后臺向前臺傳遞數據的

  通過ModelMap對象,可以在這個對象里面用put方法,把對象加到里面,前臺就可以通過el表達式拿到

f-sm-16. SpringMvc中有個類把視圖和數據都合并的一起的,叫什么

  ModelAndView

f-sm-17. 怎么樣把ModelMap里面的數據放入Session里面

  可以在類上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key

f-sm-18. SpringMvc怎么和AJAX相互調用的

  通過Jackson框架就可以把Java里面的對象直接轉化成Js可以識別的Json對象

  具體步驟如下

  1.加入Jackson.jar

  2.在配置文件中配置json的映射

  3.在接受Ajax方法里面可以直接返回Object,List,但方法前面要加上@ResponseBody注解

f-sm-19. 當一個方法向AJAX返回特殊對象,譬如Object,List等,需要做什么處理

  要加上@ResponseBody注解

f-sm-20. SpringMvc里面攔截器是怎么寫的

  有兩種寫法,一種是實現接口,另外一種是繼承適配器類,然后在SpringMvc的配置文件中配置攔截器即可:

  <!-- 配置SpringMvc的攔截器 -->

<mvc:interceptors>

    <!-- 配置一個攔截器的Bean就可以了 默認是對所有請求都攔截 -->

    <bean id="myInterceptor" class="com.et.action.MyHandlerInterceptor"></bean>

 

    <!-- 只針對部分請求攔截 -->

    <mvc:interceptor>

       <mvc:mapping path="/modelMap.do" />

       <bean class="com.et.action.MyHandlerInterceptorAdapter" />

    </mvc:interceptor>

</mvc:interceptors>

f-sm-21. 講下SpringMvc的執行流程

       系統啟動的時候根據配置文件創建spring的容器, 首先是發送http請求到核心控制器disPatherServlet,spring容器通過映射器去尋找業務控制器,

使用適配器找到相應的業務類,在進業務類時進行數據封裝,在封裝前可能會涉及到類型轉換,執行完業務類后使用ModelAndView進行視圖轉發,數據放在model中,用map傳遞數據進行頁面顯示。

2) SpringMVC的工作流程?

1. 用戶發送請求至前端控制器DispatcherServlet2. DispatcherServlet收到請求調用HandlerMapping處理器映射器。3. 處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。4. DispatcherServlet通過HandlerAdapter處理器適配器調用處理器5. 執行處理器(Controller,也叫后端控制器)。6. Controller執行完成返回ModelAndView7. HandlerAdaptercontroller執行結果ModelAndView返回給DispatcherServlet8. DispatcherServletModelAndView傳給ViewReslover視圖解析器9. ViewReslover解析后返回具體View10. DispatcherServletView進行渲染視圖(即將模型數據填充至視圖中)。11. DispatcherServlet響應用戶

Spring依賴注入有哪幾種方式。
答:

  • Set注入

這是最簡單的注入方式,假設有一個SpringAction,類中需要實例化一個SpringDao對象,那么就可以定義一個private的SpringDao成員變量,然后創建SpringDao的set方法(這是ioc的注入入口):

構造器注入

這種方式的注入是指帶有參數的構造函數注入,看下面的例子,我創建了兩個成員變量SpringDao和User,但是并未設置對象的set方法,所以就不能支持第一種注入方式,這里的注入方式是在SpringAction的構造函數中注入,也就是說在創建SpringAction對象時要將SpringDao和User兩個參數值傳進來:

 

  • 靜態工廠的方法注入

靜態工廠顧名思義,就是通過調用靜態工廠的方法來獲取自己需要的對象,為了讓spring管理所有對象,我們不能直接通過"工程類.靜態方法()"來獲取對象,而是依然通過spring注入的形式獲?。?/p>

 

  • 實例工廠的方法注入

實例工廠的意思是獲取對象實例的方法不是靜態的,所以你需要首先new工廠類,再調用普通的實例方法:


3.  簡述一下Spring。
答:SpringFramework 是一個開源的Java/Java EE的應用程序框架。Spring Framework 提供了一個簡易的開發方式,這種開發方式,將避免那些可能致使底層代碼變得繁雜混亂的大量的屬性文件和幫助類。
Spring 中包含的關鍵特性
l  強大的基于 JavaBeans 的采用控制翻轉(Inversion of Control,IoC)原則的配置管理,使得應用程序的組建更加快捷簡易。
l  一個可用于從 applet 到 Java EE 等不同運行環境的核心 Bean 工廠。
l  數據庫事務的一般化抽象層,允許宣告式(Declarative)事務管理器,簡化事務的劃分使之與底層無關。
l  內建的針對 JTA 和 單個 JDBC 數據源的一般化策略,使 Spring 的事務支持不要求 Java EE 環境,這與一般的 JTA 或者 EJB CMT 相反。
l  JDBC 抽象層提供了有針對性的異常等級(不再從SQL異常中提取原始代碼), 簡化了錯誤處理, 大大減少了程序員的編碼量. 再次利用JDBC時,你無需再寫出另一個 ‘終止‘ (finally) ??? 并且面向JDBC的異常與Spring 通用數據訪問對象 (Data Access Object) 異常等級相一致.
l  以資源容器,DAO 實現和事務策略等形式與 Hibernate,JDO 和iBATIS SQL Maps 集成。利用眾多的翻轉控制方便特性來全面支持, 解決了許多典型的Hibernate集成問題. 所有這些全部遵從Spring通用事務處理和通用數據訪問對象異常等級規范.
l  靈活的基于核心 Spring 功能的 MVC 網頁應用程序框架??⒄咄ü唄越涌誚滌卸愿每蚣艿母叨瓤刂?,因而該框架將適應于多種呈現(View)技術,例如 JSP,FreeMarker,Velocity,Tiles,iText以及 POI。值得注意的是,Spring 中間層可以輕易地結合于任何基于 MVC 框架的網頁層,例如 Struts,WebWork,或 Tapestry。
l  提供諸如事務管理等服務的面向方面編程框架。
 5*****springaop自己理解

IOC,依賴倒置的意思,
控制反轉,就是將創建對象的權利反轉給sprig容器



形象的舉例就是:

通常情況下,假如你有一天在家里口渴了,要喝水,那么你可以到你小區的小賣部去,告訴他們,你需要一瓶水,然后小賣部給你一瓶水!

這本來沒有太大問題,關鍵是如果小賣部很遠,那么你必須知道:從你家如何到小賣部;小賣部里是否有你需要的水;你還要考慮是否開著車去;等等等等,也許有太多的問題要考慮了。也就是說,為了一瓶水,你還可能需要依賴于車等等這些交通工具或別的工具,問題是不是變得復雜了?那么如何解決這個問題呢?

解決這個問題的方法很簡單:超市提供送貨上門服務,凡是超市的會員,你只要告知超市你需要什么,超市將主動把貨物給你送上門來!這樣一來,你只需要做兩件事情,你就可以活得更加輕松自在:
第一:向小賣部注冊為會員
第二:告訴小賣部你需要什么

是不是和Spring的做法很類似呢?Spring就是小賣部,你就是A對象,水就是B對象
第一:在Spring中聲明一個類:A
第二:告訴Spring,A需要B

假設A是UserAction類,而B是UserService類
<bean id="userService" class="org.leadfar.service.UserService"/>
<bean id="documentService" class="org.leadfar.service.DocumentService"/>
<bean id="orgService" class="org.leadfar.service.OrgService"/>

<bean id="userAction" class="org.leadfar.web.UserAction">
     <property name="userService" ref="userService"/>
</bean>

Spring這個商店(工廠)中,有很多對象/服務:userService,documentService,orgService,也有很多會員:userAction等等,聲明userAction需要userService即可,Spring將通過你給它提供的通道主動把userService送上門來,因此UserAction的代碼示例類似如下所示:

package org.leadfar.web;
public class UserAction{
     private UserService userService;
     public String login(){
          userService.valifyUser(xxx);
     }
     public void setUserService(UserService userService){ 
          this.userService = userService;
     }
}

在這段代碼里面,你無需自己創建UserService對象(Spring作為背后無形的手,把UserService對象通過你定義的setUserService()方法把它主動送給了你,這就叫依賴注入?。?br>
Spring依賴注入的實現技術是:動態代理

---------------------------------------------------
再說說AOP,即面向切面編程,面向切面編程的目標就是分離關注點。什么是關注點呢,就是你要做的事,就是關注點。假如你是個公子哥,沒啥人生目標,整天只知道玩一件事!那么,每天你一睜眼,就光想著吃完飯就去玩(你必須要做的事),但是在玩之前,你還需要穿衣服、穿鞋子、疊好被子、做飯等等等等事情,這些事情就是你的關注點,但是你只想吃飯然后玩,那么怎么辦呢?這些事情通通交給別人去干。

AOP的好處就是你只需要干你的正事,其它事情別人幫你干。也許有一天,你想裸奔,不想穿衣服,那么你把仆人A解雇就是了!也許有一天,出門之前你還想帶點錢,那么你再雇一個仆人D專門幫你干取錢的活!這就是AOP。每個人各司其職,靈活組合,達到一種可配置的、可插拔的程序結構。

Spring的角度看,AOP最大的用途就在于提供了事務管理的能力。事務管理就是一個關注點,你的正事就是去訪問數據庫,而你不想管事務(太煩),所以,Spring在你訪問數據庫之前,自動幫你開啟事務,當你訪問數據庫結束之后,自動幫你提交/回滾事務!
4.  Spring自帶的AOP有哪些。
答:@AspectJ和基于Schema的兩種切面定義的AOP
 
5.  Spring里的聲明式事務是怎么實現的。
先定義一個類,實現MethodBeforeAdvice、AfterReturningAdvice等接口。
Spring配置文件里配置advicebean,然后配置代理類,在類里注入advice和目標類。
48.Spring原理()
spring的最大作用ioc/di,將類與類的依賴關系寫在配置文件中,程序在運行時根據配置文件動態加載依賴的類,降低的類與類之間的藕合度。它的原理是在applicationContext.xml加入bean標記,bean標記中通過class屬性說明具體類名、通過property標簽說明該類的屬性名、通過constructor-args說明構造子的參數。其一切都是返射,當通過applicationContext.getBean("id名稱")得到一個類實例時,就是以bean標簽的類名、屬性名、構造子的參數為準,通過反射實例對象,喚起對象的set方法設置屬性值、通過構造子的newInstance實例化得到對象。正因為spring一切都是反射,反射比直接調用的處理速度慢,所以這也是spring的一個問題。
spring第二大作用就是aop,其機理來自于代理模式,代理模式有三個角色分別是通用接口、代理、真實對象代理、真實對象實現的是同一接口,將真實對象作為代理的一個屬性,向客戶端公開的是代理,當客戶端調用代理的方法時,代理找到真實對象,調用真實對象方法,在調用之前之后提供相關的服務,如事務、安全、日志。

121.Spring的核心機制是什么,分別有什么作用?
:    
(1)DI (Dependency Injection)  ,降低耦合度,便于程序功能擴展,也體現了而向對象設計原則中的開閉原則。
(2)AOP (Aspect Oriented Program),集中處理程序中的公共問題,比如事務、權限、業務日志等,可以將業務邏輯和這些公共問題分開處理。

校驗

服務端校驗:

  • 控制層conroller:校驗頁面請求的參數的合法性。在服務端控制層conroller校驗,不區分客戶端類型(瀏覽器、手機客戶端、遠程調用)
  • 業務層service(使用較多):主要校驗關鍵業務參數,僅限于service接口中使用的參數。
  • 持久層dao:一般是不校驗的。

一般使用hibernate的校驗框架,依賴hibernate-validator.jar,jboss-logging.jar,validation-api.jar這幾個jar

開發步驟

  • springmvc.xml中添加校驗器
  • 校驗器注入到處理器適配器中
  • CustomValidationMessages.properties配置校驗錯誤信息
  • pojo中添加校驗規則
  • 在控制器中對參數注解@Validated來捕獲和顯示校驗錯誤信息

分組校驗

  • 定義校驗分組
  • 在校驗規則中添加分組
  • controller方法使用指定分組的校驗

數據回顯

數據回顯有三種方法

  • 1.springmvc默認對pojo數據進行回顯。
    • pojo數據傳入controller方法后,springmvc自動將pojo數據放到request域,key等于pojo類型(首字母小寫)
    • 使用@ModelAttribute指定pojo回顯到頁面在request中的key
  • [email protected]還可以將方法的返回值傳到頁面
  • 3.使用最簡單方法使用model,可以不用@ModelAttribute

異常處理

系統的dao、service、controller出現都通過throws Exception向上拋出,最后由springmvc前端控制器交由異常處理器進行異常處理。

springmvc提供全局異常處理器(一個系統只有一個異常處理器)進行統一異常處理。

全局異常處理器處理思路:

解析出異常類型

  • 如果該異常類型是系統自定義的異常,直接取出異常信息,在錯誤頁面展示
  • 如果該異常類型不是系統自定義的異常,構造一個自定義的異常類型(信息為未知錯誤

拋出異常的位置

  • 如果與業務功能相關的異常,建議在service中拋出異常。
  • 與業務功能沒有關系的異常,建議在controller中拋出。

上傳圖片

開發步驟

  • 在頁面form中提交enctype=”multipart/form-data”的數據時,需要springmvcmultipart類型的數據進行解析。
  • springmvc.xml中配置multipart類型解析器
  • 加入上傳圖片的jarcommons-fileupload
  • 創建圖片虛擬目錄存儲圖片

json數據交互

兩種json數據交互的形式:

  • 請求json、輸出json,要求請求的是json串,所以在前端頁面中需要將請求的內容轉成json,不太方便。
  • 請求key/value、輸出json。此方法比較常用。

MVC框架要做哪些事情?

  a,url映射到java,或者java類的方法上

  b,封裝用戶提交的數據

  c,處理請求->調用相關的業務處理—>封裝響應的數據

  d,將響應的數據進行渲染

springMVC框架有什么優點?

        性能比struts2

        簡單便捷易學,能進行更簡潔的web層開發

        天生和spring無縫集成

        使用約定優于配置

        能夠進行簡單junit測試

        支持restful風格

        異常處理,本地化國際化,數據驗證,攔截器

   提供一套強大的JSP標簽庫,簡化JSP開發

具體執行流程如下:

spring框架以及MVC思想:

一:spring框架:
spring框架是一種很優秀的框架,它可以幫助開發人員簡化組件與組件之間耦合,管理對象。
1:創建對象和管理對象之間的關系,可以在配置文件通過bean元素創建對象,管理對象之間的關系
則可以通過注入的方式。
2spring可以和其他的第三方框架進行整合,比如Struts、hibernate等組成SSH框架。也可以和ibatis
或者mybatis組成框架。

二:名稱解釋
IOC:inversion of control 控制翻轉,創建對象權利的轉移,將通過new對象轉換為第三方容器配置。
DI:denpence injection 依賴注入,通過注解的方式將需要依賴的對象注入到另一個類中,這樣降低
了對象與對象之間的耦合,方便以后的擴展和維護。

三:常用注解
@Controller 將該類標注為控制層,控制層是視圖層和業務層的橋梁,負責接收前臺的請求,并且將
后臺處理數據傳送給前臺。
@Service 將該類標注為業務層,開發人員可以在這一層編寫業務邏輯,而不需要更多的關注如何
與數據庫進行交互。
@Component 將該類定義類DAO層,負責與數據庫進行數據交互。
@RequestMapping 匹配前臺請求路徑,可以標注在類之上,也可以標注在方法上面,然后類與方法進行
路徑拼接。
@Resource 對象的注入,可以將容器創建的對象直接注入到需要的類中。@Autowired是按照類型注入,
@Resource的裝配順序是如果指定名稱或者沒有指定時,按照名稱裝配;如果指定類型時,按照類型
裝配。
@ResponseBody 這個注解很好用,是將后臺需要返回的Map、list、字符串或者對象自動封裝成json格式,
但是后臺需要引入對應的jar包,jackson-all.jar、jackson-mapping.jar等。
@Transactional 這個注解標注方法為事務,保持操作的原子性,如果成功就提交;如果拋出異常,就
回滾。但是在容器的配置文件中需要配置事務。

四:MVC思想
MVC是一種設計思想,M代表model,模型。V代表view,視圖,C代表controller控制層。M主要是業務層
以及數據實體類。V負責與用戶交互,前臺jsp等。C負責調度分配作用。從瀏覽器發出請求到收到響應
顯現在頁面的順序。
a:用戶在瀏覽器輸入請求地址://主機:端口/應用名/index.do,請求協議是http超文本傳輸協議。
bwebContentweb.xml中配置訪問地址,如果默認welcome-list元素,那么訪問默認 頁面index.jsp
如果配置serveltserver-mapping元素,那么會自動分發。
c:請求路徑通過SimpleHandleMapping類自動匹配到后臺的RequestMapping中的路徑。如果配置MVC,那么
需要配置mvc驅動。
d:在控制層調用業務層,處理完數據后,返回頁面和處理完的數據。
e:頁面重定向到頁面和配置文件ViewRevoler的拼接,可以使用tiles框架(如果jsp頁面過多的情況)
同時將數據也帶過去,然后將響應返回瀏覽器。
f:瀏覽器顯示給用戶。

 

熟悉基于JSP和Servlet的Java Web開發,對Servlet和JSP的工作原理和生命周期有深入了解,熟練的使用JSTL和EL編寫無腳本動態頁面,有使用監聽器、過濾器等Web組件以及MVC架構模式進行Java Web項目開發的經驗。

標簽:border   org   權限   post請求   通信   love   生命周期   客戶端   傳輸協議   

原文地址:https://www.cnblogs.com/shan1393/p/9251924.html

(0)
(0)
   
舉報
評論 一句話評論(0
0條  
登錄后才能評論!
? 2014 吉利平特名人堂 版權所有 京ICP備13008772號-2
迷上了代碼!
北京时时软件怎么样 彩神计划软件官网客户端 天天pk10免费计划软件安卓 7码倍投表 幸运飞艇双面玩法怎么玩 为什么黑客不去网赌 内蒙古时时三星走势图 投注比例与赛果分析 一个黑客告诉你网赌 龙虎看盘技巧 2016江西时时风波 后三组六稳赚万能码 重庆时时彩开奖视频 老时时彩三星走势 七星彩黄金分割法 怎样赌龙虎稳赢