springMVC面試題

 

springMVC試題web

 

1、spring工做原理: spring

1.spring mvc全部的求都提交DispatcherServlet,它會委託用系的其餘模塊負責負責對請行真正的理工做。 sql

2.DispatcherServlet查詢一個或多個HandlerMapping,找到求的Controller.數據庫

3.DispatcherServlet請請求提交到目Controller網絡

4.Controller業務邏輯處理後,會返回一個ModelAndViewsession

5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView象指定的視圖對 架構

6.視圖對負責渲染返回端。 mvc

 

 

 

2、爲何要用spring: app

 

AOP 能夠建非行性的關注點,稱橫切關注點,並將它插入到用程序代中。使用 AOP 後,公共服   (比 如日誌、持久性、事等)就能夠分解成方面並用到域象上,同不會增長域象的象模型的復性。 框架

 

IOC 許創建一個能夠構造象的境,而後向傳遞象。正如單詞 倒置 所代表的,IOC 就像反      來的 JNDI。沒有使用一堆抽象工廠、服定位器、元素(singleton)和直接構造(straight construction),每個象都是用     象構造的。所以是由容器管理象(collaborator)。 

 

Spring即便一個AOP框架,也是一IOC容器。 Spring 最好的地方是它有助於您替換對象。有了 Spring,只要用 JavaBean 屬性和配置文件加入依性(象)。而後能夠很容易地在須要具備似接口的象。 

 

3、請你談談SSH整合: 

 

SSH:

