[Java面试]五:常见面试题之框架篇Struts2
我的博客首页:http://blog.csdn.net/m0_37116405我的GitHub首页:https://github.com/KissLouis框架组成部分核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。Struts2工作流程客户端向Servlet容器(如Tomcat)提交一个请求请求经过一系列过滤器(如Acti...
·
我的博客首页:http://blog.csdn.net/m0_37116405
我的GitHub首页:https://github.com/KissLouis
- 框架组成部分
- 核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。
- Struts2工作流程
- 客户端向Servlet容器(如Tomcat)提交一个请求
- 请求经过一系列过滤器(如ActionContextCleanUp过滤器等)
- FilterDispatcher核心控制器被调用,询问ActionMapper来决定请求是否需要调用某个Action
- 如果ActionMapper决定需要调用某个Action,核心控制器把控制权委派给ActionProxy (备注:JSP请求无需调用Action)
- ActionProxy通过Configuration Manager询问框架的配置文件(struts.xml),找到需调用的Action类
- ActionProxy创建一个ActionInvocation的实例
- ActionInvocation负责调用Action,在此之前会依次调用所有配置的拦截器
- 一旦Action执行完毕,ActionInvocation负责根据结果码字符串在struts.xml的配置中找到对应的返回结果
- 拦截器将再次执行
- 过滤器被再次执行
- 拦截器和过滤器的区别
- 过滤器依赖于servlet容器,而拦截器不依赖于servlet容器
- 拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
- 在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用。
- Struts2的设计模式
- web应用程序启动时就会加载并初始化ActionServler。
- 用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法.
- Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动态的网页,返回给客户。
- JSP和Struts的区别
- JSP通常用于MVC的View层,Struts1,Struts2用于MVC的Control层。
- JSP用来展示页面信息,使用servlet API封装而成,代替servlet中response向客户端输出HTML等页面信息。这样做更利于界面设计与输出,而不用使用代码将HTML页面元素输出。Struts将一个Servlet实例封装成核心控制拦截器,然后通过配置文件,分发处理给不同的action处理(这里的action类似于一个servlet)。
- JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。我们仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。
- Struts2的优缺点
- 优点
- 实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现。
- 丰富的标签库,大大提高了开发的效率。
- Struts2提供丰富的拦截器实现。拦截器就是一个一个的小功能单位,用户可以将这些拦截器合并成一个大的拦截器,这个合成的拦截器就像单独的拦截器一样,只要将它配置到一个、Action中就可以。
- 缺点
- Action类就会被这些表单属性弄的很臃肿,让人感觉会很乱。
- Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。
- 优点
常见面试题,还需补充。
如果本篇博文中存在问题,烦请指出,本人及时修改,谢谢阅读!
更多推荐
已为社区贡献1条内容
所有评论(0)