struts2工作原理面试(用Struts2开发和用jsp、servlet开发有什么区别(面试题,求详细答案,谢谢))

本文目录
- 用Struts2开发和用jsp、servlet开发有什么区别(面试题,求详细答案,谢谢)
- 面试题:谈一下你对struts2的认识用语言怎么组织比较即简单又全面呢
- java 关于struts框架一般面试提什么问题
- struts2如何拦截请求,面试时一直被问到这个以及这方面的求一个标准答案啊
- java面试 谈谈对ssh三大框架的理解
- Java问题《struts2、C/S、B/S》(学习+面试200分+额外分)
- 关于struts2,hibernate2,spring3,面试时让我说下这三大框架的工作原理,东西太多了,应该侧重说哪些东西
- java常见的面试题和面试技巧 谁能告诉我 谢谢
- struts2面试经常问到的几个问题
用Struts2开发和用jsp、servlet开发有什么区别(面试题,求详细答案,谢谢)
使用纯jsp页面属于modal1开发模式也就是jsp+javabean,使用servlet就是modal2开发模式也就是jsp+servlet+javabean,struts2就是mvc2,struts充当控制器,开发速度更快,更易于维护。
面试题:谈一下你对struts2的认识用语言怎么组织比较即简单又全面呢
回答此类问题,通常是有规律可循的。
1、讲出这个东西的本质是什么
2、在应用程序架构中的位置是什么
3、能干什么
4、描述一下工作流程
5、说一下优缺点
demo:
他是一个mvc框架,介于发出请求和返回请求之间的一个mvc框架。
他分析请求路径和参数,调用业务逻辑处理程序,返回response
在分层系统中用于衔接页面输入和bo层的逻辑层面
可是系统层次结构分明,易维护、以扩展
另外自己可以扩展一些概念,整合视图层技术(可返回jsp、freemarker)、拦截器(过滤请求)
希望可以帮到你
java 关于struts框架一般面试提什么问题
一、说说Struts2的工作流程1、Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。
1)核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。
2)业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。
Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。
2、基本简要流程如下:
1)客户端初始化一个指向Servlet容器的请求;
2)这个请求经过一系列的过滤器(Filter)
(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3)接着FilterDispatcher被调用,
FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4)如果ActionMapper决定需要调用某个Action,
FilterDispatcher把请求的处理交给ActionProxy
5)ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6)ActionProxy创建一个ActionInvocation的实例。
7)ActionInvocation实例使用命名模式来调用,
在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。 在这个过程中需要涉及到ActionMapper
9)响应的返回是通过我们在web.xml中配置的过滤器
10)如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。
struts2如何拦截请求,面试时一直被问到这个以及这方面的求一个标准答案啊
目测这是问struts2流程.
容器启动,加载web.xml,初始化FilterDispatcher,加载default.properties文件,根据struts.configration.files加载struts的三种配置文件。
客户端将请求提交到web容器,被filterDispatcher过滤到,将请求转发给ActionProxy,获取表示请求的字符串,提交给ActionInvocation;根据解析的字符串找到对应的action映射节点,实例化class属性指定的业务逻辑Action;在执行execute之前,查看action周围是否有拦截器引用,如果有,按照引用的顺序逐个执行;执行execute方法进行业务逻辑处理;处理完毕之后,根据方法的返回值,在action节点下查找对应的result节点,返回匹配的视图给客户端。
java面试 谈谈对ssh三大框架的理解
首先hibernate是一个持久层框架,轻量级(性能好),orm映射灵活,对表与表的映射关系处理的很完善,对jdbc做了良好的封装,使得我们开发时与数据库交互不需要编写大量的sql语句。
而struts是一个mvc的web层框架,底层是对servlet的大量封装,拥有强大的拦截器机制,主要负责调用业务逻辑Service层。
三大框架的大致流程jsp-》struts-》service-》hibernate。因为struts负责调用Service从而控制了Service的生命周期,使得层次之间的依赖加强,也就是耦合。
所以我们引用了spring,spring在框架中充当容器的角色,用于维护各个层次之间的关系。通过IOC反转控制DI依赖注入完成各个层之间的注入,使得层与层之间实现完全脱耦,增加运行效率利于维护。
并且spring的AOP面向切面编程,实现在不改变代码的情况下完成对方法的增强。比较常用的就是spring的声明式事务管理,底层通过AOP实现,避免了我们每次都要手动开启事物,提交事务的重复性代码,使得开发逻辑更加清晰。
这样应付面试应该可以了,不过他可能会细问,比如hibernate的懒加载,spring的AOP和IOC原理等,这个还需要在准备准备
Java问题《struts2、C/S、B/S》(学习+面试200分+额外分)
1.如果对mvc模式已经有所了解,那上网看看文档足以。实在闲得蛋疼就去买本书吧,孙鑫的Struts2深入详解貌似还可以。
2.两种情况:如果是刚毕业,那么框架大概知道一点就行,然后多多钻研数据结构和java的高级特性,像反射,代理什么的,现在的技术经理往往对算法精通,基础扎实的学生抱有好感。
如果已经工作几年了,那就多谈谈项目和业务吧,这种情况务实最重要。
3.c/s里最重要的是swing,现在做swing最好的ide应该是sun的netbeans吧
不过现在做swing的公司……真的太少了。
4.c/s不需要tomcat吧,tomcat是一个web容器,只有b/s才需要web容器。
b/s说白了就是网页系统,会做网页的那套东西就行了,javascript,jsp,servlet,html,css+div,jdbc数据库操作,一点点输入输出流的内容
关于struts2,hibernate2,spring3,面试时让我说下这三大框架的工作原理,东西太多了,应该侧重说哪些东西
先总体说说它们3个代表MVC开发模式中的哪一层..
struts2代表控制层,hibernate数据持久层,spring相当于容器,可以整合struts2,hibernate。
并且spring的aop可以在service层实现事物控制.
然后分别细说
先说struts2
struts2提供了众多拦截器,页面提交的参数会经过默认的18个拦截器的过滤...最终能把页面提交的参数自动转换成需要的类型.
能自定义拦截器,实现aop编程,实现如权限拦截等功能,
数据校验,能对指定方法校验,支持xml校验.
能实现国际化.
支持多种表现层技术,如:JSP、freeMarker、Velocity等
支持ajax,
模型驱动,能把参数封装到模型驱动里,模型驱动会把对象放置到栈顶,在页面通过ognl表达式,能够回显数据.
如果你对值栈了解很透彻的话...这里可以继续吹下去..比如OgnlValueStack 类包含两个重要的属性 一个root和一个context。
root实际上是一个ArrayList,root保存着调用Action的实例,
context是一个Map,context中又有一个默认顶层对象_root,它是属性root的复制,在页面访问它是不需要加#号的...后面可以继续..我懒得打了..
其它的比如Token令牌啊,怎么防止表单重复提交.....争取吹个半小时..如果面试官还没让你听的话
Ok
继续hibernate
hibernate是ORM框架,它对jdbc进行了封装,在分层结构中处于持久化层,
它能建立面向对象的域模型和关系数据模型之间的映射.
它大大简化了dao层的编码工作
然后就说说session中的缓存和快照表
也可以说说get和load获得方法有什么区别
在说说二级缓存...它是SessionFactory级别的缓存.是进程范围的..他有内置和外置..二级缓存就是指外置的....分别有4个...集合缓存,时间戳缓存..查询缓存..类级别的缓存....一般用于很少被修改的数据..允许偶尔的并发问题
...在其它的吹了那么几下.....什么?还没让你停?
ok
继续sping
这里先说说什么是IOC..DI..可以xml实现..也能注解...我一般都是用注解.
然后就重点说说aop就行了....什么切面.连接点...切入点.目标对象..通知...织入啊...拿个自己了解的吹吧..
在说说用aop怎么实现事物控制...
还没让你停?
就说说ssh整合吧.
.....打了...半个多小时...楼主你懂的....
java常见的面试题和面试技巧 谁能告诉我 谢谢
如果说是一个企业急需招人,我想那就得多准备一些框架方面的知识,毕竟做项目是用的框架!下面进入主题:大概的流程是这样吧 框架——》Java基础——》数据库相关点——》页面注意技巧
一:框架——》
1,)Struts2是如何实现MVC的?M(模型):这个一般不由Struts来做V (视图):视图也不算struts的强项,但是struts提供优秀的标签来支持视图的展示,利用标签,可以将数据合理的展示给用户控制器:struts的重要功能,提供struts的过滤器,拦截用户的请求,查找struts配置文件,为其匹配一个对应的Action,这个Action负责调用模型,获得数据,然后对数据做部分处理,接着Action再将处理后的数据,为其选择一个视图进行输出。
2) Struts工作机制?为什么要使用Struts? 工作机制: Struts的工作流程: 在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象当ActionServlet接收到一个客户请求时,将执行如下流程. (1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息; (2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中; (3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法; (4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功; (5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法; (6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给ActionForward对象指向的JSP组件; (7)ActionForward对象指向JSP组件生成动态网页,返回给客户;为什么要用: JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件 Struts的validate框架是如何验证的? 在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。
3)spring工作机制及为什么要用? 1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请请求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 6.视图对象负责渲染返回给客户端。为什么用: AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。
IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用 其协作对象构造的。因此是由容器管理协作对象(collaborator)。
4)Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。2. Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many。
5)Hibernate的一级缓存与二级缓存的区别?
一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库。(这个题想简答就可以了,但是如果想深入去多问几个问什么这里提供一个连接,写得较为详细:1)
另外一个关键点是:你要知道什么信息和什么操作,该调用什么级别的缓存!
6)如何优化Hibernate?(这个问题有些触及到这个框架的弱点了,那就得想办法应付)
1.使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表关联不要怕多,自己再补充一点,上面说到的都是关于数据库设计 带来的优势,从而起到优化框架的效果,但是真正在实际操作中,我们只有尽量控制不使用懒加载“lazy
=true”,如果在涉及的尽量使用Hql语句
7)struts的核心是什么?(参考了这个回答:2)
FilterDispatcher也是Struts2的核心技术。FilterDispatcher核心控制器执行以下操作:(1)读取静态数据信息(2)决定需要转发或者导航的Action配置(3)创建Action的Context(4)创建Action代理(5)内存清理和性能优化拦截器:Interceptor 拦截器本身是一个普通的Java对象,它能动态拦截Action调用,在Action执行前后执行拦截器本身提供的各种个样的Web项目需求。 也可以阻止Action的执行,同时也可以提取Action中可以复用的部分。(1)在Action调用之前提供系统处理流程逻辑控制(2)和Action交互时,提供Ation执行时的一些初始信息(3)在Action结束后,一些事后的处理流程逻辑(4)修改Action中返回的Result信息(5)捕获异常栈是用ognl表达式存值的最初地方,即一个存值的栈 自己再补充一点:struts的标签库也算一个。
8)ssh 的工作流程(这个问题留作作业,它们之间的相互实现,相互调用从原理上理解就行了)
struts2面试经常问到的几个问题
1. Struts工作机制?为什么要使用Struts?
工作机制:
Struts的工作流程:
在web应用启动时就会加载初始化ActionServlet,ActionServlet从
struts-config.xml文件中读取配置信息,把它们存放到各种配置对象
当ActionServlet接收到一个客户请求时,将执行如下流程.
-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;
-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;
-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;
-(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;
-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;
-(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件;
-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;
2. Struts的设计模式
MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,
一个配置好的ActionForm对象被创建,并被填入表单相应的数据,
ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,
如果需要就调用ActionForm的 Validate()验证后选择将请求发送到哪个Action,
如果Action不存在,ActionServlet会先创建这个对象,
然后调用 Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,
ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,
ActionForward对象指定的jsp生成动态的网页,返回给客户。

更多文章:
another time(another time和other time的区别)
2026年10月11日 05:00







