版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java面试100题参考答案
Strutsl的工作原理
6:HIES
.在web应用程序启动就会加载ActionServlet,ActionServlet从配置文件struts-config.xml中读取配置信
息,并把它们存放到各种配置对象中。用户发起请求后,按如下步骤执行:
(1)用户的请求以HTTP方式传输到服务器上,接受请求的是ActionServlet.
(2)ActionServlet接收到请求后,会查找Struts-config.xml文件来确定服务器上是否有用户请求的操
作,此处用户请求操作应为登陆操作。如果没有,则返回一个用户请求无效的出错信息。
(3)当ActionServlet请求找到用户请求的Action后,首先将用户输入的表单参数打包成一个
ActionFrom对象。接着ActionServlet再根据struts-config.xml中的配置信息决定是否要执行ActionFrom
对象中的Validate方法。若Validate方法执行有错,则返回。否则,继续下一步。
(4)系统生成一个用户所请求的Action的实例对象,将前面的ActionFrom对象传递给它,运行它
的Execute。方法。
(5)execute。执行结束前会生成以和ActionForward类型的对象并将之返回给ActionServlet,该对象
的作用是告诉ActionFroward就代表跳转到一个登陆成功的页面。ActionServlet将对之进行分析,其
实就相当于接收到一个新的请求,重复(2)~(5)的过程,直到将某个界面返会给用户为止!
3^核心控制器被调用,询问ActionMapper来决定请求是否需要调用某个Action
4、如果ActionMapper决定需要调用某个Action,核心控制器把控制权委派给ActionProxy(备
注:JSP请求无需调用Action)
5、Actionproxy通过ConfigurationManager询问框架的配置.文件(struts.xml),找到需调用的
Action类
6、Actionproxy创建一个Actioninvocation的实例
7^Actioninvocation负责调用Action,在此之前会依次调用所有配置的拦截器
8、Action执行完毕,Actioninvocation负责根据结果码字符串在struts.xml的配置中找到对应的
返回结果
9、拦截器被再次执行
10、过滤器被再次执行
3Strutsl与Struts2的区别
特性Strutsl.xStruts2
Struts2的Action类实现了一个Action接
Strutsl.x要求Action类要扩展自一个抽象口oStruts2也提供ActionSupport基类来
Action类基类。Strutsl.x的一个共有的问题是面向实现一般使用的接口。当然,Action接口不
抽象类编程而不是面向接口编程。是必须的。任何使用execute方法的POJO
可以被当作Struts2的Action对象来使用。
Struts2Action对象为每一个请求都实例
Strutsl.xAction类是单例类,因为只有一
化对象,所以没有线程安全的问题。(实践
个实例来控制所有的请求。单例类策略造成
线程模型中,servlet容器给每一个请求产生许多丢
了一定的限制,并且给开发带来了额外的烦
弃的对象,并且不会导致性能和垃圾回收问
恼。Action资源必须是线程安全或者同步的。
题)。
Strutsl.x的Action类依赖于servletAPI,Struts2的Action和容器无关。Servlet上
Servlet依
当Action被调用时,以Request和Response下文被表现为简单的Maps,允许Action被
赖
作为参数传给execute方法。独立的测试。
测试Strutsl.x的主要问题是execute方法
Struts2的Action可以通过初始化、设置属
暴露了ServletAPI使得测试依赖于容器。
易测性性、调用方法来测试。依赖注入的支持也是
第三方扩展,如StrutsTestCase,提供一
测试变得更简单。
套Slrutsl的模拟对象(来进行测试)。
Strutsl.x使用ActionForm对象来捕获输Struts2直接使用Action属性作为输入属
入。象Action一样,所有的ActionForm必性,消除了对第二个输入对象的需求。输入
须扩展基类。因为其他的JavaBean不能作为属性可能是有自己(子)属性的rich对象类
ActionForm使用,开发者经常创建多余的类型。Action属性能够通过web页面上的
捕获输入
来捕获输入。DynaBeans可以被用来作为替taglibs访问。Struts2也支持ActionForm
代ActionForm的类来创建。但是,开发者可模式。rich对象类型,包括业务对象,能够
能是在重新描述(创建)已经存在的JavaBean用作输入/输出对象。这种ModelDriven特
(仍然会导致有冗余的javabean)。性简化了taglib对POJO输入对象的引用。
Strutsl.x整合JSTL,所以它使用JSTL的表Struts2使用JSTL,但是也支持一个更强大
表达式语言达式语言。表达式语言有基本的图形对象移和灵活的表达式语言"ObjectGraph
动,但是对集合和索引属性的支持很弱。NotationLanguage77(OGNL)。
Struts2使用“ValueStack”技术,使
taglib能够访问值而不需要把你的页面
将值绑定到Strutsl.x使用标准JSP机制来绑定对象到
(view)和对象绑定起来。ValueStack策略
页面页面上下文。
允许通过一系列名称相同但类型不同的属
性重用页面(view)o
Strutsl.x的ActionForm属性经常都是
StringoStruts1.x使用Commons-BeanutilsStruts2使用0GNL进行类型转换。提供基本
类型转换
来进行类型转换。转换每一个类,而不是为和常用对象的转换器。
每一个实例配置。
Strutsl.x支持在ActionForm的validate
Struts2支持通过validate方法和XWork
验证方法中手动校验,或者通过Commons
校验框架来进行校验。
Validator的扩展来校验。
Strutsl.x支持每一个模块有单独的Struts2支持通过拦截器堆栈(Interceptor
Action执行RequestProcessors(生命周期),但是模Stacks)为每一个Action创建不同的生命
控制块中的所有Action必须共享相同的生命周周期。堆栈能够根据需要和不同的Action
期。一起使用。
4Struts2中拦截器的主要作用、工作原理,如何自定义拦截器
1.拦截器的主要作用
早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足、可扩展性降低;Struts
2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于系统的解
耦。为Action提供附加功能时,无需修改Action代码,使用拦截器来提供。Struts2大多数核心功能
是通过拦截器实现的,比如表单组装、表单验证、类型转换、模型驱动、Servlet对象注入、文件上
传等,每个拦截器完成某项功能。
2.Struts2中拦截器的工作原理
拦截器与过滤器原理很相似。三阶段执行周期:1、做•些Action执行前的预处理;2、将控制
交给后续拦截器或返回结果字符串;3、做一些Action执行后的处理。多个拦截器可以组成拦截器栈
一起起作用。从结构上看,拦截器栈相当于多个拦截器的组合;在功能上看,拦截器栈也是拦截器
3.1自定义拦截器的方法
唠实现Interceptor接口
簿voidinit():初始化拦截器所需资源
送voiddestroyf):释放在init()中分配的资源
㊄Stringintercept(Actionlnvocationai)throwsException
■实现拦截器功能
■利用Actioninvocation参数获取Action状态
■返回结果码(result)字符串
尊继承Abstractlnterceptor类
,提供了init()和destroy。方法的空实现,只需要实现intercept方法即可
解推荐使用
心继承MethodFilterlnterceptor
④指定拦截的方法:indudeMethods
籍指定不拦截的方法:excludeMethods
3.2配置和引用拦截器
<interceptors>
配置拦截器一〉
<interceptorname="time"
class="erceptor.FirstInterceptor"/>
<!—配置拦截器栈一〉
<interceptor-stackname="myStack">
<interceptor-refname="time"/>
interceptor-refname="defaultStack"/>
</interceptor-stack>
</interceptors>
<!—配置默认拦截器
<default-interceptor-refname="myStack,r/>
<actionname="loginu
class="com.aptech,struts2.action.LoginAction">
<result>/success.jsp</result>
<resultname="error">/error.jsp</result>
<!—为Action指定拦截器—>
<interceptor-refname="myStack"/>
</action>
5拦截器和过滤器的异同
1、过滤器是web项目的普遍概念,而拦截器是struts2中的特有概念
2、过滤器可以过滤所有请求,拦截器只拦截action请求
3、自定义过滤器需要实现Filter接口,而自定义拦截器可以实现Interceptor接口
4、在web.xml中配置过滤器,在struts.xml中配置拦截器
5、拦截器可以访问ServletAPI、ActionContext>值栈,而过滤器只能访问ServletAPI
6、使用通配符来定义过滤器的过滤路径,过滤的是地址。通过为Action指定拦截器来调用拦截器,
拦截器可以细化到方法层次。
7、在Struts2项目中如果使用过滤器,一般应该将过滤器置于Struts2总控制器之前
8、执行顺序:过滤器一拦截器一Action--拦截器一过滤器(过滤器靠前)
9、拦截器是基于java的反射机制的,而过滤器是基于函数回调(待确认)
6Hibernate相比JDBC的优势所在
二者的联系:
JDBC是java应用程序连接数据库,进行数据存取的一种机制,是一组用java语言编写的类和接口的
API,它和数据库之间由各个厂商提供的数据库驱动进行关联。hibernate是一个开源的轻量级的ORM
框架,它在底层对jdbc进行了封装。Hibernate可以用在任何JDBC可以使用的场合
优点:
1、hibernate可以让开发人员以面相对象的思想来操作数据库。jdbc只能通过SQL语句将元数据传
送给数据库,进行数据操作。而hibernate可以在底层对元数据和对象进行转化,使得开发者只用面
向对象的方式来存取数据即可。
2、使用的语言不同:JDBC使用基于关系型数据库的标准SQL语言,Hibernate使用的是HQL语言
3,操作的对象不同:JDBC通过SQL语句直接传送到数据库中执行,Hibernate操作的是持久化对象,
由底层持久化对象的数据更新到数据库中。
4、hibernate开发的程序具有更好的移植性,hibernate使用xml或JPA的配置以及数据库方言等等
的机制,使得hibernate具有更好的移植性,对于不同的数据库,开发者只需要使用相同的数据操作
即可,无需关心数据库之间的差异。而直接使用JDBC就不得不考虑数据库差异的问题。
5、使用Hibernate极大的提高了开发者的开发效率。hibernate提供了大量的封装(这也是它最大的
缺点),很多数据操作以及关联关系等都被封装的很好,开发者不需写大量的sql语句,这就极大的
提高了开发者的开发效率。
6,Hibernate缓存机制对提升性能大有裨益。hibernate提供了缓存机制(session缓存,二级缓存,
查询缓存),对于那些改动不大且经常使用的数据,可以将它们放到缓存中,不必在每次使用时都去
查询数据库,缓存机制对提升性能大有裨益。
缺点:
1、从理论上来说,ORM永远也不可能比JDBC好,就像任何高级语言的运行性能永远也不会好过汇
编语言一个道理。但从这个角度讲,精心编写的JDBC无论如何都是最快的。
2、hibernate更消耗内存。因为它每次的数据库操作都要做数据和对象的转换/封装,查询出一条数
据就要创建一个或多个对象,这样也太消耗内存了。
3,对hibernate而言,它对JDBC封装过于厉害,所以就失去了对SQL的控制(当然hibernate也可
以使用nativesql既使用createSQLQuery等方法来调用与数据库相关的sql,但这样一来也就影响了
hibernate的可移植性),使得hibernate的在很多地方不够灵活,难于优化,尤其对于一些复杂的关
联查询时,hibernate提供的功能远不及直接使用JDBC方便性能更高。
7Hibenate的基本原理(ORM)
Application
PersistentObjects|
Hibernate
-7产XM.Mgpp.ns
Database
Hibenate的核心是ORM映射。hibernate通过对jdbc进行封装,对java类和关系数据库进行mapping,
实现了对关系数据库的面向对象方式的操作,改变了传统的jdbc+sql操作数据的方式,从而使开发
人员可以花更多精力进行对象方面的开发。
8cascade和inverse的区别
inverse和cascade两者之间没有任何关系。但是它们又都能影响对象关联关系的维护,所以将这两
个属性的作用区分开也不是很容易的。
inverse和cascade的区别主要表现在以下几个方面:
>作用的范围不同
inverse是设置在集合元素中的,而对于<many-to-one>和〈one-to-one〉则无此属性。而cascade则
对于所有涉及到关联的元素都是有效的,其中包括了集合元素以及<many-to-one:^n<one-to-one>
>执行的策略不同
inverse会首先判断集合的变化情况,然后针对变化执行相应的处理。而cascade则是直接对集合
的每个元素执行相应的处理。
>执行的时机不同
inverse是在执行SQL语句之前判断是否要执行该SQL语句,而cascade则是在主控方发生操作
时用来判断是否进行级联操作。
>执行的目标不同
inverseX^JF<one-to-many>#<many-to-many>^d:®^':/?-ffi|S|<>对于<one-to-many>,inverse所处理
的是对被关联表(的外键)进行修改操作。对于<many-to-many>,inverse所处理则是中间关联
表(增减记录)。而cascade则不会区分这两种关系的差别,所做的操作都是针对被关联表的。
9HQL和SQL的区别
1.操作对象不同:HQL操作的类及其属性,SQL操作的是数据库表及其字段
2.相比SQL语句,HQL有所简化
3.HQL结果直接返回List或其他对象,而不是像JDBC中使用SQL返回结果集,还要转化成对象。
4.不同数据库的SQL语句会有细微差别,HQL独立于数据库,根据方言设置转换为对应的SQL语句
10如何提高Hibernate的性能
1.配盘数据源
2.使用延迟加载
3.使用二级缓存、查询缓存
4.对HQL语句的优化:避免or、not、like^having>distinct等操作
5.映射文件配置参数:fetch-size,fetch,batch-size
6.操作方法使用:比如load和get,list和iterate等
11Hibernate中持久化类的三种状态及其特征
瞬时状态特征:不在Session缓存中,不与任何Session实例相关联;在数据库中没有与之对应数据。
持久化状态特征:在Session缓存中,与Session实例相关联;在数据库中有与之对应的数据。
脱管状态特征:不在Session缓存中,不与任何Session实例相关联;在数据库中有与之对应数据。
Hibernate会检测到处于持久状态的对象的任何改动,在当前操作单元执行完毕时将对象的状态同步
到数据库,开发者不需要手动执行update。语句。多次save。是多余的。
SpringloC的原理
Testjava
BeanFactoryfactory,new
ClassPathXmlAppiicationContext|"app1icationContext.xtt1"|;
CorkMorkiVorJc)fauctoryne二tBean(^woric*);
如酢天案化,
惨堀道文件胴
applicationContext
Personp=rtewMein();<heanid=,,man,Tclas3=*cbsY.apiing.dao.Xan"/>
WorkworJc=newDayTJor)c(p);
<bean1dss"gnaa"class=:n.bsY.spring.dao.YoXan"/>
<beanidB,*work"cla3s="cn.bsu.spring.tcgr.DayVork”>
(propertynaie・"person"ref»"«anV>
</bean>
<!—〈beanid,"gdt"c1assB"cn.bsv.spring.mjr.Hi^hWork":
Workwor)c=TYewNightWorlc(p);
〈propertytwuw'jierscn"re!*"v«wn"/:.</bean>—>
采用loC之前采用loC之后
采用loC之前,对象的创建以及对象关系的维护都要由程序员通过硬编码的形式来维护。
采用loC后,对象的创建以及对象关系的维护将由loC容器来实现,维护的依据是配置文件,程序员
直接从容器中取对象就可以了.
13SpringAOP的原理
采用AOP之前匕采用AOP之后
AOP,面向切面编程,是一种编程方法,它和面向对象编程采用的顺序(纵向)编程形成互补,可
以解决一些在OOP中无法或很难解决的问题,例如事务、日志、权限等横切性问题,使得OOP集
中精力于业务逻辑编程。
OOP实现横切性关注点导致代码混乱,开发者必须同时考虑业务逻辑、性能、日志、安全等问题。
代码分散,横切性代码散布在各个模块中。AOP将这些代码模块化,然后织入到需要的模块中。
过滤器,拦截器都可以理解为一种AOP技术。
14AOP的基本概念:切面、通知、切入点、连接点、织入
1.切面(Aspect):从对象中抽取出来的横切性功能模块。类似与OOP中的一个类。由通知和切
入点两部分组成。
2.通知(Adivice):切面的具体实现,例如具体的日志操作代码,一般是是切面中的某个方法。
3.连接点(Joinpoint):目标对象中插入通知的地方。即advice的应用位置。spring中只支持是方
法
4.切入点(Pointcut):切面的一部分,对应一个表达式,定义了advice应该被插入到什么样的
Joinpoint点上,即advice的应用范围
5.目标对象(TargetObject):被通知的对象。
6.代理(AOPProxy):由AOP框架创建的口标对象的代理对象°是被插入了advice的TargetObject。
7.织入(Weaving):将通知与目标对象结合在一起,生成新的对象的过程。新的对象就是AOP
ProxyoSpring是在运行是完成织入工作的。
15SSH整合的基本步骤
1、Spring向下整合Hibernate(DAO层)
1.1使用Spring的loC容器创建sessionFactory
1.2使用Spring的loC容器创建DAO
2、Spring中间管理业务层
2.1使用Spring的loC容器创建BizBean
2.2使用Spring的AOP配置业务层事务
3、Spring向上整合Struts2(控制层)
3.1配置监听器和上下文参数
3.2使用Spring的loC容器来管理Action
4、其他
4.1使用Spring提供的过滤器解决中文乱码问题
4.2使用Spring提供的OpenSessionlnViewFilter解决懒加载问题
4.3使用Spring的loC容器管理数据源
16并行操作下数据库事务出现的问题及含义:事务的隔离级别和四大属性
1、并行操作下数据库事务出现的问题:
>脏读(Dirtyread):脏读发生在一个事务读取了被另一个事务改写但还未提交的数据时.如果这些
改变在稍后被1日滚,那么第•个事务读取的数据就是无效的.
>不可重复读(Nonrepeatableread):不可重复读发生在一个事务执行相同的查询两次或两次以上,
但每一次查询结果都不相同.这通常是由于另一个并发事务在两次查询之间更新了数据.
>幻读(Phantomread):幻读和不可重复读相似.当一个事务(T1)读取几行纪录后,另一个并发事务
(T2)插入一些数据,幻读就发生了.在后来的查询中,第一个事务(T1)就会发现一些原来没有的额
外纪录.
2、事务的隔离级别
>READ_UNCOMMITTED允许你读取还未提交的改变了的数据.可能导致脏读,幻读或不可重复读.
>READ_COMMITTED允许在并发事务已经提交后读取,可防止脏读,但幻读和不可重复读仍可能
发生.
>REPEATABLE_READ对相同字段的多次读取结果是一致的,除非数据被事务本身改变.可防止脏
读和不可重复读,但幻读仍可能发生.
>SERIALIZABLE完全服从ACID的隔离级别,确保不发生脏读,不可重复读和幻读.这在所有隔离级
别中也是最慢的,因为它是通过完全锁定在事务中涉及的数据表来完成的.
3,事务的四大属性设置
>事务的传播特性PROPAGATION:
❖REQUIRED:如果存在一个事务,则支持当前事务。如果没有事务则开启。
❖SUPPORTS:如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。
>只读特性readonly="true"
❖只读事务。如果一个事务只对数据库执行读操作,设为只读事务可以提高效率
>隔离级别特性isolation="DEFAULT"
❖事务的隔离级别。并行情况下保证事务的完整性。
>超时特性timeout="-l"
❖事务的超时时间。超时则事务回滚。
17JSP的执行过程
在JSP运行过程中,首先由客户端发出请求,Web服务器接收到请求后,如果是第一次访问某个jsp
页面,Web服务器对它进行以下3个操作。
1.翻译:由Jsp变为.java,由JSP引擎实现。
2.编译:由.java变为.class,由Java编译器实现。
3.执行:由.class变为.html,用Java虚拟机执行编译文件,然后将执行结果返回给Web服务器,并
最终返回给客户端
如果不是第一次访问某个JSP页面,则只执行第三步。
所以第一次访问JSP较慢。
18JSP和Servlet的区别和联系
区别
1.JSP是在HTML代码里写JAVA代码,框架是HTML;而Servlet是在JAVA代码中写HTML代码,本
身是个JAVA类。
2.JSP使人们把显示和逻辑分隔成为可能,这意味着两者的开发可并行进行;而Servlet并没有把
两者分开。
3.Servlet独立地处理静态表示逻辑与动态业务逻辑.这样,任何文件的变动都需要对此服务程序重
新编译;JSP允许用特殊标签直接嵌入到HTML页面,HTML内容与JAVA内容也可放在单独文件
中,HTML内容的任何变动会自动编译装入到服务程序.
4.Servlet需要在web.xml中配置,而JSP无需配置。
5.目前JSP主要用在视图层,负责显示,而Servlet主要用在控制层,负责调度
联系:都是Sun公司推出的动态网页技术,先有Servlet,针对Servlet缺点推出JSP。JSP是Servlet
的,一种特殊形式,每个JSP页面就是一个Servlet实例JSP页面由系统翻译成Servlet,Servlet再负
责响应用户请求。
19JSP的9个内置对象及其含义,分别写出其常用方法三个
内部对象所属类型川途
烟U酶javax.servlet.httpServletRequest包含「请求方的信息
骨的n躁javax.servlet.httpServletResponse封装了对客户端的响应
outjavax.servlet.jsp.JspWriter响应信息流的标准输出
在同•请求中所产牛:的session
法蹴然檄门javax.servlet.Http.HttpSession
资料,”前只对Http协议有定义
applicationjavax.servlet.ServletContext提供安全信息
configjavax.servlet.ServletConfig提供配置信息
pageContextjavax.servlet.jsp.PageContext提供当前页面属性
pagejava.lang.Object|HJJjava的this
exceptionjava.Iang.Throwable异常处理
常用方法略
20page/request/session/application的范围区别
page:当前页面范围
request:当前页面范围+转发页面(forward)+包含页面(include)
session:当前会话:session在以下几种情况下失效
1.销毁session:Session.invalidate));
2.超过最大非活动间隔时间
3.手动关闭浏览器(session并没有立刻失效,因为服务器端session仍旧存在,超过最大非活动
间隔时间后真正失效)
application:当前应用;服务器重新启动前一直有效
21get和post的区别
1.Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都
是不可见的。
2.Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认
为不受限制。
3.Get限制Form表单的数据集的值必须为ASCII字符:而Post支持整个ISO10646字符集。
4.Get执行效率却比Post方法好。Get是form提交的默认方法。
22Servlet的生命周期
1.加载:在下列时刻加载Servlet:(1)如果已配置自动加载选项,则在启动服务谓时自动加载
(web.xml中设置<load-on-start>);(2)在服务器启动后,客户机首次向Servlet发出请求时;(3)
重新加载Servlet时(只执行一次)
2.实例化:加载Servlet后,服务器创建一个Servlet实例。(只执行一次)
3.初始化:调用Servlet的init()方法。在初始化阶段,Servlet初始化参数被传递给Servlet配
置对象ServletConfig。(只执行一次)
4.请求处理:对于到达服务器的客户机请求,服务器创建针对此次请求的一个“请求”对象和一
个“响应”对象。服务器调用Servlet的serviced方法,该方法用于传递“请求”和“响应”
对象。service!)方法从“请求”对象获得请求信息、处理该请求并用“响应”对象的方法以将
响应传回客户机。service。方法可以调用其它方法来处理请求,例如doGet()>doPost()或其
它的方法。(每次请求都执行该步骤)
5.销毁:当服务器不再需要Servlet,或重新装入Servlet的新实例时,服务器会调用Servlet的
destroy()方法。(只执行一次)
23session和cookie的区别
1、联系
http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动
维护客户的上下文信息,那么要怎么才能在多次请求之间共享信息呢(比如实现网上商店中的购物
车)?session和cookie就是为了解决HTTP协议的无状态而采用的两种解决方案。
2、原理(通过比喻形象说明,真正原理自己总结)
■Cookie:发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,
如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在
客户端保持状态。【卡上记录所有信息,而店家只认卡不认人。】
■Session:发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出
示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法
就是在服务器端保持状态。【只记用户ID,而ID的详细记录放在店家的数据库里;每次凭
ID检索服务器的记录。】
3、区别
■cookie数据存放在客户的浏览器上,session数据放在服务器上(sessionid可以通过cookie保
存在客户端,也可以使用URL重写方式)。
■cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应
当使用session
■session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到
减轻服务器性能方面,应当使用COOKIE
■单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
■个人建议:将登陆信息等重要信息存放为SESSION;其他信息如需保留,可放在COOKIE中
24转发和重定向的区别
♦转发的原理♦重定向的原理
■在服务器端跳转,将同一个request进行传递■客户端根据服务器端返回的地址发送新的请求
■只有一个请求■(服务器端控制的)客户端跳转
■浏览器不知道转发一Web组件】
转发是在服务端直接做的事情,是对客户端的同一个request进行传递,浏览器并不知道。重定向是
由浏览器来做的事情。重定向时,服务端返回一个response,里面包含了跳转的地址,由浏览器获
得后,自动发送一个新request。转发像呼叫转移或者110报警中心,重定向似114查号台。
♦区别1:跳转效率的不同
■转发效率相对高
■重定向效率相对低
♦区别2:实现语句不同
■转发request.getRequestDispatcher("xxxx")forward(request,response);
■重定向response.sendRedirectf'xxxx")
♦区别3:是否共有同一个request的数据
■转发源组件与目标组件共有同一个request数据
■重定向源组件与目标组件不共有同一个request数据(可使用session共有数据)
♦区别4:浏览器URL地址的不同
■转发后浏览器URL地址保持不变(源组件地址)
■重定向后浏览器URL地址改变为重定向后的地址(目标组件地址)
.区别5:"/"路径的含义不同
■转发时"/"代表当前项目的根路径
■重定向时代表当前服务器的根路径
♦区别6:跳转范围的不同
■只能转发到同一应用中的URL(默认)
■可以重定向任何服务器、任何应用的URL
♦区别7:刷新是否导致重复提交
■转发会导致重复提交(可以通过同步令牌解决)
■重定向不会导致重复提交
♦区别8:是否经过过滤器
■转发不经过过滤器(默认情况)
■重定向经过过滤器
25MVC模式及其优缺点
用户
视图层J
VJSP[2:E果:
控制层CServletu
;4—业务
模型层MJavaBean
5JES«S«tlEF;
数据库6:a陛IB展水帼触网
一、MVC原理
MVC是一种程序开发设计模式,它实现了显示模块与功能模块的分离。提高了程序的可维护性、可移
植性、可扩展性与可重用性,降低了程序的开发难度。它主要分模型、视图、控制器三层。
1、模型(model)它是应用程序的主体部分,主要包括业务逻辑模块和数据模块。模型与数据格式无
关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重
用,所以减少了代码的重复性
2、视图(view)用户与之交互的界面、在web中视图■—般由jsp,html组成
3、控制器(controller)接收来自界面的请求并交给模型进行处理在这个过程中控制器不做任何处理
只是起到了一个连接的作用
二、MVC的优点
1、降低代码耦合性。在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,
就只需要更改相应的层中的代码而不会影响到其他层中的代码。
2、有利于分工合作。在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。
网页设计人员可进行开发视图层中的JSP,而对业务熟悉的开发人员可开发业务层,而其他开发人员
可开发控制层。
3、有利于组件的重用。如控制层可独立成一个能用的组件,表示层也可做成通用的操作界面。可以
为一个模型在运行时同时建立和使用多个视图。
三、MVC的不足之处
1,增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分
离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
2、视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没
有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
3.视图对模型数据的低效率访问。依据模型操作接11的不同,视图可能需要多次调用才能获得足够
的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
4、口前,一般高级的界面工具或构造器不支持模式。改造这些工具以适应MVC需要和建立分离的
部件的代价是很高的,从而造成MVC使用的困难。
26B/S和C/S的含义及其区别
C/S结构,即Client/server(客户机/服务器)结构,通过将任务合理分配到Client端和Server端,降低
了系统的通讯开销,可充分利用两端硬件环境优势。早期软件系统多以此作为首选设计标准。
B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的•种
变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前
端实现,但是主要事务逻辑在服务器端实现,节约了开发成本,便于软件维护。
区别
1、C/S是建立在局域网的基础上的。B/S是建立在广域网的基础上的,但并不是说B/S结构不能在局
域网上使用。
2、B/S业务扩展简单方便,通过增加页面即可增加服务器功能。C/S的客户端还需要安装专用的客
户端软件,不利于扩展。
3、B/S维护简单方便。开发、维护等几乎所有工作也都集中在服务器端,当企业对网络应用进行升
级时,只需更新服务器端的软件就可以,这减轻了异地用户系统维护与升级的成本。.
4、B/S响应速度不及C/S;
5、B/S用户体验效果不是很理想
Java集合体系结构(List、Set、Collection-kMap的区别和联系)
-:|Produces:■Produces
IteratorJ■:Collection*Map
……芦』yr-z—L
r
iAbstractMap।
-;Produces,L_
ListIterator',/••••:List::Set
jSortedMap
IAbstractedlectiop-'1
一iSortedSet
五
TreeMap
iAbstractList।iAbstractset।
WeakHashMapHashtable
(Legacy)
HashSet
-U.__I___Utilities
VectorArrayListAbstractSequentialList।
(Legacy)
StackLinkedList
(Legacy)
ComparableIComparator:
Java容器的分类(简略)
;Collection:-;Map;
A
「一一」1
••।।
I__£_।__L-fII
e
:_JsJ_::__?L_:|HashMap|「reeMa,
(」H[11:K'LinkedllashMap
|ArrayList|LinkedList||H[ashSe1|rreeSet|
LinkedHashSet
Collection接口存储一组不唯一,无序的对象
List接口存储一组不唯一,有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年绿色电力产供销一体化的经济分析
- 2026年桥梁工程项目管理的最佳实践
- 2026春招:小学教师面试题及答案
- 2026年桥梁抗震设计中的柔性结构应用
- 贴砖安全质量培训课件
- 货运驾驶员安全培训考核课件
- 货车尾板安全培训课件
- 医疗物联网在临床应用中的实践
- 货梯安全使用培训内容课件
- 2026年汉中职业技术学院单招职业技能笔试模拟试题带答案解析
- 广东省深圳市南山区2023-2024学年四年级上学期数学期末教学质量监测试卷
- 【MOOC】生物化学与分子生物学-华中科技大学 中国大学慕课MOOC答案
- 地下室顶板堆载及回顶方案
- 广东省2024年修订医疗服务价格项目表
- 药品经营质量管理规范
- (人教2024版)数学四年级上册第8单元《数学广角-优化》大单元教学课件
- 临床生物化学检验练习题库(含答案)
- G -B- 15607-2023 涂装作业安全规程 粉末静电喷涂工艺安全(正式版)
- (正式版)SHT 3229-2024 石油化工钢制空冷式热交换器技术规范
- 2018年4月自考00265西方法律思想史试题及答案含解析
- 小红书创业计划书
评论
0/150
提交评论