SSH实用面试应用总结

上传人:世*** 文档编号:168038589 上传时间:2021-02-17 格式:DOC 页数:18 大小:54.50KB
返回 下载 相关 举报
SSH实用面试应用总结_第1页
第1页 / 共18页
SSH实用面试应用总结_第2页
第2页 / 共18页
SSH实用面试应用总结_第3页
第3页 / 共18页
SSH实用面试应用总结_第4页
第4页 / 共18页
SSH实用面试应用总结_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《SSH实用面试应用总结》由会员分享,可在线阅读,更多相关《SSH实用面试应用总结(18页珍藏版)》请在金锄头文库上搜索。

1、1. Struts的工作原理 在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet, ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此 FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的 FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。2. Struts优点与缺点 Struts是开源软件,使开发者能更深入的了解其内部实

2、现机制。 Struts 优点:业界标准(很多成功案例),学习资源丰富。 Struts的优点主要集中体现在两个方面:Taglib和页面导航。 a、利用Struts提供的taglib可以大大节约开发时间。 b、维护扩展比较方便。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。 c、表现与逻辑分离 d、表单验证解决了请求数据的验证问题,增强了系统健壮性。 e、便于团队开发 Struts缺点:a、大量的使用标签,对于初学者难度较大。 b、ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)3. Struts提供了几个标签库?都

3、是什么标签库? Struts提供了五个标签库,即:HTML、Bean、Logic、Template和Nested。 HTML 标签 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单 Bean 标签 在访问JavaBeans 及其属性,以及定义一个新的bean 时使用 Logic 标签 管理条件产生的输出和对象集产生的循环 Template 标签 随着Tiles框架包的出现,此标记已开始减少使用 Nested 标签 增强对其他的Struts 标签的嵌套使用的能力7.你对MVC的理解,MVC有什么优缺点?结合Struts,说明在一个Web应用如何去使用?答:MVC

4、设计模式(应用观察者模式的框架模式)M: Model(Business process layer),模型,操作数据的业务处理层,并独立于表现层(Independent of presentation)。V: View(Presentation layer),视图,通过客户端数据类型显示数据,并回显模型层的执行结果。C: Controller(Control layer),控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图MVC框架的一种实现模型模型二(Servlet-centric):JSP+Servlet+JavaBean,以控制为核心,JSP只负责显示和收

5、集数据,Sevlet,连接视图和模型,将视图层数据,发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体,承载数据,基本上大多数的项目都是使用这种MVC的实现模式。StrutsMVC框架(Web application frameworks)Struts是使用MVC的实现模式二来实现的,也就是以控制器为核心。Struts提供了一些组件使用MVC开发应用程序:Model:Struts 没有提供model 类。这个商业逻辑必须由Web 应用程序的开发者以JavaBean或EJB的形式提供8.叙述Struts ActionForm执行步骤 答案:()检查Action的映

6、射,确定Action中已经配置了对ActionForm的映射()根据name属性,查找form bean的配置信息()检查Action的formbean的使用范围,确定在此范围下,是否已经有此form bean的实例。()假如当前范围下,已经存在了此form bean的实例,而是对当前请求来说,是同一种类型的话,那么就重用。()否则,就重新构建一个form bean的实例()form bean的reset()方法备调用()调用对应的setter方法,对状态属性赋值()如果validatede的属性被设置为true,那么就调用form bean的validate()方法。(9)如果validat

7、e()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行9.简单叙述Struts 里 ActionForm Bean的作 答案:1、ActionForm Bean也是一种JavaBean,除了具有一些JavaBean的常规方法,还包含一些特殊的方法,用于验证HTML表单数据以及将其属性重新设置为默认值。2、Struts框架利用ActionForm Bean来进行View组件和Controller组件之间表单数据的传递。3、Struts框架把View组件接受到的用户输入的表单数据保存在ActionForm Bean中,把它传递给Cont

