您的位置 首页 java

面试题总结—JAVAWEB SSH框架部分

1.jsp有哪些内置对象?作用分别是什么?

JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):

1).request 用户端请求,此请求会包含来自GET/POST请求的参数。

2).response 网页传回用户端的回应。

3).pageContext 网页的属性是在这里管理。

4).session 与请求有关的会话期。

5).application servlet 正在执行的内容。

6).out 用来传送回应的输出。

7).config servlet的构架部件。

8).page JSP网页本身。

9).exception 针对错误网页,未捕捉的例外。

2.jsp有哪些动作?作用分别是什么?

JSP共有以下6种基本动作

1).jsp:include:在页面被请求的时候引入一个文件。

2).jsp:useBean:寻找或者 实例化 一个 JavaBean

3).jsp:setProperty:设置JavaBean的属性。

4).jsp:getProperty:输出某个 Java Bean的属性。

5).jsp:forward:把请求转到一个新的页面。

6).jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。

3.JSP中动态INCLUDE与静态INCLUDE的区别?

1).动态INCLUDE用jsp:include动作实现

它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数

2).静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面

<%@ include file=”included.htm” %>

4.JAVA servlet API中forward() 与redirect()的区别?

前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

5.说一说Servlet的生命周期?

servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。

6.谈谈 Struts2 的工作流程?(因为在面试中,struts1 基本很少问道,这里主要针对struts2 部分)

Struts 2框架本身大致可以分为3个部分:

核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。

核心控制器FilterDispatcher是Struts 2框架的基础,

包含了框架内部的控制流程和处理机制。

业务控制器Action和业务逻辑组件是需要用户来自己实现的。

用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,

供核心控制器FilterDispatcher来使用。

Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,

所以说Struts 2是WebWork的升级版本。基本简要流程如下:

1).客户端初始化一个指向Servlet容器的请求;

2). 这个请求经过一系列的 过滤器 (Filter)

(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,

这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)

3).接着FilterDispatcher被调用,

FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action

4).如果ActionMapper决定需要调用某个Action,

FilterDispatcher把请求的处理交给ActionProxy

5).ActionProxy通过Configuration Manager询问框架的配置文件,

找到需要调用的Action类

6).ActionProxy创建一个ActionInvocation的实例。

7).ActionInvocation实例使用命名模式来调用,

在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8).一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果 。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。 在表示的过程中可以使用Struts2 框架中继承的标签。 在这个过程中需要涉及到ActionMapper

9).响应的返回是通过我们在web.xml中配置的过滤器

10).如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。

7.struts2是如何启动的?

struts2框架是通过Filter启动的,即StrutsPrepareAndExecuteFilter,此过滤器为struts2的核心过滤器; StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。struts2读取到struts.xml的内容后,是将内容封装进javabean对象然后存放在内存中,以后用户的每次请求处理将使用内存中的数据,而不是每次请求都读取struts.xml文件。

8.struts2框架的核心控制器是什么?它有什么作用?

1).Struts2框架的核心控制器是StrutsPrepareAndExecuteFilter。

2).作用:

