1. 程式人生 > >Spring與SpringMVC 常見面試問題

Spring與SpringMVC 常見面試問題

1、 什麼是Spring

Spring是一個開源框架,為簡化企業級開發而生,同時Spring是一個IOC(DI)和AOP容器框架。

Spring的優點:

非侵入式:基於Spring開發的應用中的物件可以不依賴於Spring的API

依賴注入:DI——Dependency Injection,反轉控制(IOC)最經典的實現。

面向切面程式設計:Aspect Oriented Programming——AOP

容器:Spring是一個容器,因為它包含並且管理應用物件的生命週期

元件化:Spring實現了使用簡單的元件配置組合成一個複雜的應用。在 Spring 中可以  使用XML和Java註解組合這些物件。

一站式:在IOC和AOP的基礎上可以整合各種企業應用的開源框架和優秀的第三方類庫(實際上Spring 自身也提供了表述層的SpringMVC和持久層的Spring JDBC)。

2、 什麼是ioc 什麼是依賴注入

Ioc:inversion of control 控制反轉 我們不再手動建立物件 而是將物件的建立權交給IOC容器,需要獲取物件時直接從IOC容器中獲取

DI:dependency injection 依賴注入 IOC的另一種表述方式:即元件以一些預先定義好的方式(例如:setter 方法)接受來自於容器的資源注入。

3、 IOC開發中怎麼實現?兩種方式:xml   註解

通過配置Spring.xml檔案 或者使用註解

4、 ioc  XML檔案實現方式,註解實現方式

1>在spring.xml檔案裡 寫一個元件<bean>併為其賦值 然後在需要的地方 通過例項化IOC容器 根據元件對應的型別或id值 從容器中提取 ClassPathXmlApplicationContext

2>使用註解,需要先在web.xml檔案中配置監聽器ContextLoaderListener 再在dao層使用註解@Reponsitory  service層加註解@Service  WEB層加註解@Controller  需要使用物件的時候 使用@Autowired註解  這樣IOC容器就會自動建立好這個物件

5、@AutoWired註解查詢規則

會按照型別在IOC容器中查詢

找到一個符合要求的就會自動裝配

沒有找到會報錯

找到多個: 使用變數名作為id進行查詢,找到就自動裝配;或者使用註解@qualifier根據指定id進行查詢,找不到就會報錯。

6、掃包標籤

context:component-scan

7、引入外部檔案(控制資料來源)

context:property-placeholder  location="classpath:db.properties"

8、IOC怎麼建立多例項

在bean標籤中加入屬性scope(“prototype”)

9、什麼是SpringMVC

是一種輕量級的、基於mvc的web層應用框架。

SpringMVC的優點:

1>天生與Spring框架整合,如:(IOC,AOP)

2>支援Restful風格

3>進行更簡潔的Web層開發

4>支援靈活的URL到頁面控制器的對映

5>非常容易與其他檢視技術整合,如:Velocity、FreeMarker等等。

6>因為模型資料不存放在特定的API裡,而是放在一個Model裡(Map資料結構實現,因 此很容易被其他框架使用)

7>非常靈活的資料驗證、格式化和資料繫結機制、能使用任何物件進行資料繫結,不必實現特定框架的API

8>更加簡單、強大的異常處理

9>對靜態資源的支援

10>支援靈活的本地化、主題等解析

10、SpringMVC怎麼用

1>在POM檔案中新增依賴 引入spring-web和spring-webmvc兩個jar包

2>在web.xml中新增前端控制器:dispatcharServlet

3>在類上加@Controller註解 標明該類為控制器

4>類中的一個方法對應一個請求配置請求路徑的對映:@RequestMapping

11、SpringMVC的執行流程

1>頁面傳送請求

2>前端控制器接收到這個請求

3>去容器中觀察所有的@Controller元件,哪個元件能處理這個請求

4>看方法上的@RequestMapping標註是否和請求地址一樣

5>按照頁面地址 轉發到這個路徑下的方法

12、@RequestMapping註解什麼意思,寫在哪,分別表示什麼意思,屬性設定

該註解表示請求路徑對映方法名

可以寫在方法上,表示跳轉路徑(對映)

也可以寫在類上,表示根目錄

可以包含的屬性有:value 請求路徑的對映,作為處理請求的方法

Method  設定請求方式

Params 限定攜帶引數

  Heads 設定請求頭

13、入參處理 單個變數,多個變數  @requestparam註解的屬性設定 傳入原生api

單個變數:獲取超連結中的引數

當超連結中的變數名與方法引數的變數名一致時,可以直接獲取

當超連結中的變數名與方法引數的變數名不一致是,通過註解@RequestParam獲取超連結中的引數 但這就要求超連結中必須攜帶該引數

