logo头像

学如逆水行舟,不进则退!!!

文章目录

面试框架部分总结

本文于512天之前发表,文中内容可能已经过时。

面试框架部分总结
Struts2

工作原理


struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

<filter-mapping>
    <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>


只需要将这段代码放在web.xml文件中就会执行Struts2流程,下面慢慢谈
1、struts2是如何启动的呢?
Struts2通过我们上述的web.xml我们添加的过滤器里面StrutsPrepareAndExecuteFilter来启动的,在我们打开Tomcat的时候,会执行StrutsPreareAndExecuteFilter中init方法(里面还有 doFilter + destory + postInit三个方法) init 方法会去加载struts.xml文件,并将struts.xml配置文件中内容封装成javabean存放在内存中,之后在请求的时候,就会去这片内存中直接取,而不用每次都去struts文件中了。
2、Struts核心控制器StrutsPrepareAndExecuteFilter的作用
StrutsPrepareAndExecuteFilter主要负责拦截URL请求,我们在上面配置了/*意思就是我们这个struts将会拦截所有的请求,如果在配置文件里你没有设置拦截url这个,那么在strutsPrepareAndExecuteFilter中doFilter方法中就会默认拦截没有后缀名的或者是后缀名是.action的路径,其他就不会被struts2框架处理。

3、struts2配置文件加载的顺序。
Struts.xml—->struts.properties常量可以定义在struts.xml文件中。也可以定义在struts.properties文件中,如果多个properties文件总值出现了重复,则后出现的覆盖之前的值
Struts.xml文件的作用就是通知struts2框架加载与url对应的action资源
4、struts2是如何管理action 的,好处?
首先strutss使用包来管理action的,包的作用和java中的包的作用类似的(在配置文件中的package,指定继承struts-default),我理解为给action一个大本营,意思就是所有的action都会放在这个包中统一管理。所以我们应该把一组业务逻辑放在一个包中。
5、struts2中默认struts-default 包的作用是什么?
a、Struts-default是struts内置的,他定义了struts2中的众多的拦截器和result类型,实现了很多struts2的核心的功能,
如:从请求中把参数封装到action中
文件上传和数据验证等等都是通过内置拦截器实现的
当包继承了struts-default才能使用struts2为我们提供的这些功能
b、struts-default是在struts-default.xm文件中定义的,struts-default.xml文件也是struts2中内置的配置文件,不用自己写,struts2会自动的加载这个配置文件的。
c、通常每个包都是继承struts-default包的
也就是说上诉不需要我们配置什么。只是一个流程
6、struts2中的action的url访问路径由什么构成的?
由两部分组成的:
包的命名空间+action的名称【.action】
7、在struts.xml文件中可以不为action制定class属性吗
可以的,
但是如果你不指定class,该action的class属性默认是 com.opensymphony.xwork2.ActionSupport
如果没有给action制定method,默认执行的就是ActionSupport中的execute方法,该方法里就一句话 return “SUCCESS”:
没有指定result的name 默认success
没有指定类型Type 默认dispatcher
在action中都会有一个默认的拦截器的引用:

;
注意:
1.一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用,所以此时要显式的引进默认的拦截器;
2.每个包只能指定一个默认拦截器,每个默认拦截器只针对当前包下有效。

8、struts2拦截器的作用,拦截器与过滤器的区别
拦截器是针对action的,他提供一种机制可以使开发者可以定义在action执行前后的代码块。也就是说拦截器在action工作前后工作,在前后我们开发者可以自己写进一些功能代码,减少代码冗余
过滤器是拦截用户的请求的,范围大
9、常见的拦截器
alias
在不同请求之间将请求参数在不同名字件转换,请求内容不变
chain
让前一个Action的属性可以被后一个Action访问,现在和chain类型的result()结合使用。

checkbox
添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox。

cookies
使用配置的name,value来是指cookies

conversionError
将错误从ActionContext中添加到Action的属性字段中。

createSession
自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。

debugging
提供不同的调试用的页面来展现内部的数据状况。

execAndWait
在后台执行Action,同时将用户带到一个中间的等待页面。

exception
将异常定位到一个画面

fileUpload
提供文件上传功能

i18n
记录用户选择的locale

logger
输出Action的名字

store
存储或者访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等。

model-driven
如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中。

scoped-model-driven
如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。

params
将请求中的参数设置到Action中去。

prepare
如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。

scope
将Action状态存入session和application的简单方法。

servletConfig
提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。

staticParams
从struts.xml文件中将中的中的内容设置到对应的Action中。

roles
确定用户是否具有JAAS指定的Role,否则不予执行。

timer
输出Action执行的时间

token
通过Token来避免双击

tokenSession
和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中

validation
使用action-validation.xml文件中定义的内容校验提交的数据。

workflow
调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面

N/A
从参数列表中删除不必要的参数

profiling
通过参数激活profi

参考网址:http://blog.csdn.net/huxian1234/article/details/17110211

Hibernate

1、Hibernate的配置文件:该文件以cfg.xml结尾
2、配置文件主要存放了:数据的url地址+数据库的用户信息+缓存+mapping文件的配置路径
3、mapping 该文件的后缀名:.hbm.xml

class元素:定义一个实体类的映射信息。
常用属性如下。
name表示对象实体类的全限定名。
table表示对应的数据库表名。

id元素:定义该属性到数据库表主键字段的映射。
常用属性如下。
name表示实体类属性的名字。
type表示实体类属性的类型。
column 表示数据库表字段的名字,也可在子元素column中指定。
generator 元素:id元素的子元素用于指定主键的生成策略。
常用属性及子元素如下。
class用来指定具体主键生成策略。
param元素用来传递参数。
常用主键的生成策略如下
increment:对类型为long、short 或int 的主键,以自动增长的方式生成主键的值。主键按数值顺序递增,增量为1。
identity:对如SQL Server、DB2、MySQL等支持标识列的数据库,可使用该主键生成策略生成自动增长主键,但要在数据库中将该主键设置为标识列。
sequence:对如Oracle、DB2等支持序列的数据库,可使用该主键生成策略生成自动增长主键,通过子元素param传入数据库中序列的名称。

native:由Hibernate 根据底层数据库自行判断采用何种主键生成策略,意思是由使用的数据库生成主键的值。
assigned:主键由应用程序负责生成,无需Hibernate参与。

property 元素:定义实体类中属性和数据库中表的字段的对应关系。
常用属性如下。
name表示实体类属性的名字。
type表示实体类属性的类型。
column 表示数据库表字段的名字,也可在子元素column中指定。

column 元素:用于指定其父元素代表的实体类属性所对应的数据库表中的字段。
常用属性如下。
name表示字段的名字。
length表示字段长度。
not-null设定是否可以为null,值为true 表示不能为null。
4、加载配置文件
// 1.加载配置文件 hibernate.cfg.xml
StandardServiceRegistryregistry = new StandardServiceRegistryBuilder()
.configure()// configures settings from hibernate.cfg.xml
.build();
try{
//2.SessionFactory工厂对象
SessionFactorysessionFactory = new MetadataSources(registry)
.buildMetadata().buildSessionFactory();

                 //3.获取工厂中关于session对象
                 Sessionsession = sessionFactory.openSession();

                 //4.session对象
                 Useruser1 = session.get(User.class, 2);

                 //session的缓存
                 Useruser2 = session.get(User.class, 1);
                 System.out.println(user1);
                 System.out.println(user2);
                 //5.释放资源
                 session.close();

          }catch (Exception e) {
                 e.printStackTrace();
                 //The registry would be destroyed by the SessionFactory, but we had
                 //trouble building the SessionFactory
                 //so destroy it manually.
                 StandardServiceRegistryBuilder.destroy(registry);
          }

5、get和load的区别
Get不支持延时加载 而load支持
当查询特定的数据库不存在的数据时,get返回null,而load会抛异常
6、为什么加载主键的时候不需要发出sql语句。
因为主键ID并不是实体的属性,在用hibernate加载的时候,只会产生该对象的代理对象,代理对象里属性都是默认值,当你真正的调用属性的时候才会从数据库中加载数据
7、缓存
缓存介于应用程序和永久性数据存储源之间
使用缓存,可以降低应用程序直接读写永久性数据的频率,提高运行性能
8、hibernate提高两个级别的缓存
a) Session级别的缓存:属于事物级别的缓存,由hibernate管理,一般情况无需进行干预
b) Sessionfactory级别的缓存。属于进程范围的缓存,sessionFactory缓存也可以分为两类
i. 内置缓存:hibernate自带的,不可卸载。通常在hibernate的初始化阶段,hibernate会把映射元数据和预定义sql语句放到sessionFactory的缓存中,映射元数据是映射文件中的数据的复制,而预定义sql语句是hibernate根据映射元数据推到出来的sql语句
ii. 外置缓存:一个可配置的缓存插件,默认情况hibernate不会启用

Spring

http://www.php100.com/html/it/focus/2014/0603/6931.html

上一篇
坚持原创技术分享,您的支持将鼓励我继续创作!