Struts(表示+Spring業務層+Hibernate(持久 

Struts:

Struts是一個表示框架,主要做用是界面展現,接收求,分發請求。 

MVC框架中,Struts屬於VC次,負責界面表負責MVC關係的分。(View:沿用JSPHTTPFormTagResourse ControllerActionServletstruts-config.xmlAction 

Hibernate:

Hibernate是一個持久框架,它只負責與關係數據的操做。 

Spring:

Spring是一個業務層框架,是一個整合的框架,能很好地黏合表示與持久 

 

4、介紹一下Spring的事務管理: 

 

就是一系列的數據操做(好比插入多條數據)一的提交或回操做,若是插入成功,那麼一塊兒成功,若是中有一條出異常,那麼回以前的全部操做。 

這樣能夠防止出現髒數據,防止數據數據出現問題 

了避免種狀況通常都會行事管理。Spring中也有本身的事管理機制,通常是使用TransactionMananger行管理,能夠通Spring的注入來完成此功能。 

 

spring提供了幾個關於事務處理的 

TransactionDefinition //屬性定 

TranscationStatus //表明了當前的事,能夠提交,回 

PlatformTransactionManager個是spring提供的用於管理事的基接口,其下有一個實現的抽象AbstractPlatformTransactionManager,使用的事管理例如DataSourceTransactionManager等都是的子 

 

通常事 

 

TransactionDefinition td = new TransactionDefinition();

TransactionStatus ts = transactionManager.getTransaction(td);

try

{ //do sth

transactionManager.commit(ts);

}

catch(Exception e){transactionManager.rollback(ts);}

 

spring提供的事管理能夠分程式的和聲明式的。程式的,比靈活,可是代量大,存在重複的代多;聲明式的比程式的更靈活。 

 

程式主要使用transactionTemplate。省略了部分的提交,回,一系列的事務對象定,需注入事管理.

void add(){

transactionTemplate.execute( new TransactionCallback(){

pulic Object doInTransaction(TransactionStatus ts)

{ //do sth}

}

}

 

聲明式:

 

使用TransactionProxyFactoryBean:

 

 

PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly

 

 

圍繞Poxy動態代理 的提交和回 

org.springframework.transaction.interceptor.TransactionProxyFactoryBean

 

PROPAGATION_REQUIRED–支持當前事,若是當前沒有事,就新建一個事是最常選擇 

 

PROPAGATION_SUPPORTS–支持當前事,若是當前沒有事,就以非事方式行。 

 

PROPAGATION_MANDATORY–支持當前事,若是當前沒有事,就拋出異常。 

 

PROPAGATION_REQUIRES_NEW–新建事,若是當前存在事,把當前事掛起。 

 

PROPAGATION_NOT_SUPPORTED–以非事方式行操做,若是當前存在事,就把當前事掛起。 

 

PROPAGATION_NEVER–以非事方式行,若是當前存在事拋出異常。 

 

PROPAGATION_NESTED–若是當前存在事在嵌套事行。若是當前沒有事則進行與PROPAGATION_REQUIRED似的操做。 

 

5、Spring裏面如何配置數據庫驅動? 

 

使用」org.springframework.jdbc.datasource.DriverManagerDataSource」數據源來配置數據庫驅動。示例以下: 

<bean id=」dataSource」>

    <property name=」driverClassName」>

        <value>org.hsqldb.jdbcDriver</value>

    </property>

    <property name=」url」>

        <value>jdbc:hsqldb:db/appfuse</value>

    </property>

    <property name=」username」><value>sa</value></property>

    <property name=」password」><value></value></property>

</bean>

 

6、Spring裏面applicationContext.xml文件能不能改爲其餘文件名?

 

ContextLoaderListener是一個ServletContextListener, 它在你的web用啓候初始化。缺省狀況下, 它會在WEB-INF/applicationContext.xml文件找Spring的配置。 你能夠通一個<context-param>元素名字」contextConfigLocation」來改Spring配置文件的位置。示例以下: 

 

<listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>/WEB-INF/xyz.xml</param-value>

    </context-param>    </listener-class>

</listener>

 

7、如何在web應用裏面配置spring?

 

web.xml中加入以下同容,在啓web/WEB-INF/applicationContext.xml中的內容。 

<servlet>

<servlet-name>context</servlet-name>

<servlet-class>

org.springframework.web.context.ContextLoaderServlet

</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

以下獲得ApplicationContext 

    WebApplicationContextUtils.getWebApplicationContext

 

8、Spring裏面如何定義hibernate mapping 

 

添加hibernate mapping 文件到web/WEB-INF下的applicationContext.xml文件裏面。示例以下: 

<property name=」mappingResources」>

    <list>

        <value>org/appfuse/model/User.hbm.xml</value>

    </list>

</property>

 

9、解釋一下Dependency injection(DI,依賴注入)IOC(Inversion of control,控制反轉)?

 

注入DI是一個程序設計模式和架構模型, 一些候也稱做控制反,儘管在技上來,依注入是一個IOC的特殊實現,依注入是指一個用另一個象來提供一個特殊的能力,例如:把一個數據庫連接已參數的形式到一個象的構方法裏面而不是在那個象內部自行建一個接。控制反和依注入的基本思想就是把的依內部化到外部以減小依 

用控制反象在被建的候,由一個調控系內全部象的外界體,將其所依象的引用,傳遞給它。也能夠,依被注入到象中。因此,控制反是,關於一個象如何取他所依象的引用,任的反 

 

10、spring中的BeanFactoryApplicationContext的做用有哪些? 

 

1. BeanFactory負責讀bean配置文檔,管理bean的加例化,維護bean的依關係,負責bean的聲明週期。 

2. ApplicationContext除了提供上述BeanFactory所能提供的功能以外,提供了更完整的框架功能: 

 

a. 化支持 

b. 訪問Resource rs = ctx. getResource(」classpath:config.properties」), 「file:c:/config.properties」

c. 事件傳遞:通過實現ApplicationContextAware接口 

3. 經常使用的ApplicationContext的方法: 

FileSystemXmlApplicationContext:從文件系或者url指定的xml配置文件建,參數配置文件名或文件名數 

ClassPathXmlApplicationContext:從classpathxml配置文件建,能夠從jar包中取配置文件 

WebApplicationContextUtils:從web用的根目錄讀取配置文件,須要先在web.xml中配置,能夠配置聽器或者servlet實現 

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<servlet>

<servlet-name>context</servlet-name>

<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

兩種方式都默配置文件web-inf/applicationContext.xml,也可以使用context-param指定配置文件 

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/myApplicationContext.xml</param-value>

</context-param>

 

11、如何在web環境中配置applicationContext.xml文件?

 

<listener>

   <listener-class>

    org.springframework.web.context.ContextLoaderListener

   </listener-class>

</listener>

或:

<servlet>

   <servlet-name>context</servlet-name>

    <servlet-class>

     org.springframework.web.context.ContextLoaderServlet

    </servlet-class>

   <load-on-startup>1</load-on-startup>

</servlet>

以下方法取出applicationContext:

ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext);

 

12、如何配置spring+struts?

 

struts-config.xml加入一個插件,通它加applicationContext.xml

? struts-config.xml修改action-mapping標記,具體actionDelegateActionProxy

? DelegateActionProxy入一spring境。 

? 在spring的applicationContext.xml加入<bean name=」/login」 class=」" singleton=」false」/>

 

十3、spring+hibernate的配置文件中的主要類有那些?如何配置?

 

dataSource

   sessionFactory:hibernate.cfg.xml

   transactionManager

   userDao (extends HibernateDaoSupport)

   sessionFactory

   facade

   proxy

   sessionFactory

   transactionManager

   facade

 

myeclipse中先加入spring境再加入hibernate境。 

若是springhibernate合在一塊兒能夠不須要hibernate.cfg.xml文件是否正確 

 

十4、如何在spring中實現國際化?

 

applicationContext.xml一個bean

<bean id=」messageSource」 class=」org.springframework.context.support.ResourceBundleMessageSource」>

   <property name=」basename」>

    <value>message</value>

   </property>

</bean>

? src下建多個properties文件 

? 於非英文的要用native2ascii -encoding gb2312  化文件相關內容 

? 其命名格式是message__國家。 

? 面中的中示提示信息,名取鍵值 

? 定國家,系會自載對應的國家的properties信息。 

? applictionContext.getMessage(「」,」參數」,」區域」)取出相關的信息。 

 

十5、spring中的核心類有那些,各有什麼做用?

 

BeanFactory生一個新的例,能夠實現單例模式 

BeanWrapper:提供一的getset方法 

ApplicationContext:提供框架的實現,包括BeanFactory的全部功能 

 

十6、什麼是aopaop的做用是什麼?

 

面向切面程(AOP)提供另一種角度來思考程序構,通過這種方式彌了面向程(OOP)的不足 

除了classes)之外,AOP提供了切面。切面關注點行模化,例如橫切多個型和象的事管理 

Spring的一個關件就是AOP框架,能夠自由選擇是否使用AOP

提供聲明式企,特了替代EJB聲明式服。最重要的服是聲明性事管理,個服創建在Spring的抽象事物管理之上 

戶實現自定切面,用AOP來完善OOP的使用 

能夠把Spring AOP看做是Spring的一種增 

 

十7、使用Spring有什麼好處? 

 

◆Spring能有效地組織你的中間層對,你是否選擇使用了EJB。若是你僅僅使用了Struts或其餘的包含了J2EE特有APIsframework,你會發現Spring關注了留下的問題,。 

 

◆Spring能消除在多工程上Singleton多使用。根據個人經驗是一個主要的問題,它減小了系的可測試性和麪向象特性。 

◆Spring能消除使用各類各格式的屬性定製文件的須要,在整個用和工程中,可通一種 一致的方法來行配置。曾感到迷惑,一個特定找迷幻般的屬性關字或系屬性,此不得不Javadoc乃至源編碼嗎?有了Spring,你可 簡單地看到JavaBean屬性。倒置控制的使用(在下面討論)幫助完成化。 

◆Spring能通接口而不是好的習慣,減小程代價到幾乎零。 

◆Spring設計爲讓使用它建的用盡量少的依於他的APIs。在Spring用中的大多數業務對象沒有依Spring 

◆使用Spring構建的用程序易於測試 

◆Spring能使EJB的使用成一個實現選擇,而不是用架構的必然選擇。你能選擇POJOslocal EJBs實現業務接口,卻不會影響調用代 

◆Spring幫助你解決問題而無需使用EJBSpring能提供一種EJB的替物,它適於web用。例如,Spring能使用AOP提供聲明性事而不通使用EJB容器,若是你僅僅須要與個的數據打交道,甚至不須要JTA實現 

■Spring數據存取提供了一致的框架,是使用JDBCO/R mapping品(如Hibernate)。 

Spring使你能通簡單可行的解決法解決你的問題些特性是有很大價的。 

總結起來,Spring有以下點: 

◆低侵入式設計,代碼污染極低 

◆ 獨立於各類用服器,能夠真正實現Write Once,Run Anywhere的承 

◆SpringDI機制下降了業務對象替的復 

◆Spring並不徹底依Spring,開者可自由Spring框架的部分或所有 

 

十8、什麼是Spring, 它有什麼特色? 

 

Spring是一個的控制反(IoC)和麪向切面(AOP)的容器框架。 

 

——從大小與開兩方面而言Spring都是量的。完整的Spring框架能夠在一個大小隻有1MB多的JAR文件裏布。並 Spring所需的理開也是微不足道的。此外,Spring是非侵入式的:典型地,Spring用中的象不依Spring的特定 

 

◆控制反——Spring一種稱做控制反IoC)的技了鬆耦 合。用了IoC,一個象依的其它象會通的方式傳遞進來,而不是象本身建或者找依賴對象。你能夠認爲IoCJNDI相反——不 象從容器中找依,而是容器在象初始化不等求就主將依賴傳遞給它。 

◆面向切面——Spring提供了面向切面程的豐富支持,允分離用的 業務邏輯與系統級(例如審計auditing)和事()管理)行內聚性的開象只實現們應該作的——完成業務邏輯——此而已。它 並不負責(甚至是意)其它的系統級關注點,例如日誌或事支持。 

◆容器——Spring包含並管理象的配置和生命週期,在個意上它是 一種容器,你能夠配置你的每一個bean如何被——基於一個可配置原型(prototype),你的bean能夠建一個獨的例或者每次須要都生 成一個新的——以及它是如何相互關的。然而,Spring應該被混同於傳統的重量EJB容器,它們經常是大與笨重的,以使用。 

◆框架——Spring能夠將簡單件配置、合成用。在Spring中,象被聲明式地合,典型地是在一個XML文件裏。Spring也提供了不少基功能(事管理、持久化框架集成等等),將邏輯的開了你。 

 

十9、請介紹一下Spring框架中Bean的生命週期 

 

1、Bean的定 

Spring一般通配置文件定Bean。如: 

 

<?xml version=」1.0″ encoding=」UTF-8″?>

<beans xmlns=」http://www.springframework.org/schema/beans」

xmlns:xsi=」http://www.w3.org/2001/XMLSchema-instance」

xsi:schemaLocation=」http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd」>

<bean id=」HelloWorld」 class=」com.pqf.beans.HelloWorld」>

<property name=」msg」>

<value>HelloWorld</value>

</property>

</bean>

</beans>

 

個配置文件就定了一個標識爲 HelloWorld Bean。在一個配置文檔中能夠定多個Bean 

 

2、Bean的初始化

有兩種方式初始化Bean 

1、在配置文檔中通指定init-method 屬性來完成 

Bean實現一個初始化Bean屬性的方法,如init(),如: 

public class HelloWorld{

public String msg=null;

public Date date=null;

 

public void init() {

msg=」HelloWorld」;

date=new Date();

}

…… 

}

而後,在配置文件中init-mothod屬性: 

<bean id=」HelloWorld」 class=」com.pqf.beans.HelloWorld」init-mothod=」init」 >

</bean>

 

2實現 org.springframwork.beans.factory.InitializingBean接口 

Bean實現InitializingBean接口,而且增長 afterPropertiesSet() 方法: 

 

public class HelloWorld implement InitializingBean {

public String msg=null;

public Date date=null;

 

public void afterPropertiesSet() {

msg=」向全世界好!」;

date=new Date();

}

…… 

}

 

那麼,當Bean的全部屬性被SpringBeanFactory置完後,會自動調afterPropertiesSet()方法Bean行初始化,因而,配置文件就不用指定 init-method屬性了。 

 

3、Bean調 

有三種方式能夠獲得Bean調用: 

一、使用BeanWrapper

HelloWorld hw=new HelloWorld();

BeanWrapper bw=new BeanWrapperImpl(hw);

bw.setPropertyvalue(」msg」,」HelloWorld」);

system.out.println(bw.getPropertyCalue(」msg」));

 

二、使用BeanFactory

InputStream is=new FileInputStream(」config.xml」);

XmlBeanFactory factory=new XmlBeanFactory(is);

HelloWorld hw=(HelloWorld) factory.getBean(」HelloWorld」);

system.out.println(hw.getMsg());

 

三、使用ApplicationConttext

ApplicationContext actx=new FleSystemXmlApplicationContext(」config.xml」);

HelloWorld hw=(HelloWorld) actx.getBean(」HelloWorld」);

System.out.println(hw.getMsg());

 

4、Bean銷燬 

一、使用配置文件中的 destory-method 屬性

與初始化屬性 init-methods似,在Bean實現一個撤Bean的方法,而後在配置文件中通 destory-method指定,那麼當bean銷燬時Spring將自動調用指定的銷燬方法。 

 

2實現 org.springframwork.bean.factory.DisposebleBean接口 

若是實現DisposebleBean接口,那麼Spring將自動調bean中的Destory方法銷燬,因此,Bean中必提供Destory方法。 

 

二10、AOP裏面重要的幾個名詞概念解釋: 

 

切面(Aspect): 一個關注點的模化,個關注點可能會橫切多個象。事管理是J2EE用中一個關於橫切關注點的很好的例子。 Spring AOP中,切面可使用通用(基於模式的格) 或者在普通中以 @Aspect 註解(@AspectJ格)來實現 

 

接點(Joinpoint): 在程序程中某個特定的點,好比某方法調用的候或者理異常的候。 Spring AOP中,一個接點  表明一個方法的行。 聲明一個org.aspectj.lang.JoinPoint型的參數可使通知(Advice)的主體部分接點信息。 

 

通知(Advice): 在切面的某個特定的接點(Joinpoint)上行的做。通知有各類型,其中包括「around」「before」「after」等通知。 通知的型將在後面部分討論AOP框架,包括Spring,都是以截器作通知模型, 維護一個以接點中心的截器 

 

切入點(Pointcut): 匹配接點(Joinpoint)的斷言。通知和一個切入點表達式關,並在滿個切入點的接點上運行(例如,當行某個特定名稱的方法)。 切入點表達式如何和接點匹配是AOP的核心:Spring缺省使用AspectJ切入點法。 

 

引入(Introduction): (也被稱內部型聲明(inter-type declaration))。聲明外的方法或者某個型的字段。 Spring引入新的接口(以及一個對應實現)到任何被代理的象。 例如,你可使用一個引入來使bean實現 IsModified 接口,以便存機制。 

 

標對象(Target Object): 被一個或者多個切面(aspect)所通知(advise)的象。也有人把它叫作 被通知(advised 象。 既然Spring AOP是通運行代理實現的,象永是一個 被代理(proxied 象。 

 

AOP代理(AOP Proxy): AOP框架象,用來實現切面契aspect contract)(包括通知方法行等功能)。 Spring中,AOP代理能夠是JDK動態代理或者CGLIB代理。 注意:Spring 2.0最新引入的基於模式(schema-based格和@AspectJ註解格的切面聲明,於使用格的用,代理的建是透明的。 

 

入(Weaving): 把切面(aspect接到其它的用程序型或者象上,並建一個被通知(advised)的象。 些能夠在編譯時(例如使用AspectJ編譯器),載時和運行完成。 Spring和其餘Java AOP框架一,在運行完成入。 

 

通知的型: 

 

前置通知(Before advice): 在某接點(join point)以前行的通知,但個通知不能阻止接點前的行(除非它拋出一個異常)。 

 

返回後通知(After returning advice): 在某接點(join point)正常完成後行的通知:例如,一個方法沒有拋出任何異常,正常返回。 

 

拋出異常後通知(After throwing advice): 在方法拋出異常退出時執行的通知。 

 

後通知(After (finally) advice): 當某接點退出的行的通知(不是正常返回是異常退出)。 

 

環繞通知(Around Advice): 一個接點(join point)的通知,如方法調用。是最大的一種通知型。 環繞通知能夠在方法調用先後完成自定的行。它也會選擇是否繼續執接點或直接返回它本身的返回或拋出異常來行。 

 

環繞通知是最經常使用的一種通知型。大部分基於截的AOP框架,例如NanningJBoss4,都只提供環繞通知。 

 

切入點(pointcut)和接點(join point)匹配的概念是AOP的關使得AOP不一樣於其它僅僅提供截功能的舊技 切入點使得定位通知(advice)可獨立於OO次。 例如,一個提供聲明式事管理的around通知能夠被用到一橫跨多個象中的方法上(例如服務層的全部業務操做)。

 

 

本文摘自網絡,出處忘記補充了。文中若有錯誤的地方,還望見諒。

相關文章
相關標籤/搜索