傳遞給實體類,可以通過form表單,input輸入框向實體類傳值 但是要求name值與實體類屬性名一致

@RequestParam要求超連結中必須存在所標明的引數 如果沒有 就會報錯 如果不希望報錯並且如果超連結中未攜帶指定引數 就給它指定一個預設值,可以設定required=”false”(不在出現異常) dufaultValue=””(超連結未攜帶指定引數將用此值作為預設值)

原生API 在方法引數列表傳入HttpServletRequest request 然後在方法裡request.getParameter(“超連結中引數名”)

14、出參處理

在方法引數列表中傳入隱藏物件模型:Model model、 Map<String,Object> map  ModelMap modelmap  將資料存入物件模型中(其實是存入了request域中) 前臺可以通過EL表示式獲取

或者使用servlet原生API 存入域中(request,response,session.......),前臺同樣使用EL表示式獲取

15、如何處理時間型別

在pojo類中使用Date的屬性上添加註解,form表單中提交的資料格式 與 註解中宣告的格式統一即可

接收到資料後在Student 物件中 ,傳入dao層 存入資料庫時,需要java.util.Date 轉為java.sql.Date 裝填佔位符:

new java.sql.Date(stu.getBirth().getTime());

#$#$$$#$(這裡的截圖不知原因上不去就省略了)%#$%$#

16、在springmvc中如何使用ajax,ajax請求的語法格式

匯入jackson json處理工具包

在需要使用ajax傳送資料至前臺頁面的方法上加上註解@ResponseBody

如果要獲取ajax從前臺傳到後臺的資料,在需要注入該資料的引數前加上註解@RequestBody

Ajax語法格式:

$(function(){

$.ajax({

type:”提交方式get/post”,

dataType:”資料傳輸格式json”,

data:{前臺向後臺傳輸的資料 a:a},

success:function(data){

成功回撥函式

}

})

})

17、檔案上傳的步驟

1> 在本地tomcat中設定真實上傳路徑以及虛擬路徑

 2> 導包:commons-fileupload

 3> springmvc 配置檔案上傳解析器CommonsMultipartResolver

 4> jsp頁面 使用表單新增屬性enctype="multipart/form-data" 新增輸入框<input type="file" name="picurl">

 5>controller控制器 獲取檔案 方法引數使用MutilpartFile picurl

  呼叫picurl.getOriginalFilename();獲取檔名

然後呼叫picurl.transferTo(new File("檔案上傳路徑"+檔名))開始上傳檔案

18、springmvc如何處理異常

三種方法

1>在本類中:在方法上使用@ExceptionHandler 宣告屬性value={具體的異常類.class}如果不知道是什麼型別的 可以寫成Exception e 因為Exception是所有異常類的父類,但是如果有精確處理,會優先走精確處理

2>外部處理類來處理異常

 關鍵註解:@ControllerAdvice

在方法上使用@ExceptionHandler 宣告屬性value={具體的異常類.class}

3>在springmvc中配置異常處理解析器

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

<property name="exceptionMappings">

<props>

<prop key="java.lang.ArithmeticException">error2</prop>

<prop key="java.lang.NullPointerException">error2</prop>

</props>

</property>

</bean>

若想將錯誤資訊顯示在頁面上 可以使用ModelAndView模型物件 將錯誤資訊存入其中

異常處理的優先級別:本類>外部處理類>配置檔案

19、soringmvc攔截器

定義:Spring Web MVC 的處理器攔截器類似於Servlet 開發中的過濾器Filter,用於對處理器進行預處理和後處理。

如何使用:宣告一個類 實現HandlerInterceptor介面 重寫裡面的方法,在springmvc.xml檔案中使用mvc名稱空間配置攔截器:

<mvc:interceptors>

<mvc:interceptor>

<!-- 配置商品被攔截器攔截 -->

<mvc:mapping path="/bill/**" /> 要攔截的方法

<!-- 配置具體的攔截器 -->

<bean class="com.buba.lanjie.Lanjieqi" /> 宣告的異常類的物件建立

</mvc:interceptor>

</mvc:interceptors>

20、頁面發起請求的方式,controller怎麼接收引數

頁面發起請求向後臺傳輸資料的方式:超連結、ajax、form表單

Controller接收時,如果引數名相同,直接接收;

如果引數名不同,使用註解@RequestParam(“請求中攜帶的引數名”),將引數注入到方法的引數中

21、Controller層怎麼傳遞資料給頁面,頁面怎麼獲取

可以將資料傳入隱藏模型物件Model、Map、ModelMap、ModelAndView ,前臺使用EL表示式從request域中獲取資料;

可以使用servlet原生api 將資料存入指定的域中,前臺通過EL表示式從對應的域中獲取

可以通過ajax傳遞資料,前臺通過ajax的成功回撥函式,獲取後臺傳過來的資料。