关闭

关闭

关闭

封号提示

内容

首页 Java工程师面试题之三大框架

Java工程师面试题之三大框架.doc

Java工程师面试题之三大框架

跃海翔空 2012-07-05 评分 0 浏览量 0 0 0 0 暂无简介 简介 举报

简介:本文档为《Java工程师面试题之三大框架doc》,可适用于IT/计算机领域,主题内容包含Java工程师(程序员)面题Struts,Spring,Hibernate三大框架Hibernate工作原理及为什么要用?原理:读取并解析配置文件读符等。

Java工程师(程序员)面题Struts,Spring,Hibernate三大框架Hibernate工作原理及为什么要用?原理:读取并解析配置文件读取并解析映射信息创建SessionFactory打开Session创建事务Transation持久化操作提交事务关闭Session关闭SesstionFactory为什么要用:对JDBC访问数据库的代码做了封装大大简化了数据访问层繁琐的重复性代码。Hibernate是一个基于JDBC的主流持久化框架是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作hibernate使用Java反射机制而不是字节码增强程序来实现透明性。hibernate的性能非常好因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库从一对一到多对多的各种复杂关系。.Hibernate是如何延迟加载Hibernate延迟加载实现:a)实体对象b)集合(Collection)Hibernate提供了属性的延迟加载功能当Hibernate在查询数据的时候数据并没有存在与内存中当程序真正对数据的操作时对象才存在与内存中就实现了延迟加载他节省了服务器的内存开销从而提高了服务器的性能。.Hibernate中怎样实现类之间的关系(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作它们都是对对象进行操作我们程序中把所有的表与类都映射在一起它们通过配置文件中的manytoone、onetomany、manytomanyStruts流程:、客户端浏览器发出HTTP请求。、根据webxml配置该请求被ActionServlet接收。、根据strutsconfigxml配置ActionServlet先将请求中的参数填充到ActionForm中然后ActionServlet再将请求发送到Action进行处理。、是否验证需要验证则调用ActionForm的validate方法验证失败则跳转到input成功则继续。、Action从ActionForm获得数据调用javabean中的业务方法处理数据。、Action返回ActionForward对象跳转到相应JSP页面或Action。、返回HTTP响应到客户端浏览器。MVC设计模式:modal:“模型”也称业务逻辑是正真完成任务的代码,相当与JavaBeanview:视图其实就是显示界面相当于JSPcontroller:控制器他控制模型和视图的交互过程相当于servletstruts是基于MVC设计模式hibernate是基于ORM对象关系映射struts是什么?struts是基于JSP和servlet的一个开源的Web应用框架使用的是MVC的设计模式struts是基于webwork技术的框架是sun和webwork公司联手开发的一个功能非常齐全的框架struts和struts没有任何关系是一个全新的框架spring是什么?spring是一个集成了许多第三方框架的大杂烩其核心技术是IOC(控制反转也称依赖注入)和AOP(面向切面编程)hibernate是什么?hibernate是基于ORM对象关系映射(完成对象数据到关系数据映射的机制)实现的,做数据持久化的工具JSF是什么?JavaServerFace是基于组件的web开发框架跟sturts差不多的框架数据库里面的索引和约束是什么索引是为了提高数据的检索速度索引是建立在数据表上根据一个或多个字段建立的约束是为了保持数据的完整性约束有非空约束主键约束外键约束等等。spring是什么这个问题往往可以通过我们为什么要使用spring这个问题来切入:AOP让开发人员可以创建非行为性的关注点称为横切关注点并将它们插入到应用程序代码中。使用AOP后公共服务(比如日志、持久性、事务等)就可以分解成方面并应用到域对象上同时不会增加域对象的对象模型的复杂性。IOC允许创建一个可以构造对象的应用环境然后向这些对象传递它们的协作对象。正如单词倒置所表明的IOC就像反过来的JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straightconstruction)每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。Spring即使一个AOP框架也是一IOC容器。Spring最好的地方是它有助于您替换对象。有了Spring只要用JavaBean属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。用自己的话简要阐述struts的执行流程。Struts框架本身大致可以分为个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts框架的基础包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时还需要编写相关的配置文件供核心控制器FilterDispatcher来使用。Struts的工作流程相对于Struts要简单与WebWork框架基本相同所以说Struts是WebWork的升级版本。基本简要流程如下:、客户端浏览器发出HTTP请求。、根据webxml配置该请求被FilterDispatcher接收。、根据strutsxml配置找到需要调用的Action类和方法并通过IoC方式将值注入给Aciton。、Action调用业务逻辑组件处理业务逻辑这一步包含表单验证。、Action执行完毕根据strutsxml中的配置找到对应的返回结果result并跳转到相应页面。、返回HTTP响应到客户端浏览器。Action是不是线程安全的?如果不是有什么方式可以保证Action的线程安全?如果是说明原因不是声明局部变量或者扩展RequestProcessor让每次都创建一个Action或者在spring中用scope="prototype"来管理MVC分析一下struts是如何实现MVC的m:JavaBean或结合EJB组件或者pojo构成c:Action来实现v:一组JSP文件及其标签构成。struts中的几个关键对象的作用(说说几个关键对象的作用)Action:控制器类ActionForm:表单对象DynaValidatorForm:动态formActonMapping:配置文件中action节点的信息说说AOP和IOC的概念以及在spring中是如何应用的AOP:面向方面编程ioc:依赖注入声明式事务和编程式事务积极一些通用部分Hibernate有哪几种查询数据的方式hql查询sql查询条件查询load()和get()的区别hibernate对于load方法认为该数据在数据库中一定存在可以放心的使用代理来延迟加载load默认支持延迟加载在用到对象中的其他属性数据时才查询数据库但是万一数据库中不存在该记录只能抛异常ObjectNotFoundEcception所说的load方法抛异常是指在使用该对象的数据时数据库中不存在该数据时抛异常而不是在创建这个对象时。由于session中的缓存对于hibernate来说是个相当廉价的资源所以在load时会先查一下session缓存看看该id对应的对象是否存在不存在则创建代理(load时候之查询一级缓存不存在则创建代理)。get()现在一级缓存找没有就去二级缓存找没有就去数据库找没有就返回而对于get方法hibernate一定要获取到真实的数据否则返回。谈谈hibernate的延迟加载和openSessionInView延迟加载要在session范围内用到的时候再加载opensessioninview是在web层写了一个filter来打开和关闭session这样就表示在一次request过程中session一直开着保证了延迟加载在session中的这个前提。spring的事务有几种方式?谈谈spring事务的隔离级别和传播行为。声明事务和编程事务隔离级别:DEFAULT使用数据库默认的隔离级别READUNCOMMITTED会出现脏读不可重复读和幻影读问题READCOMMITTED会出现重复读和幻影读REPEATABLEREAD会出现幻影读SERIALIZABLE最安全但是代价最大性能影响极其严重和传播行:REQUIRED存在事务就融入该事务不存在就创建事务SUPPORTS存在事务就融入事务不存在则不创建事务MANDATORY存在事务则融入该事务不存在抛异常REQUIRESNEW总是创建新事务NOTSUPPORTED存在事务则挂起一直执行非事务操作NEVER总是执行非事务如果当前存在事务则抛异常NESTED嵌入式事务Hibernate中的update()和saveOrUpdate()的区别摘自hibernate说明文档:saveOrUpdate()做下面的事:如果对象已经在本session中持久化了不做任何事如果另一个与本session关联的对象拥有相同的持久化标识(identifier)抛出一个异常如果对象没有持久化标识(identifier)属性对其调用save()如果对象的持久标识(identifier)表明其是一个新实例化的对象对其调用save()如果对象是附带版本信息的(通过<version>或<timestamp>)并且版本属性的值表明其是一个新实例化的对象save()它。否则update()这个对象Spring对多种ORM框架提供了很好的支持简单描述在Spring中使用Hibernate的方法并结合事务管理。getHiberanteTemplate里面提供了saveupdatedeletefind等方法。简单说一个:如果配置了声明式事务当执行getHibernateTemplate的各种方法的时候事务会自动被加载如果没有配置事务那么以上操作不会真正的被同步到数据库除非配置了hibernate的autocommit=truespring的事务有几种方式?谈谈spring事务的隔离级别和传播行为。spring事务分两种形式声明式事务和编程式事务spring提供了一个事务的接口PaltformTractionManager接口针对不同的事务spring进行了不同的实现,对hibernate事务的实现HIbernateTractionManager,对JDBC的JdbcTractionManagerDataSourceTractionManager以及JdoTractionManager。接口platformTractionManager提供了三个方法获取事务提交和回滚的方法。******************************************************************************分享面试题二】Spring,hibernate,struts的面试笔试题(含答案)(声明:这里不是为其他商业利益是为学习讨论使用)【郑重声明】:单纯接分将被删帖希望大家有自己的感触Hibernate工作原理及为什么要用?原理:读取并解析配置文件读取并解析映射信息创建SessionFactory打开Sesssion创建事务Transation持久化操作提交事务关闭Session关闭SesstionFactory为什么要用:对JDBC访问数据库的代码做了封装大大简化了数据访问层繁琐的重复性代码。Hibernate是一个基于JDBC的主流持久化框架是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作hibernate使用Java反射机制而不是字节码增强程序来实现透明性。hibernate的性能非常好因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库从一对一到多对多的各种复杂关系。.Hibernate是如何延迟加载Hibernate延迟加载实现:a)实体对象b)集合(Collection)Hibernate提供了属性的延迟加载功能当Hibernate在查询数据的时候数据并没有存在与内存中当程序真正对数据的操作时对象才存在与内存中就实现了延迟加载他节省了服务器的内存开销从而提高了服务器的性能。.Hibernate中怎样实现类之间的关系(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作它们都市对对象进行操作我们程序中把所有的表与类都映射在一起它们通过配置文件中的manytoone、onetomany、manytomany、.说下Hibernate的缓存机制内部缓存存在Hibernate中又叫一级缓存属于应用事物级缓存二级缓存:a)应用及缓存b)分布式缓存条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据c)第三方缓存的实现.Hibernate的查询方式Sql、Criteria,objectcomptositionHql:、属性查询、参数查询、命名参数查询、关联查询、分页查询、统计函数.如何优化Hibernate?使用双向一对多关联不使用单向一对多灵活使用单向一对多关联不用一对一用多对一取代配置对象缓存不使用集合缓存一对多集合使用Bag,多对多集合使用Set继承类使用显式多态表字段要少表关联不要怕多有二级缓存撑腰.Struts工作机制?为什么要使用Struts?工作机制:Struts的工作流程:在web应用启动时就会加载初始化ActionServlet,ActionServlet从strutsconfigxml文件中读取配置信息,把它们存放到各种配置对象当ActionServlet接收到一个客户请求时,将执行如下流程()检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息()如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中()根据配置信息决定是否需要表单验证如果需要验证,就调用ActionForm的validate()方法()如果ActionForm的validate()方法返回或返回一个不包含ActionMessage的ActuibErrors对象,就表示表单验证成功()ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法()Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给ActionForward对象指向的JSP组件()ActionForward对象指向JSP组件生成动态网页,返回给客户为什么要用:JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱所以在此之上我们需要一个规则、一个把这些技术组织起来的规则这就是框架Struts便应运而生。基于Struts开发的应用由类组件构成:控制器组件、模型组件、视图组件.Struts的validate框架是如何验证的?在struts配置文件中配置具体的错误提示再在FormBean中的validate()方法具体调用。.说下Struts的设计模式MVC模式:web应用程序启动时就会加载并初始化ActionServler。用户提交表单时一个配置好的ActionForm对象被创建并被填入表单相应的数据ActionServler根据Strutsconfigxml文件配置好的设置决定是否需要表单验证如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action如果Action不存在ActionServlet会先创建这个对象然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据完成业务逻辑返回一个ActionForward对象ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件ActionForward对象指定的jsp生成动态的网页返回给客户。.spring工作机制及为什么要用springmvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的ControllerDispatcherServlet请请求提交到目标ControllerController进行业务逻辑处理后会返回一个ModelAndViewDispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象视图对象负责渲染返回给客户端。为什么用:{AOP让开发人员可以创建非行为性的关注点称为横切关注点并将它们插入到应用程序代码中。使用AOP后公共服务(比如日志、持久性、事务等)就可以分解成方面并应用到域对象上同时不会增加域对象的对象模型的复杂性。IOC允许创建一个可以构造对象的应用环境然后向这些对象传递它们的协作对象。正如单词倒置所表明的IOC就像反过来的JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straightconstruction)每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。Spring即使一个AOP框架也是一IOC容器。Spring最好的地方是它有助于您替换对象。有了Spring只要用JavaBean属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。}Struts,Spring,Hibernate优缺点Struts跟Tomcat、Turbine等诸多Apache项目一样是开源软件这是它的一大优点。使开发者能更深入的了解其内部实现机制。Struts开放源码框架的创建是为了使开发者在构建基于JavaServlet和JavaServerPages(JSP)技术的Web应用时更加容易。Struts框架为开放者提供了一个统一的标准框架通过使用Struts作为基础开发者能够更专注于应用程序的商业逻辑。Struts框架本身是使用JavaServlet和JavaServerPages技术的一种ModelViewController(MVC)实现具体来讲,Struts的优点有:实现MVC模式结构清晰,使开发者只关注业务逻辑的实现有丰富的tag可以用,Struts的标记库(Taglib)如能灵活动用则能大大提高开发效率。另外就目前国内的JSP开发者而言除了使用JSP自带的常用标记外很少开发自己的标记或许Struts是一个很好的起点。页面导航页面导航将是今后的一个发展方向事实上这样做使系统的脉络更加清晰。通过一个配置文件即可把握整个系统各部分之间的联系这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时这种优势体现得更加明显。提供Exception处理机制数据库链接池管理支持IN缺点:一、转到展示层时需要配置forward每一次转到展示层相信大多数都是直接转到jsp而涉及到转向需要配置forward如果有十个展示层的jsp需要配置十次struts而且还不包括有时候目录、文件变更需要重新修改forward注意每次修改配置之后要求重新部署整个项目而tomcate这样的服务器还必须重新启动服务器如果业务变更复杂频繁的系统这样的操作简单不可想象。现在就是这样几十上百个人同时在线使用我们的系统大家可以想象一下我的烦恼有多大。二、Struts的Action必需是thread-safe方式它仅仅允许一个实例去处理所有的请求。所以action用到的所有的资源都必需统一同步这个就引起了线程安全的问题。三、测试不方便Struts的每个Action都同Web层耦合在一起这样它的测试依赖于Web容器单元测试也很难实现。不过有一个Junit的扩展工具StrutsTestCase可以实现它的单元测试。四、类型的转换Struts的FormBean把所有的数据都作为String类型它可以使用工具CommonsBeanutils进行类型转化。但它的转化都是在Class级别而且转化的类型是不可配置的。类型转化时的错误信息返回给用户也是非常困难的。五、对Servlet的依赖性过强Struts处理Action时必需要依赖ServletRequest和ServletResponse所有它摆脱不了Servlet容器。六、前端表达式语言方面Struts集成了JSTL所以它主要使用JSTL的表达式语言来获取数据。可是JSTL的表达式语言在Collection和索引属性方面处理显得很弱。七、对Action执行的控制困难Struts创建一个Action如果想控制它的执行顺序将会非常困难。甚至你要重新去写Servlet来实现你的这个功能需求。八、对Action执行前和后的处理Struts处理Action的时候是基于class的hierarchies很难在action处理前和后进行操作。九、对事件支持不够在struts中实际是一个表单Form对应一个Action类(或DispatchAction)换一句话说:在Struts中实际是一个表单只能对应一个事件struts这种事件方式称为applicationeventapplicationevent和componentevent相比是一种粗粒度的事件。Struts重要的表单对象ActionForm是一种对象它代表了一种应用这个对象中至少包含几个字段这些字段是Jsp页面表单中的input字段因为一个表单对应一个事件所以当我们需要将事件粒度细化到表单中这些字段时也就是说一个字段对应一个事件时单纯使用Struts就不太可能当然通过结合JavaScript也是可以转弯实现的。.HibernateHibernate是一个开放源代码的对象关系映射框架它对JDBC进行了非常轻量级的对象封装使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合既可以在Java的客户端程序实用也可以在ServletJSP的Web应用中使用最具革命意义的是Hibernate可以在应用EJB的JEE架构中取代CMP完成数据持久化的重任。大多数开发机构经常采取创建各自独立的数据持久层。一旦底层的数据结构发生改变那么修改应用的其余部分使之适应这种改变的代价将是十分巨大的。Hibernate适时的填补了这一空白它为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架功能却非常丰富。优点:aHibernate使用Java反射机制而不是字节码增强程序来实现透明性。bHibernate的性能非常好因为它是个轻量级框架。映射的灵活性很出色。c它支持各种关系数据库从一对一到多对多的各种复杂关系。缺点:它限制您所使用的对象模型。(例如一个持久性类不能映射到多个表)其独有的界面和可怜的市场份额也让人不安尽管如此Hibernate还是以其强大的发展动力减轻了这些风险。其他的开源持久性框架也有一些不过都没有Hibernate这样有市场冲击力。上面回贴情绪有点激动希望谅解我不是因为有人批评Hibernate而感到不快而是因为帖子里面的观点实在让我觉得荒谬。不管觉得Hibernate好也吧不好也吧我唯一觉得遗憾的是在中文论坛里面找不到一个对Hibernate的真正高水平的评价。在TSS上有一个关于Hibernate的hotthread跟了几百贴其中包括Hibernate作者Gavin和LiDOJDO的CTO对于JDO和Hibernate有过一些激烈的争论我曾经耐心的看了一遍仍然没有发现针对Hibernate真正有力的攻击那些所谓的攻击无非针对Hibernate没有一个GUI的配置工具没有商业公司支持没有标准化等等这些站不住脚的理由。补充几点我的意见:一、Hibernate是JDBC的轻量级的对象封装它是一个独立的对象持久层框架和AppServer和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合例如Java应用程序的数据库访问代码DAO接口的实现类甚至可以是BMP里面的访问数据库的代码。从这个意义上来说Hibernate和EB不是一个范畴的东西也不存在非此即彼的关系。二、Hibernate是一个和JDBC密切关联的框架所以Hibernate的兼容性和JDBC驱动和数据库都有一定的关系但是和使用它的Java程序和AppServer没有任何关系也不存在兼容性问题。三、Hibernate不能用来直接和EntityBean做对比只有放在整个JEE项目的框架中才能比较。并且即使是放在软件整体框架中来看Hibernate也是做为JDBC的替代者出现的而不是EntityBean的替代者出现的让我再列一次我已经列n次的框架结构:传统的架构:)SessionBean<>EntityBean<>DB为了解决性能障碍的替代架构:)SessionBean<>DAO<>JDBC<>DB使用Hibernate来提高上面架构的开发效率的架构:)SessionBean<>DAO<>Hibernate<>DB就上面个架构来分析:、内存消耗:采用JDBC的架构无疑是最省内存的Hibernate的架构次之EB的架构最差。、运行效率:如果JDBC的代码写的非常优化那么JDBC架构运行效率最高但是实际项目中这一点几乎做不到这需要程序员非常精通JDBC运用Batch语句调整PreapredStatement的BatchSize和FetchSize等参数以及在必要的情况下采用结果集cache等等。而一般情况下程序员是做不到这一点的。因此Hibernate架构表现出最快的运行效率。EB的架构效率会差的很远。、开发效率:在有JBuilder的支持下以及简单的项目EB架构开发效率最高JDBC次之Hibernate最差。但是在大的项目特别是持久层关系映射很复杂的情况下Hibernate效率高的惊人JDBC次之而EB架构很可能会失败。、分布式安全检查集群负载均衡的支持由于有SB做为Facade个架构没有区别。四、EB和Hibernate学习难度在哪里?EB的难度在哪里?不在复杂的XML配置文件上而在于EB运用稍微不慎就有严重的性能障碍。所以难在你需要学习很多EJB设计模式来避开性能问题需要学习AppServer和EB的配置来优化EB的运行效率。做EB的开发工作程序员的大部分精力都被放到了EB的性能问题上了反而没有更多的精力关注本身就主要投入精力去考虑的对象持久层的设计上来。Hibernate难在哪里?不在Hibernate本身的复杂实际上Hibernate非常的简单难在Hibernate太灵活了。当你用EB来实现持久层的时候你会发现EB实在是太笨拙了笨拙到你根本没有什么可以选择的余地所以你根本就不用花费精力去设计方案去平衡方案的好坏去费脑筋考虑选择哪个方案因为只有唯一的方案摆在你面前你只能这么做没得选择。Hibernate相反它太灵活了相同的问题你至少可以设计出十几种方案来解决所以特别的犯难究竟用这个还是用那个呢?这些方案之间到底有什么区别呢?他们的运行原理有什么不同?运行效率哪个比较好?光是主键生成就有七八种方案供你选择你为难不为难?集合属性可以用Set可以用List还可以用Bag到底哪个效率高你为难不为难?查询可以用iterator可以用list哪个好有什么区别?你为难不为难?复合主键你可以直接在hbm里面配置也可以自定义CustomerType哪种比较好些?你为难不为难?对于一个表你可以选择单一映射一个对象也可以映射成父子对象还可以映射成两个:的对象在什么情况下用哪种方案比较好你为难不为难?这个列表可以一直开列下去直到你不想再看下去为止。当你面前摆着无数的眼花缭乱的方案的时候你会觉得幸福呢?还是悲哀呢?如果你是一个负责的程序员那么你一定会仔细研究每种方案的区别每种方案的效率每种方案的适用场合你会觉得你已经陷入进去拔不出来了。如果是用EB你第一秒种就已经做出了决定根本没得选择比如说集合属性你只能用Collection如果是Hibernate你会在BagList和Set之间来回犹豫不决甚至搞不清楚的话程序都没有办法写。.Spring它是一个开源的项目而且目前非常活跃它基于IoC(InversionofControl反向控制)和AOP的构架多层jee系统的框架但它不强迫你必须在每一层中必须使用Spring因为它模块化的很好允许你根据自己的需要选择使用它的某一个模块它实现了很优雅的MVC对不同的数据访问技术提供了统一的接口采用IoC使得可以很容易的实现bean的装配提供了简洁的AOP并据此实现TranscationManagment等等优点:aSpring能有效地组织你的中间层对象不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为JEE的API特制的frameworkSpring致力于解决剩下的问题。bSpring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验这是一个很大的问题它降低了系统的可测试性和面向对象的程度。c通过一种在不同应用程序和项目间一致的方法来处理配置文件Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的属性项或系统属性感到不解为此不得不去读Javadoc甚至源编码?有了Spring你仅仅需要看看类的JavaBean属性。InversionofControl的使用(在下面讨论)帮助完成了这种简化。d通过把对接口编程而不是对类编程的代价几乎减少到没有Spring能够促进养成好的编程习惯。eSpring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。f使用Spring构建的应用程序易于单元测试。gSpring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或localEJBs来实现业务接口却不会影响调用代码。hSpring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物它们适用于许多web应用。例如Spring能使用AOP提供声明性事务管理而不通过EJB容器如果你仅仅需要与单个数据库打交道甚至不需要一个JTA实现。iSpring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是ORmapping产品(如Hibernate)。Spring确实使你能通过最简单可行的解决办法来解决你的问题。而这是有有很大价值的。缺点:使用人数不多、jsp中要写很多代码、控制器过于灵活缺少一个公用控制器。Javaweb部分、Tomcat的优化经验答:去掉对webxml的监视把jsp提前编辑成Servlet。有富余物理内存的情况加大tomcat使用的jvm的内存、HTTP请求的GET与POST方式的区别()get是从服务器上获取数据post是向服务器传送数据。在客户端Get方式在通过URL提交数据数据在URL中可以看到POST方式数据放置在HTMLHEADER内提交。()对于get方式服务器端用RequestQueryString获取变量的值对于post方式服务器端用RequestForm获取提交的数据。()GET方式提交的数据最多只能有字节而POST则没有此限制。()安全性问题。正如在()中提到使用Get的时候参数会显示在地址栏上而Post不会。所以如果这些数据是中文数据而且是非敏感数据那么使用get如果用户输入的数据不是中文字符而且包含敏感数据那么还是使用post为好。、解释一下什么是servlet答:servlet有良好的生存期的定义包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javaxservletServlet接口的init,service和destroy方法表达。、说一说Servlet的生命周期答:servlet有良好的生存期的定义包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javaxservletServlet接口的init,service和destroy方法表达。Servlet被服务器实例化后容器运行其init方法请求到达时运行其service方法service方法自动派遣运行与请求对应的doXXX方法(doGetdoPost)等当服务器决定将实例销毁的时候调用其destroy方法。web容器加载servlet生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现根据请求的不同调用不同的do***()方法。结束服务web容器调用servlet的destroy()方法。、Servlet的基本架构publicclassServletNameextendsHttpServlet{publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{}publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{}}、SERVLETAPI中forward()与redirect()的区别?答:前者仅是容器中控制权的转向在客户端浏览器地址栏中不会显示出转向后的地址后者则是完全的跳转浏览器将会得到跳转的地址并重新发送请求链接。这样从浏览器的地址栏中可以看到跳转后的链接地址。所以前者更加高效在前者可以满足需要时尽量使用forward()方法并且这样也有助于隐藏实际的链接。在有些情况下比如需要跳转到一个其它服务器上的资源则必须使用sendRedirect()方法。、什么情况下调用doGet()和doPost()?Jsp页面中的FORM标签里的method属性为get时调用doGet()为post时调用doPost()。、Request对象的主要方法:setAttribute(Stringname,Object):设置名字为name的request的参数值getAttribute(Stringname):返回由name指定的属性值getAttributeNames():返回request对象所有属性的名字集合结果是一个枚举的实例getCookies():返回客户端的所有Cookie对象结果是一个Cookie数组getCharacterEncoding():返回请求中的字符编码方式getContentLength():返回请求的Body的长度getHeader(Stringname):获得HTTP协议定义的文件头信息getHeaders(Stringname):返回指定名字的requestHeader的所有值结果是一个枚举的实例getHeaderNames():返回所以requestHeader的名字结果是一个枚举的实例getInputStream():返回请求的输入流用于获得请求中的数据getMethod():获得客户端向服务器端传送数据的方法getParameter(Stringname):获得客户端传送给服务器端的有name指定的参数值getParameterNames():获得客户端传送给服务器端的所有参数的名字结果是一个枚举的实例getParametervalues(Stringname):获得有name指定的参数的所有值getProtocol():获取客户端向服务器端传送数据所依据的协议名称getQueryString():获得查询字符串getRequestURI():获取发出请求字符串的客户端地址getRemoteAddr():获取客户端的IP地址getRemoteHost():获取客户端的名字getSession(Booleancreate):返回和请求相关SessiongetServerName():获取服务器的名字getServletPath():获取客户端所请求的脚本文件的路径getServerPort():获取服务器的端口号removeAttribute(Stringname):删除请求中的一个属性、forward和redirect的区别forward是服务器请求资源服务器直接访问目标地址的URL把那个URL的响应内容读取过来然后把这些内容再发给浏览器浏览器根本不知道服务器发送的内容是从哪儿来的所以它的地址栏中还是原来的地址。redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址一般来说浏览器会用刚才请求的所有参数重新请求所以session,request参数都可以获取。、requestgetAttribute()和requestgetParameter()有何区别getAttribute是取得jsp中用setAttribute設定的attributeparameter得到的是stringattribute得到的是objectrequestgetParameter()方法传递的数据会从Web客户端传到Web服务器端代表HTTP请求数据requestsetAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部在具有转发关系的Web组件之间共享。即requestgetAttribute()方法返回request范围内存在的对象而requestgetParameter()方法是获取http提交过来的数据。jsp有哪些内置对象作用分别是什么分别有什么方法?答:JSP共有以下个内置的对象:request用户端请求此请求会包含来自GETPOST请求的参数response网页传回用户端的回应pageContext网页的属性是在这里管理session与请求有关的会话期applicationservlet正在执行的内容out用来传送回应的输出configservlet的构架部件pageJSP网页本身exception针对错误网页未捕捉的例外request表示HttpServletRequest对象。它包含了有关浏览器请求的信息并且提供了几个用于获取cookie,header,和session数据的有用的方法。response表示HttpServletResponse对象并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)out对象是javaxjspJspWriter的一个实例并提供了几个方法使你能用于向浏览器回送输出结果。pageContext表示一个javaxservletjspPageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API并且包装了通用的servlet相关功能的方法。session表示一个请求的javaxservlethttpHttpSession对象。Session可以存贮用户的状态信息applicaton表示一个javaxservleServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息config表示一个javaxservletServletConfig对象。该对象用于存取servlet实例的初始化参数。page表示从该页面产生的一个servlet实例jsp有哪些动作作用分别是什么(这个问题似乎不重要不明白为何有此题)答:JSP共有以下种基本动作jsp:include:在页面被请求的时候引入一个文件。jsp:useBean:寻找或者实例化一个JavaBean。jsp:setProperty:设置JavaBean的属性。jsp:getProperty:输出某个JavaBean的属性。jsp:forward:把请求转到一个新的页面。jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记、JSP的常用指令isErrorPage(是否能使用Exception对象)isELIgnored(是否忽略表达式)JSP中动态INCLUDE与静态INCLUDE的区别?答:动态INCLUDE用jsp:include动作实现<jsp:includepage=includedjspflush=true>它总是会检查所含文件中的变化适合用于包含动态页面并且可以带参数静态INCLUDE用include伪码实现,定不会检查所含文件的变化适用于包含静态页面<includefile=includedhtm>、两种跳转方式分别是什么有什么区别(下面的回答严重错误应该是想问forward和sendRedirect的区别毕竟出题的人不是专业搞文字艺术的人可能表达能力并不见得很强用词不一定精准加之其自身的技术面也可能存在一些问题不一定真正将他的意思表达清楚了严格意思上来讲一些题目可能根本就无人能答所以答题时要掌握主动只要把自己知道的表达清楚就够了而不要去推敲原始题目的具体含义是什么不要一味想着是在答题)答:有两种分别为:<jsp:includepage=includedjspflush=true><jsp:forwardpage=nextpagejsp>前者页面不会转向include所指的页面只是显示该页的结果主页面还是原来的页面。执行完后还会回来相当于函数调用。并且可以带参数后者完全转向新页面不会再回来。相当于goto语句。、页面间对象传递的方法requestsessionapplicationcookie等、JSP和Servlet有哪些相同点和不同点他们之间的联系是什么?JSP是Servlet技术的扩展本质上是Servlet的简易方式更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于Servlet的应用逻辑是在Java文件中并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为jsp的文件。JSP侧重于视图Servlet主要用于控制逻辑。、MVC的各个部分都有那些技术来实现如何实现答:MVC是Model-View-Controller的简写。Model代表的是应用的业务逻辑(通过JavaBeanEJB组件实现)View是应用的表示面(由JSP页面产生)Controller是提供应用的处理过程控制(一般是一个Servlet)通过这种设计模型把应用逻辑处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。、我们在web应用开发过程中经常遇到输出某种编码的字符如iso

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +1积分

资料评分:

/55
1下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部

举报
资料