struts2面试题(个人四处搜集,吐血推荐)
- 格式:pdf
- 大小:196.64 KB
- 文档页数:11
1、jsp和servlet的区别、共同点、各自应用的范围??JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。
JSP编译后是“类servlet”。
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。
而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑。
在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.2、cookie和session的作用、区别、应用范围,session的工作原理Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。
Session:保存在服务端,每一个session在服务端有一个sessionID作一个标识。
存储的数据量大,安全性高。
占用服务端的内存资源。
3、jstl是什么?优点有哪些??JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,由四个定制标记库(core、format、xml和sql)和一对通用标记库验证器(ScriptFreeTLV和PermittedTaglibsTLV)组成。
优点有:最大程序地提高了WEB应用在各应用服务器在应用程序服务器之间提供了一致的接口,最大程序地提高了1、在应用程序服务器之间提供了一致的接口,之间的移植。
2、简化了JSP和WEB应用程序的开发。
3、以一种统一的方式减少了JSP中的scriptlet代码数量,可以达到没有任何scriptlet 代码的程序。
在我们公司的项目中是不允许有任何的scriptlet代码出现在JSP中。
4、允许JSP设计工具与WEB应用程序开发的进一步集成。
相信不久就会有支持JSTL的IDE 开发工具出现。
4、j2ee的优越性主要表现在哪些方面?MVC模式a、J2EE基于JAVA技术,与平台无关b、J2EE拥有开放标准,许多大型公司实现了对该规范支持的应用服务器。
1.以下属于struts2的控制器组件是()。
A.ActionB.ActionFormC.ActionServletD.dispatchAction2.以下属于struts2的体系结构的是()。
A.struts2控制器组件B.struts2配置文件C.FilterDispathcerD.Action3.以下属于struts2配置文件中的配置元素是()。
A.<package>B.<action>C.<form-beans>D.<action-mappings>4.关于struts1和struts2对比的说法正确的是()。
A.Struts1要求Action类继承Struts1框架中的Action父类,Struts2中则不一定需要继承,可以是POJO类B.struts1中的Action不是线程安全的,而struts2中的Action是线程安全的C.struts1和struts2中都使用ActionForm对象封装用户的请求数据D.struts1使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值5.以下关于ValueStack说法正确的是()。
A.每个Action对象实例拥有一个ValueStack对象B.每个Action对象实例拥有多个ValueStack对象C.Action中封装了需要传入下一个页面的值,这些值封装在ValueStack对象中D.ValueStack会在请求开始时被创建,请求结束时消亡6.关于struts2配置文件说法正确的是()。
A.必须在WEB-INF/classes目录下B.名字必须为struts.xmlC.配置Action时,必须配置包信息D.使用<forward>元素配置转发7.在struts2配置中用()元素来配置常量。
B.<constants>C.<constant>D.<constant-mapping>8.关于struts2包的说法正确的是()。
Struts2习题Struts2习题11.struts中的package的作用是什么?namespace可以为空吗?如果namespace为空会意味着什么呢?标识、可以、如果没写,说明该包为默认空间2.Action 的实现通集成常用那种方法?一种是直接实现自己的Action另一种是实现Action的接口继承ActionSupport3.不属于Struts2的动作类的常量返回值的是(C)A.successB.inputC.neverD.login4.以下不属于Struts2动作执行的结果类型是(A)a.actionb.redirectc.redirectActiond.dispatcher5.在struts.xml中。
假如在一个package中没有配置namespace,那么在其中配置一个Action名字叫做login,它的result是这样配置的/login.jsp,已知在此配置文件中还有另一个name为user的package其中也有一个Action名字为login,它的result是这样配置的/loginUser.jsp那么在以下什么情况下将能访问到login.jsp AA.在根路径后输入/loginB.在根路径后输入/user/loginC.在根路径后输入/login/userD.在根路径后输入/abc/login6.正规开发中,在使用struts2时定义Action使用哪种方式。
BA.直接定义Action类。
B.从ActionSupport继承。
C.从Action继承。
D.实现Action接口。
7.不同的线程在调用Action时创建几个Action实例。
CA.1个B.2个C.每个线程创建1个。
D.可以自定义配置。
8.struts提供了Action接口定义了5个标准字符串常量,不包括的有(C )A SUCCESSB NONEC REGD LOGIN9.列举出action执行结果类型,并说明用途。
目录1 Struts框架 (2)2 Spring框架 (8)3 AJAX技术 (14)4 Hibernate框架 (17)5 框架综合运用 (24)6 J2EE初级题目 (27)7 J2SE初级题目 (34)1Struts框架1.Struts框架的整体运行流程在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象,例如:Action的映射信息存放在ActionMapping对象中.当ActionServlet接收到一个客户请求时,将执行如下流程.A.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;B.如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;C.根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm 的validate()方法;D.如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象,就表示表单验证成功;E. ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;F. Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件;G. ActionForward对象指向JSP组件生成动态网页,返回给客户2.ActionServlet在Struts框架中的总体作用功能是什么A.在web应用启动时ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象,例如:Action的映射信息存放在ActionMapping对象中。
Struts2 面试题分析1. 简述 Struts2 的工作流程:①. 请求发送给 StrutsPrepareAndExecuteFilter②. StrutsPrepareAndExecuteFilter 判定该请求是否是一个 Struts2 请求③. 若该请求是一个 Struts2 请求,则 StrutsPrepareAndExecuteFilter 把请求的处理交给 ActionProxy④. ActionProxy 创建一个 ActionInvocation 的实例,并进行初始化⑤. ActionInvocation 实例在调用 Action 的过程前后,涉及到相关拦截器(Intercepter)的调用。
⑥. Action 执行完毕,ActionInvocation 负责根据 struts.xml 中的配置找到对应的返回结果。
调用结果的 execute 方法,渲染结果。
⑦. 执行各个拦截器 invocation.invoke() 之后的代码⑧. 把结果发送到客户端2. Struts2 拦截器 和 过滤器 的区别:①、过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器。
②、Struts2 拦截器只能对 Action 请求起作用,而过滤器则可以对几乎所有请求起作用。
③、拦截器可以访问 Action 上下文(ActionContext)、值栈里的对象(ValueStack),而过滤器不能.④、在 Action 的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
3. 为什么要使用 Struts2 & Struts2 的优点:①. 基于 MVC 架构,框架结构清晰。
②. 使用 OGNL: OGNL 可以快捷的访问值栈中的数据、调用值栈中对象的方法③. 拦截器: Struts2 的拦截器是一个 Action 级别的 AOP, Struts2 中的许多特性都是通过拦截器来实现的, 例如异常处理,文件上传,验证等。
1、请讲一下struts的流程答:用户提交表单Struts根据表单的请求路径,在web.xml中指定servlet,并根据<init-param>元素读取servlet的配置信息ActionServlet或者扩展的ActionServlet接收请求,并根据请求的路径来判断调用哪一个action,即action元素中的path路径,再根据action元素中的type属性,用来指定处理请求的逻辑action(属于控制器部分),再根据其name属性来绑定form-bean,即创建一个HelloForm对象,并把用户提交的表单数据传给ActionForm对象,这个对象保存在scope设置的范围内。
如果action的validate属性设置为true,则ActonServlet就调用HelloForm 对象的validate()方法,对表单进行验证。
ActionServlet查找action是否存在,如果不存在就创建一个实例,然后调用HelloAction的execute()方法。
通过execute()方法中的逻辑验证后,执行相关的业务逻辑,最后调用ActionMapping.findForward(“SayHello”)方法。
其中的参数SayHello与struts-config.xml文件中的action元素的forword属性值对应,则就将请求转发到“hello.jsp”页面,结束。
2、一条SQL语句的执行顺序是怎么样的?答:1、from子句组装来自不同数据源的数据;2、where子句基于指定的条件对记录行进行筛选;3、group by子句将数据划分为多个分组;4、使用聚集函数进行计算;5、使用having子句筛选分组;6、计算所有的表达式;7、使用order by对结果集进行排序。
3、CMM是什么?CMM是指“能力成熟度模型”,其英文全称为Capability Maturity Model for Software,英文缩写为SW-CMM,简称CMM。
软件工程师面试题(含答案)一、MVC设计模式及其优缺点,结合Struts框架讨论其在Web应用中的使用MVC是一种应用观察者模式的框架模式,包括三个主要组成部分:模型、视图和控制器。
模型是业务处理层,独立于表现层;视图通过客户端数据类型显示数据,并回显模型层的执行结果;控制器是视图层和模型层之间的桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图。
MVC的优点是分离了应用程序的关注点,使得应用程序更易于维护和扩展。
缺点是增加了开发复杂度,需要更多的代码和设计时间。
在Web应用中,常用的MVC实现模式是Servlet-centric,即使用JSP、Servlet和JavaBean实现。
其中,JSP负责显示和收集数据,Servlet连接视图和模型,将视图层数据发送给模型层,JavaBean分为业务类和数据实体,业务类处理业务数据,数据实体承载数据。
Struts是一个Web应用程序框架,使用MVC实现模式二,即以控制器为核心。
它提供了一些组件,包括:Model:Struts没有提供model类,开发者需要自行提供商业逻辑的JavaBean或EJB形式。
View:n form创建form bean,用于在控制器和视图之间传输数据。
此外,Struts还提供了自定义JSP标签库,辅助开发者用JSP创建交互式的以表单为基础的应用程序。
应用程序资源文件保留了一些文本常量和错误消息,可转变为其它语言,可用于JSP中。
nServlet,n。
n需要符合Struts规范,并在struts-config.xml中进行配置,n form,n控制器。
n控制器提供了model的逻辑接口。
WebService是基于SOA架构的,不依赖于语言和平台,可实现不同语言间的相互调用,进行基于Http协议的网络应用交互。
WebService遵守WSDL/SOAP规范,实现不同语言间的调用。
Web Service = WSDL + SOAP + UDDI(webservice的注册)。
struts2常见面试题Introduction:Struts2是一种用于开发Java Web应用程序的开源Web应用框架。
在软件工程领域,Struts2常常是面试中的热门话题。
本文将介绍一些常见的Struts2面试题,并提供详细解答和示例。
Question 1: 什么是Struts2框架?它的主要特点是什么?Struts2是一个基于MVC设计模式的Web应用框架。
它通过集成多个核心组件(如拦截器、过滤器、表单验证等)提供了一套丰富的功能,用于简化开发和管理Java Web应用程序。
Struts2的主要特点包括:1. 松耦合:Struts2使用基于配置的方式来管理组件之间的依赖关系,降低了模块之间的耦合。
2. 灵活性:开发人员可以根据自己的需求进行扩展和定制,以适应不同的项目需求。
3. 可测试性:Struts2的组件松耦合特点使得单元测试变得容易,并且可以方便地模拟用户请求进行测试。
Question 2: Struts2的核心组件有哪些?Struts2的核心组件包括:1. Action:处理用户请求的核心组件,负责接收请求并执行相应的业务逻辑。
2. Interceptor:用于对请求进行预处理和后处理的拦截器组件。
3. Result:负责生成响应结果,可以是页面视图或其他格式的数据(如JSON、XML等)。
4. FilterDispatcher:负责将请求分发给合适的Action处理。
5. ValueStack:用于存储Action处理的结果数据,支持OGNL表达式以便于数据的访问和操作。
Question 3: 如何定义一个Struts2的Action?在Struts2中,可以通过以下几种方式来定义一个Action:1. 实现Action接口:通过实现Action接口,并提供相应的业务方法来处理请求。
2. 继承ActionSupport类:ActionSupport是一个提供了一些方便方法的抽象类,可以直接继承并实现自己的业务逻辑。
struts2面试题Struts2是一个基于Java开发的Web应用程序框架,被广泛应用于企业级Java应用开发中。
在面试中,面试官可能会提出一些关于Struts2的问题,以评估应聘者的技术水平。
下面是一些常见的Struts2面试题及其详细答案,希望对你在面试中有所帮助。
1. 什么是Struts2?Struts2是一个轻量级的、基于MVC模式的Web应用程序框架。
它采用Java Servlet API和JavaServer Pages (JSP)技术,并提供了一种简单易用的方式来开发可维护和可扩展的Web应用程序。
2. Struts2的主要特性是什么?Struts2的主要特性包括:- MVC架构:将应用程序分为模型、视图和控制器,使开发更容易管理和扩展。
- 拦截器:通过拦截器可以在请求处理的各个阶段添加自定义的逻辑。
- 标签库:提供了丰富的标签库,简化了页面开发。
- 表单验证:提供了灵活且强大的表单验证机制,可以验证用户输入的数据。
- 国际化支持:支持多语言和本地化。
- 配置简单:通过配置文件来管理应用程序的行为。
3. Struts2的工作原理是什么?Struts2的工作原理如下:1) 客户端发送HTTP请求到服务器。
2) 服务器将请求交给Struts2的过滤器(Filter)。
3) 过滤器通过配置文件找到对应的Action,并调用相应的方法。
4) Action处理请求,并返回一个结果页面的名称或一个结果对象。
5) 结果页面的名称通过配置文件进行映射,服务器将其发送给客户端。
4. 什么是Struts2中的Action类?Action类是Struts2框架中的核心组件,用于处理Web请求。
一个Action类对应一个业务功能,其包含了要执行的方法和数据。
它负责接收请求、处理业务逻辑、将结果返回给前端页面。
5. Struts2中的拦截器是什么?有哪些内置的拦截器?拦截器是Struts2中的组件,用于在请求处理的各个阶段添加自定义的逻辑。
第1篇一、基本概念与原理1. 请简述什么是面向对象编程(OOP)?列举OOP的三大基本特征。
2. 解释什么是封装、继承和多态,并举例说明。
3. 简述什么是设计模式,列举三种常用的设计模式及其适用场景。
4. 请解释什么是单例模式,并实现一个单例模式的示例。
5. 什么是原型模式?请简述其原理和实现方式。
6. 请解释什么是工厂模式,并实现一个简单的工厂模式示例。
7. 简述什么是MVC模式,并解释其在Web开发中的应用。
8. 什么是依赖注入(DI)?请解释其原理和实现方式。
9. 请解释什么是反射,并举例说明其在Java中的应用。
10. 什么是异常处理?请解释try-catch-finally语句的用法。
二、编程能力1. 编写一个函数,实现两个数的加法,不使用+运算符。
2. 实现一个函数,用于判断一个字符串是否为回文。
3. 编写一个函数,实现一个链表的插入操作。
4. 实现一个函数,用于查找链表中的倒数第k个节点。
5. 编写一个函数,实现一个队列的入队和出队操作。
6. 实现一个函数,用于判断一个二叉树是否为平衡二叉树。
7. 编写一个函数,实现一个有序数组到有序链表的转换。
8. 实现一个函数,用于计算一个整数的阶乘。
9. 编写一个函数,实现一个栈的入栈和出栈操作。
10. 实现一个函数,用于判断一个字符串是否为有效的括号序列。
三、数据结构与算法1. 请解释什么是时间复杂度和空间复杂度,并举例说明。
2. 请解释什么是排序算法,列举常见的排序算法及其时间复杂度。
3. 实现一个快速排序算法。
4. 实现一个归并排序算法。
5. 实现一个插入排序算法。
6. 实现一个堆排序算法。
7. 请解释什么是查找算法,列举常见的查找算法及其时间复杂度。
8. 实现一个二分查找算法。
9. 实现一个哈希表,并实现插入和查找操作。
10. 实现一个图的数据结构,并实现图的深度优先搜索(DFS)和广度优先搜索(BFS)算法。
四、数据库1. 请解释什么是数据库的三范式(1NF、2NF、3NF),并举例说明。
struts2面试题12010年07月10日15:14Struts1与Struts2的区别,它们常用到哪几个类,以及工作流程?Struts1:ActionServlet[process()],RequestProcessor[processPreprocess()],PlugIn,Action,ActionForm,ActionForward,ActionMapping,struts-config.xmlStruts2:FilterDispatcher,ActionSupport,ServletActionContext[getResponse()],ModelDriven[getModel()],MethodFilterInterceptorstruts.xml,它是在WebWork基础上发展起来的.Struts工作流程:struts1:发布Struts Web服务时,根据web.xml初始化ActionServlet,ActionContext等内容.在接到一个HttpRequest请求后,ActionServlet根据struts-config.xml中的配置内容,将请求的参数传到对应的Formbean中,并设置session.然后根据请求中的Action参数,在struts-config.xml 中查找指定的Action,并调用此Action来处理请求.根据Action的处理结果,会返回一个forward 变量,此时通过mapping.findForward()查找出对应的forward所标示的Action或者JSP页面,将请求转到下一个处理.如果是forward指向JSP页面,则输出到前台.Struts2:(1)客户端提交一个HttpServletRequest请求(.action或JSP页面)(2)请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等(3)FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器(4)请求发到FilterDispatcher后,FilterDispatcher询问ActionMapper是否需要调用某个Action 来处理这个Request(一般根据URL后缀是否为.action来判断)(5)如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求交到ActioProxy,由其进行处理.(6)ActionProxy通过Configuration Manager(它会访问struts.xml)询问框架的配置文件,找到需要调用的Action类.(7)ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用Action,(在调用之前会根据配置文件加载相关的所有Interceptor拦截器)(8)Action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Interceptor拦截器.(9)最后ActionInvocation负责根据struts.xml中配置的result元素,找到与返回值对应的result,决定进行下一步输出.?Struts1和Struts2的区别和对比:Action类:?Struts1要求Action类继承一个抽象基类。
Struts1的一个普遍问题是使用抽象类编程而不是接口。
?Struts2Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。
Struts2提供一个ActionSupport基类去实现常用的接口。
Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
线程模式:?Struts1Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。
单例策略限制了Struts1Action能作的事,并且要在开发时特别小心。
Action资源必须是线程安全的或同步的。
?Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。
(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)Servlet依赖:?Struts1Action依赖于Servlet API,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execute方法。
?Struts2Action不依赖于容器,允许Action脱离容器单独被测试。
如果需要,Struts2Action 仍然可以访问初始的request和response。
但是,其他的元素减少或者消除了直接访问HttpServetRequest和HttpServletResponse的必要性。
可测性:?测试Struts1Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。
一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。
?Struts2Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
捕获输入:?Struts1使用ActionForm对象捕获输入。
所有的ActionForm必须继承一个基类。
因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。
动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。
?Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。
输入属性可能是有自己(子)属性的rich对象类型。
Action属性能够通过web页面上的taglibs访问。
Struts2也支持ActionForm模式。
rich对象类型,包括业务对象,能够用作输入/输出对象。
这种ModelDriven特性简化了taglib对POJO输入对象的引用。
表达式语言:?Struts1整合了JSTL,因此使用JSTL EL。
这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
?Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language"(OGNL).绑定值到页面(view):?Struts1使用标准JSP机制把对象绑定到页面中来访问。
?Struts2使用"ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。
ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
类型转换:?Struts1ActionForm属性通常都是String类型。
Struts1使用Commons-Beanutils进行类型转换。
每个类一个转换器,对每一个实例来说是不可配置的。
?Struts2使用OGNL进行类型转换。
提供基本和常用对象的转换器。
校验:?Struts1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。
同一个类可以有不同的校验内容,但不能校验子对象。
?Struts2支持通过validate方法和XWork校验框架来进行校验。
XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性Action执行的控制:?Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action 必须共享相同的生命周期。
?Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。
堆栈能够根据需要和不同的Action一起使用。
Servlet,Filter和Listener实现的接口.Servlet继承HttpServlet类Filter实现Filter接口Listener实现HttpSessionListener,HttpSessionAttributeListener接口------------------------------------------------------------------------------------Java面试中,最常被人问到的几个问题:1.java.util.*包的UML结构图。
2.Vector和ArrayList、LinkedList区别?Hashtable和HashMap之间的区别3.String、StringBuffer,StringBuilder之间区别。
--回答--1.Collection?|?|_List?|?|_LinkedList?|?|_ArrayList?|?|_Vector?||_Stack|?|_Set|_HashSet??Map?|?|_HashMap?|?|Dictionary?|_|_HashtableComparetor2.?LinkedList内部以链表形式存储数据??ArrayList内部以数组形式存储数据。
??Vector同ArrayList,不过它与ArrayList比较起来是thread-safe的。
??Hashtable是继承了Dictionary,是线程安全的。
HashMap实现了Map接口,不是线程安全的。
???如何保证线程安全的?每个修改容器中数据的操作都是同步的(synchronized),因此保证了线程安全。
3.String是长度不可变的,StringBuffer和StringBuilder长度都是可以变化的。
StringBuffer 是线程安全的,StringBuilder不是线程安全的。
------------------------------------------------------------------------------====2、Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)答:匿名的内部类是没有名字的内部类。
不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现3、Static Nested Class和Inner Class的不同答:Nested Class(一般是C++的说法),Inner Class(一般是JAVA的说法)。