负责拦截由<url-pattern>/*</url-pattern>指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。默认情况下,如果用户请求的路径

不带后缀或者后缀以.action结尾,这时请求将被转入struts2框架处理,否则struts2框架将略过该请求的处理。

可以通过常量”struts.action.extension”修改action的后缀,如:

<constant name=”struts.action.extension” value=”do”/>

如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。

<constant name=”struts.action.extension” value=”do,go”/>

9.struts2配置文件的加载顺序?

struts.xml ——> struts.properties

常量可以在struts.xml或struts.properties中配置,如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值.

struts.xml文件的作用:通知Struts2框架加载对应的Action资源。

10.说下Struts的设计模式?MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动态的网页,返回给客户。

11.拦截器和过滤器的区别?

1).拦截器是基于java反射机制的,而过滤器是基于函数回调的。

2).过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。

3).拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。

4).拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。

5).在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。

12.用自己的话简要阐述struts2的执行流程?

Struts 2框架本身大致可以分为3个部分:

1).核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。

2).核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。

3).业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。基本简要流程如下:1、客户端浏览器发出HTTP请求。2、根据web.xml配置,该请求被FilterDispatcher接收。3、根据struts.xml配置,找到需要调用的Action类和方法,并通过 IoC 方式,将值注入给Aciton。4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。6、返回HTTP响应到客户端浏览器。

13. hibernate 工作原理及为什么要用?

工作原理:

1).读取并解析配置文件

2).读取并解析映射信息,创建 SessionFactory

3).打开Session

4).创建事务Transation

5).持久化操作

6).提交事务

7).关闭Session

8).关闭SesstionFactory

为什么要用:

1). 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

2). Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

3). hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

4). hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

14.Hibernate是如何延迟加载?

1). Hibernate2延迟加载实现:

a)实体对象

b)集合(Collection)

2). Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。

15.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)

类与类之间的关系主要体现在表与表之间的关系进行操作,它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many .

16.说下Hibernate的缓存机制?

1). 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存

2). 二级缓存:

a) 应用及缓存

b) 分布式缓存

条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据

c) 第三方缓存的实现

17.Hibernate session接口的get和load方法有何异同?

其实它们也没有什么不同的, 作用其实都是一样的,但是有一定的区别,get是每次都会从数据库取数据以保证数据的可靠性,而load会返回proxy,相当于是一个存根,它的值会去hibernate中的session的二级缓存里去找,如果找不到目则会laxy load一下,简单来说,用get的时候,当为空的时候不会抛出异常,反之load会抛.

18.如何优化Hibernate?

1).使用双向一对多关联,不使用单向一对多。

2).灵活使用单向一对多关联。

3).不用一对一,用多对一取代。

4).配置对象缓存,不使用集合缓存。

5).一对多集合使用Bag,多对多集合使用Set。

6). 继承类使用显式多态。

7). 表字段要少,表关联不要怕多,有二级缓存撑腰。

19.Hibernate中save、persist和saveOrUpdate这三个方法的不同之处?

除了get和load,这又是另外一个经常出现的Hibernate面试问题。 所有这三个方法,也就是save()、saveOrUpdate()和persist()都是用于将对象保存到数据库中的方法,但其中有些细微的差别。例如,save()只能INSERT记录,但是saveOrUpdate()可以进行记录的INSERT和UPDATE。还有,save()的返回值是一个Serializable对象,而persist()方法返回值为void。

20.Hibernate中的SessionFactory有什么作用? SessionFactory是 线程安全 的吗?

SessionFactory就是一个用于创建Hibernate的Session对象的工厂。SessionFactory通常是在应用启动时创建好的,应用程序中的代码用它来获得Session对象。作为一个单个的数据存储,它也是线程安全的,所以多个线程可同时使用同一个SessionFactory。Java JEE应用一般只有一个SessionFactory,服务于客户请求的各线程都通过这个工厂来获得Hibernate的Session实例,这也是为什么SessionFactory接口的实现必须是线程安全的原因。还有,SessionFactory的内部状态包含着同对象关系影射有关的所有元数据,它是不可变的,一旦创建好后就不能对其进行修改了。

21.Hibernate对象的三种状态?

hibernate的对象有3种状态,分别为:瞬时态(Transient)、持久态(Persistent)、脱管态(Detached).处于持久态的对象也称为PO(PersistenceObject),瞬时对象和脱管对象也称为VO(ValueObject).

瞬时态

由new命令开辟内存空间的Java对象,

eg.Person person=new Person(“xiaoxiao”,”女”);

如果没有变量对该对象进行引用,它将被java虚拟机回收.

瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象.

持久态

处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识.如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联.

当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下.

持久对象具有如下特点:

1.和session实例关联;

2.在数据库中有与之关联的记录.

脱管态

当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象.当脱管对象被重新关联到session上时,并再次转变成持久对象.

脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转变成持久对象.

脱管对象具有如下特点:

1.本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收;

2.比瞬时对象多了一个数据库记录标识值.

22.什么是 Spring 框架?Spring框架有哪些主要模块?

Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring框架,不必担心Spring是如何在后台进行工作的。

Spring框架至今已集成了20多个模块。这些模块主要被分如下图所示的核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。

23.spring工作原理?

1).spring mvc请所有的请求都提交给 DispatcherServlet ,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。

2).DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.

3).DispatcherServlet请请求提交到目标Controller

4).Controller进行业务逻辑处理后,会返回一个ModelAndView

5).Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象

6).视图对象负责渲染返回给客户端。

24.什么是控制反转(IOC)?什么是依赖注入?

控制反转是应用于软件工程领域中的,在运行时被装配器对象来绑定耦合对象的一种编程技巧,对象之间耦合关系在编译时通常是未知的。在传统的编程方式中,业务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过“依赖注入”实现的。

控制反转是一种以给予应用程序中目标组件更多控制为目的设计范式,并在我们的实际工作中起到了有效的作用。

依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式。这就需要一种机制用来激活相应的组件以提供特定的功能,所以依赖注入是控制反转的基础。否则如果在组件不受框架控制的情况下,框架又怎么知道要创建哪个组件?

在Java中依然注入有以下三种实现方式:

  1. 构造器 注入

  2. Setter方法注入

  3. 接口注入

25.请解释下Spring框架中的IoC?

Spring中的 org.springframework.beans 包和 org.springframework.context包构成了Spring框架IoC容器的基础。

BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。ApplicationContex接口对BeanFactory(是一个子接口)进行了扩展,在BeanFactory的基础上添加了其他功能,比如与Spring的AOP更容易集成,也提供了处理message resource的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对Web应用的WebApplicationContext。

org.springframework.beans.factory.BeanFactory 是Spring IoC容器的具体实现,用来包装和管理前面提到的各种bean。BeanFactory接口是Spring IoC 容器的核心接口。

26.Spring有几种配置方式?

将Spring配置到应用开发中有以下三种方式:

  1. 基于XML的配置

  2. 基于注解的配置

  3. 基于Java的配置

27.如何用基于XML配置的方式配置Spring?

在Spring框架中,依赖和服务需要在专门的配置文件来实现,我常用的XML格式的配置文件。这些配置文件的格式通常用<beans>开头,然后一系列的bean定义和专门的应用配置选项组成。

SpringXML配置的主要目的时候是使所有的Spring组件都可以用xml文件的形式来进行配置。这意味着不会出现其他的Spring配置类型(比如声明的方式或基于Java Class的配置方式)

Spring的XML配置方式是使用被Spring命名空间的所支持的一系列的XML标签来实现的。Spring有以下主要的命名空间:context、beans、jdbc、tx、aop、mvc和aso。

下面这个web.xml仅仅配置了 DispatcherServlet 这件最简单的配置便能满足应用程序配置运行时组件的需求。

28.如何用基于Java配置的方式配置Spring?

Spring对Java配置的支持是由@Configuration注解和@Bean注解来实现的。由@Bean注解的方法将会实例化、配置和初始化一个新对象,这个对象将由Spring的IoC容器来管理。@Bean声明所起到的作用与<bean/> 元素类似。被@Configuration所注解的类则表示这个类的主要目的是作为bean定义的资源。被@Configuration声明的类可以通过在同一个类的内部调用@bean方法来设置嵌入bean的依赖关系。

最简单的@Configuration 声明类请参考下面的代码:

对于上面的@Beans配置文件相同的XML配置文件如下:

上述配置方式的实例化方式如下:利用AnnotationConfigApplicationContext 类进行实例化

要使用组件组建扫描,仅需用@Configuration进行注解即可:

在上面的例子中,cn.javaxxw包首先会被扫到,然后再容器内查找被@Component 声明的类,找到后将这些类按照Sring bean定义进行注册。

如果你要在你的web应用开发中选用上述的配置的方式的话,需要用AnnotationConfigWebApplicationContext 类来读取配置文件,可以用来配置Spring的Servlet监听器ContrextLoaderListener或者Spring MVC的DispatcherServlet。

29.怎样用注解的方式配置Spring?

Spring在2.5版本以后开始支持用注解的方式来配置依赖注入。可以用注解的方式来替代XML方式的bean描述,可以将bean描述转移到组件类的内部,只需要在相关类上、方法上或者字段声明上使用注解即可。注解注入将会被容器在XML注入之前被处理,所以后者会覆盖掉前者对于同一个属性的处理结果。

注解装配在Spring中是默认关闭的。所以需要在Spring文件中配置一下才能使用基于注解的装配模式。如果你想要在你的应用程序中使用关于注解的方法的话,请参考如下的配置。

在 <context:annotation-config/>标签配置完成以后,就可以用注解的方式在Spring中向属性、方法和构造方法中自动装配变量。

下面是几种比较重要的注解类型:

  1. @Required: 该注解应用于设值方法。

  2. @Autowired 该注解应用于有值设值方法、非设值方法、构造方法和变量。

  3. @Qualifier: 该注解和@Autowired注解搭配使用,用于消除特定bean自动装配的歧义。

  4. JSR-250 Annotations: Spring支持基于JSR-250 注解的以下注解,@Resource、@PostConstruct 和 @PreDestroy。

30.Spring Bean的 作用域 之间有什么区别?

Spring容器中的bean可以分为5个范围。所有范围的名称都是自说明的,但是为了避免混淆,还是让我们来解释一下:

  1. singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。

  2. prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例。

  3. request:在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

  4. Session:与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。

  5. global-session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。

全局作用域与Servlet中的session作用域效果相同。

31.Spring框架中的单例Beans是线程安全的么?

Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Spring bean并没有可变的状态(比如Serview类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的。如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全。

最浅显的解决办法就是将多态bean的作用域由 “singleton ”变更为“ prototype

32.请解释Spring Bean的自动装配?

在Spring框架中,在配置文件中设定bean的依赖关系是一个很好的机制,Spring容器还可以自动装配合作关系bean之间的关联关系。这意味着Spring可以通过向Bean Factory中注入的方式自动搞定bean之间的依赖关系。自动装配可以设置在每个bean上,也可以设定在特定的bean上。

下面的XML配置文件表明了如何根据名称将一个bean设置为自动装配:

<bean id=”employeeDAO” class=”cn.javaxxw.EmployeeDAOImpl” autowire=”byName” />

除了bean配置文件中提供的自动装配模式,还可以使用@Autowired注解来自动装配指定的bean。在使用@Autowired注解之前需要在按照如下的配置方式在Spring配置文件进行配置才可以使用。

<context:annotation-config />

配置好以后就可以使用@Autowired来标注了。

33.请解释自动装配模式的区别?

在Spring框架中共有5种自动装配,让我们逐一分析。

  1. no: 这是Spring框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在bean定义中用标签明确的设置依赖关系。

  2. byName: 该选项可以根据bean名称设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的名称自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。

  3. byType: 该选项可以根据bean类型设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的类型自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。

  4. constructor: 造器的自动装配和byType模式类似,但是仅仅适用于与有构造器相同参数的bean,如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。

  5. autodetect 该模式自动探测使用构造器自动装配或者byType自动装配。首先,首先会尝试找合适的带参数的构造器,如果找到的话就是用构造器自动装配,如果在bean内部没有找到相应的构造器或者是无参构造器,容器就会自动选择byTpe的自动装配方式。

34.请举例解释@Autowired注解?

1).@Autowired注解对自动装配何时何处被实现提供了更多细粒度的控制。@Autowired注解可以像@Required注解、构造器一样被用于在bean的设值方法上自动装配bean的属性,一个参数或者带有任意名称或带有多个参数的方法。

比如,可以在设值方法上使用@Autowired注解来替代配置文件中的 <property>元素。当Spring容器在setter方法上找到@Autowired注解时,会尝试用byType 自动装配。

当然我们也可以在构造方法上使用@Autowired 注解。带有@Autowired 注解的构造方法意味着在创建一个bean时将会被自动装配,即便在配置文件中使用<constructor-arg> 元素。

下面是没有构造参数的配置方式:

35.FileSystemResource和ClassPathResource有何区别?

在FileSystemResource 中需要给出spring-config.xml文件在你项目中的相对路径或者绝对路径。在ClassPathResource中spring会在ClassPath中自动搜寻配置文件,所以要把ClassPathResource 文件放在ClassPath下。

如果将spring-config.xml保存在了src文件夹下的话,只需给出配置文件的名称即可,因为src文件夹是默认。

简而言之,ClassPathResource在环境变量中读取配置文件,FileSystemResource在配置文件中读取配置文件。

36.Spring 框架中都用到了哪些设计模式?

Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的:

  1. 代理模式—在AOP和remoting中被用的比较多。

  2. 单例模式—在spring配置文件中定义的bean默认为单例模式。

  3. 模板方法—用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。

  4. 前端控制器—Spring提供了DispatcherServlet来对请求进行分发。

  5. 视图帮助(View Helper )—Spring提供了一系列的JSP标签,高效宏来辅助将分散的代码整合在视图里。

  6. 依赖注入—贯穿于BeanFactory / ApplicationContext接口的核心理念。

  7. 工厂模式—BeanFactory用来创建对象的实例。

文章来源:智云一二三科技

文章标题:面试题总结—JAVAWEB SSH框架部分

文章地址:https://www.zhihuclub.com/184017.shtml

关于作者: 智云科技

热门文章

网站地图