8、roller组件,Controller组件可以对ActionForm Bean中的数据进行修改,JSP文件使用Struts标签读取修改后的ActionForm Bean的信息,重新设置HTML表单。10.简述Struts Form Bean的表单验证流程答案:1、当用户提交了HTML表单,Struts框架自动把表单数据组装到ActionForm Bean中。2、接下来Struts框架会调用ActionForm Bean的validate()方法进行表单验证。3、如果validate()方法返回的ActionErrors 对象为null,或者不包含任何ActionMessage对象,就表示没有错

9、误,数据验证通过。4、如果ActionErrors中包含ActionMessage对象,就表示发生了验证错误,Struts框架会把ActionErrors对象保存到request范围内,然后把请求转发到恰当的视图组件,视图组件通过标签把request范围内的ActionErrors对象中包含的错误消息显示出来,提示用户修改错误11.简述Struts框架响应客户请求的工作流程答案:1. 检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。2. 如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionF

10、orm对象中。3. 根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。4. 如果ActionForm的validate()方法返回null或返回一个不包含ActionMessge的ActionErrors对象,就表示表单验证成功。5. ActionServlet根据AtionMapping实例包含的映射信息决定将请求转发给哪个Action。如果应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。6. Action的execute()方法返回一个ActionForward对象,ActionServlet再

11、把客户请求转发给ActionForward对象指向的JSP组件。7. ActionForward对象指向的JSP组件生成动态页面,返回给客户。对于以上流程的步骤(4),如果ActionForm的validate()方法返回一个包含一个或多个ActionError的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含客户提交表单的JSP组件。在这种情况下,不会再创建Action对象并调用Action的execute方法。12.Get请求和Post请求区别 答案:a、Post是通过Http中的Post机制将表单中的数据提交到Action所制定的程序

12、Get方法是通过Url请求来提交表单数据的。b.Get适用于传输数据量小于1K数据,执行效率高。Post传输数据量较大,但也有限量13.Struts中Action是线程安全的吗?如果不是,请说出理由在Struts可以定义静态变量吗? 参考答案: Servlet是在多线程环境下的。即可能有多个请求发给一个servelt实例,每个请求是一个线程。 struts下的action也类似,同样在多线程环境下。可以参考struts user guide: http:/struts.apache.org/struts-action/userGuide/building_controller.html 中的A

13、ction Class Design Guidelines一节: Write code for a multi-threaded environment - Our controller servlet creates only one instance of your Action class, and uses this one instance to service all requests. Thus, you need to write thread-safe Action classes. Follow the same guidelines you would use to wr

14、ite thread-safe Servlets. 译:为多线程环境编写代码。我们的controller servlet指挥创建你的Action 类的一个实例,用此实例来服务所有的请求。因此,你必须编写线程安全的Action类。遵循与写线程安全的servlet同样的方针。 1.什么是线程安全的代码 在多线程环境下能正确执行的代码就是线程安全的。 安全的意思是能正确执行,否则后果是程序执行错误,可能出现各种异常情况。 2.如何编写线程安全的代码 很多书籍里都详细讲解了如何这方面的问题,他们主要讲解的是如何同步线程对共享资源的使用的问题。主要是对synchronized关键字的各种用法,以及锁的概

15、念。 Java1.5中也提供了如读写锁这类的工具类。这些都需要较高的技巧,而且相对难于调试。 但是,线程同步是不得以的方法,是比较复杂的,而且会带来性能的损失。等效的代码中,不需要同步在编写容易度和性能上会更好些。 我这里强调的是什么代码是始终为线程安全的、是不需要同步的。如下: 1)常量始终是线程安全的,因为只存在读操作。 2)对构造器的访问(new 操作)是线程安全的,因为每次都新建一个实例,不会访问共享的资源。 3)最重要的是:局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部变量,它不是共享的资源。局部变量包括方法的参数变量。 struts user guide里有: Only Use Local Variables - The most important principle that aids in thread-safe coding is to use only lo

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号