专业知识
Spring Web
1.Spring 事务
1)两种:编程式事务 和 声明式事务
编程式事务:需要在代码中显示调用一些方法,如beginTransaction()、commit()、rollback();如在执行某方法时需要事务处理,则需要在方法开始时开启事务,处理完成后,在方法结束时,关闭事务。即需要手工写提交、回滚事务代码等,相当于手动事务。
声明式事务:在某方法外围添加注解或者直接在配置文件中定义该方法需要事务处理,在spring中会通过配置文件在该方法前后拦截,并添加事务。在配置文件里定义一下什么时候需要事务,到时候系统会自动commit,出异常了自动rollback,不需要在代码里写commit或者rollback,相当于系统自动事务。
2)
TransactionDefinition:给定的事务规则
PlatformTransactionManager:按照...来执行提交或者回滚操作
TransactionStatus:一个运行着的事务的状态
所谓事务管理,就是“按照给定的事务规则来执行提交或者回滚操作”
2.Servlet:供web容器调用的特殊java接口
1)servlet接口定义了servlet生命周期方法:
init()
service():接收请求,发送响应
destory()
2)当多个浏览器终端请求web服务器时,服务器为每个客户启动一个线程,不是进程
3.Spring mvc 和 structs
1)
spring mvc 入口servlet:url传来之后,就对其进行处理,之后返回或转向某一自己指定的页面
structs2 是filter :流程是线性的,url传来后,检查之后,可保持原来的流程继续向下执行
2)
spring mvc:基于方法的设计,拦截到方法后根据参数上的注解,把request数据注入进去
structs:基于类,每次来了请求就创建一个Action,然后调用setter、getter方法把request中的数据注入
3)开发效率,spring mvc更快一些
4.spring七大框架模块
1)Spring Core:Core封装包是框架的最基础部分,提供IOC和依赖注入特性
2)Spring Context:框架式的对象访问方法,添加了对国际化的支持、事件传播、资源装载、Context透明创建
3)Spring Dao(Data Access Object):提供了JDBC的抽象层
4)Spring ORM:提供了常用的“对象/关系”映射的APIs的集成层,其中包括JPA、JDO、Hibernate和iBatis
5) Spring AOP :面向切面
6)Spring Web :Web开发
7)Spring Web MVC
5.重写和重载
链接:https://blog.csdn.net/wintershii/article/details/80558739
6.开发者在开发Servlet继承HttpServlet时如何处理父类的service方法?
一般我们都是不对service()方法进行重载(没有特殊要求的话),而只是重载doGet()之类的doXXX()方法,减少了开发工作量,但是如果重载了service()方法,doXXX()方法也是要重载的,即不论是否重载service()方法,doXXX()方法都是需要重载的。
7.
1)Java Servlet API中引用Session机制来追踪客户的状态
2)当一个Session开始时,Servlet容器将创建一个HttpSession对象,Servlet容器为HttpSession分配一个唯一标识符,称为Session ID。Servlet容器将Session ID作为Cookie保存在客户的浏览器中,每次客户发出Http请求时,Servlet容器可以从HttpRequest对象中读取Session ID,然后根据Session ID找到相应的HttpSession对象,从而获取客户的状态信息。
3)当客户端浏览器中禁止Cookie,Servlet容器无法从客户端浏览器中取得作为Cookie的Session ID,也就无法跟踪客户状态。
4)如果客户端浏览器不支持Cookie,Servlet容器可以重写客户请求的URL,把Session ID添加到URL信息中。
HttpServletResponse接口提供了重写URL的方法:public java.lang.String.encodeURL(java.lang.String.url)
该方法的实现机制:
a.先判断当前的Web组件是否启用Session,如果没有启用Session,直接返回参数url
b.再判断客户端浏览器是否支持Cookie,如果支持直接返回参数url;如果不支持,就在参数url中加入Session ID信息,然后返回修改后的url
8.Spring框架的核心思想:
1)依赖注入
2)控制反转
3)面向切面
面向对象是Java的核心思想,不是Spring框架的核心思想。
9.关于Spring说法正确的是(B D)
A.Spring 不能和Hibernate一样设置bean是否为延迟加载
延迟加载有两种方式:一是hibernate提供的延迟载入机制;二是Spring框架提供的DAO模式结合Hibernate延迟加载的Web方案
B.在Spring配置文件中,就可以设置Bean初始化函数和消亡函数
Spring可以在配置文件中,配置Bean初始化函数和消亡函数
C.属性注入只能是简单数据,构造方法注入可以是对象
Spring可以注入复杂的数据类型比如对象、数组、List集合、Map集合、Properties等
D.对象的设计应使类和构件之间的耦合最小
对象之间的耦合越高,维护成本越高,对象的设计应该使类和构件之间的耦合最小
10.Spring开发模式的工作流程:
1)Spring MVC将所有的请求都提交给DispatcherServlet
2)DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller
3)DispatcherServlet将请求提交到目标Controller
4)Controller进行业务逻辑处理后,会返回一个ModelAndView
5)找到ModelAndView对象指定的视图对象
6)视图对象负责渲染返回给客户端
11.有关Spring DAO描述错误的是(B)
A.Spring 提供的DAO(数据访问对象)支持主要的目的是便于以标准的方式使用不同的数据访问技术
B.方便的事务管理:Spring声明式事务管理力度是类级别的
解析:方法级别的
C.异常包装:Spring能够包装Hibernate异常,把它们从CheckedException变为RuntimeException;开发者可选择在恰当的层处理数据中不可恢复的异常,从而避免繁琐的catch/throw及异常声明。
解析:Spring提供了一种方便的方法,把特定于某种技术的异常,如SQLException转化为自己的异常,这种异常属于以DataAccessException为根的异常层次,这些异常封装了原始异常对象,这样就不会有丢失任何错误信息的风险。除了对JDBC异常的封装,Spring也对Hibernate异常进行了封装,把它们从一种专有的checked异常,转化为一系列抽象的运行时异常。对JDO也是这样,它可以让你轻松处理大多数持久化异常(这些异常大多是不可恢复的,而且只出现在特定的层次),而不需要在DAO中编写讨厌的样板式的catch/throw代码块和异常声明。
D.Spring提供的DAO支持了JDBC、JDO和Hibernate
12.AOP:面向切面编程,与传统的OOP相比,传统OOP编程是自顶向下的编写主业务逻辑,但往往需要参杂着一些与主业务逻辑无关或关系不大的逻辑,这就产生了横切性问题,AOP能很好地隔离和管理这些与主业务逻辑关联不大的业务代码,使得代码的可读性和可维护性大大提高。
13.下面有关Spring的事务传播特性,说法错误的是(B)
A.PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行
B.PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就抛出异常
改为:新建事务
抛出异常的是MANDATORY(强制,即必须有事务)
C.PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起
D.PROPAGATION_NESTED:支持当前事务,新增Savepoint点,与当前事务同步提交或回滚
解析:Spring 支持7种事务传播行为
1) REQUIRED
2) SUPPORTS
3) MANDATORY
4) REQUIRES_NEW
5) NOT_SUPPORTED 以非事务方式执行,如果当前存在事务,就把当前事务挂起
6) NEVER 以非事务方式执行,如果当前存在事务,则抛出异常
7) NESTED
14.IoC(Inversion of Control)控制反转
面向对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度,它把传统上由 程序代码 直接操控的对象的调用权交给 容器,通过容器实现对象组件的装配和管理,所谓“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。
15.有关Spring依赖注入说法错误的是(D)
A.IOC就是由Spring来负责控制对象的生命周期和对象间的关系
B.BeanFactory是最简单的容器,提供了基础的依赖注入支持
C.ApplicationContext建立在BeanFactory之上,提供了系统构架服务
D.如果Bean的某一个属性没有注入,ApplicationContext加载后,直至第一次使用调用getBean方法才会抛出异常;而BeanFactory则在初始化自身时检验,这样由利于检查所依赖属性是否注入。
解析:ApplicationContext和BeanFactory说反了。
ApplicatinContext 初始化时就会检查
BeanFactory在第一次使用时未注入,才会抛出异常。(延迟加载)
其它:
1)Spring的IOC容器能够帮助我们自动new对象,对象交给Spring管之后我们不用自己手动去new对象,也就是控制权的转让。
2)Spring使用BeanFactory来实例化、配置和管理对象,但它只是一个接口,里面由一个getBean()方法。
3)我们一般不直接使用BeanFactory,而是用它的子接口ApplicationContext,它继承自BeanFactory接口,拓展了父接口。
16.基于Servlet API如何实现转向时不在地址栏中显示转向后的地址(C)
A.redirect()
B.sendRedirect()
C.forward()
D.transform()
解析:
重定向——redirect——地址栏显示的是新显示的页面的地址(新地址)
转发——forward——地址栏显示的是跳转前的页面的地址(原地址)
17.在J2EE中,使用Servlet过滤器,需要在web.xml中配置(A B)元素
A.<filter>
B.<filter-mapping>
C.<servlet-filter>
D.<filter-config>
解析:
第一部分是过滤器在Web应用中的定义,由<filter>元素表示,包括<filter-name>和<filter-class>两个必需的子元素
第二部分是过滤器映射的定义,由<filter-mapping>元素表示,可以将一个过滤器映射到一个或者多个Servlet或JSP文件,也可以采用url-pattern将过滤器映射到任意特征的url.
18.在Spring框架中获取连接池可以有哪些方式(ABCD)
A.DBCP数据源
DBCP是一个依赖Jakara commons-pool对象池机制的数据库连接池
B.C3P0数据源
C3P0是一个开放源代码的JDBC数据源实现项目,它在lib目录中与Hibernate一起发布,实现了JDBC3和JDBC2扩展规范说明的Connextion和Statement池
C.Spring的数据源实现类(DriverManagerDataSource)
Spring本身也提供了一个简单的数据源实现类DriverManagerDataSource,它位于org.springframework.jdbc.datasource包中,这个类实现了javax.sql.DataSource接口,但它并没有提供池化连接的机制,每次调用getConnection()获取新连接是,只是简单地创建一个新的连接,因此,这个数据源类比较适合在单元测试或简单的独立应用中使用,因为它不需要额外的依赖类。
D.获取JNDI数据源
如果应用配置在高性能的应用服务器(如WebLogic或Websphere等)上,我们可能更希望使用应用服务器本身提供的数据源,应用服务器的数据源使用JNDI开放调用者使用,Spring为此专门提供引用JNDI资源的JodiObjectFactoryBean类。
19.面向对象的六大原则:
开闭原则:软件中的对象(类、模块、函数等)应该对于扩展是开放的,对于修改是关闭的
单一职责原则:就一个类而言,应该仅有一个引起它变化的原因,也就是说一个类应该只负责一件事情。
里氏替换原则:子类只能去扩展基类,而不是隐藏或覆盖基类
依赖倒置原则:模块间的依赖是通过抽象来实现的,实现类之间不发生直接的依赖关系,其依赖关系是通过接口来实现的。
接口隔离原则:客户端不应该依赖它不需要的接口
迪米特原则:一个对象应该对其它对象保持最小的了解。