struts1和struts2的详细区别
struts2
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境
搭建Struts2环境时,我们一般需要做以下几个步骤的工作: 1》找到开发Struts2应用需要使用到的jar文件. 2》编写Struts2的配置文件 3》在web.xml中加入Struts2 MVC框架启动配置
北京传智播客教育
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境--Struts2在web中的启动配置
在struts1.x中, struts框架是通过Servlet启动的.在struts2中, struts框架是通过Filter启动的.他在web.xml中的配置如下:
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
讲师: 讲师:黎活明
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
Struts2是在WebWork2基础发展而来的.和struts1一样, Struts2也属于MVC框架. 不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但 Struts2和struts1在代码编写风格上几乎是不一样的.那么既然有了struts1,为何还要 推出struts2.主要是因为struts2有以下优点:
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
第一个Struts2应用--HelloWorld
在默认的配置文件struts.xml 中加入如下配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"> <struts> <package name="itcast" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="execute" > <result name="success">/WEB-INF/page/hello.jsp</result> </action> </package> </struts>
金航数码面试
sendRedirect:在容器之间的跳转,跳转后地址栏地址为跳转后的地址,效率较低。
通常采用jsp:forward方式跳转。
25、类变量的初始化
答:在Java中类变量在局部中一定要初始化,因为局部变量会覆盖全局变量,否则会报错:变量未初始化。全局变量则可以不初始化,而到具体的内部方法或其他的类成员中初始化。
9) 数据校验的对比:Struts 1支持在ActionForm重写validate方法中手动校验,或者通过整合Commons alidator框架来完成数据校验。Struts 2支持通过重写validate方法进行校验,也支持整合XWork校验框架进行校验。
10) Action执行控制的对比:Struts 1支持每一个模块对应一个请求处理(即生命周期的概念),但是模块中的所有Action必须共享相同的生命周期。Struts 2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。开发者可以根据需要创建相应堆栈,从而和不同的Action一起使用。
3) Servlet依赖方面的对比:Struts 1 Action依赖于Servlet API,因为Struts 1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。Struts 2 Action不再依赖于Servlet API,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。 当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts 2 Action仍然可以访问它们。但是,大部分时候,Action都无需直接访问HttpServetRequest和HttpServletResponse,从而给开发者更多灵活的选择。
strusts2课堂总结
一、1、struts2struts2是mvc设计思想的一个实现,可以将项目低耦合,提高扩展性2、struts2和struts1的区别struts2不是struts1的升级,而是继承的下xwork的血统,它吸收了struts1和webwork 的优势。
struts2的action是原型,安全的,struts2的action是单例,非安全3、步骤:1、导入包2、在web.xml文件中,加入struts2的核心拦截器3、在src下放入struts2的xml struts.xml4、urlhttp://localhost:8080/Struts2_01_HelloWorld/demo/hello.action二、1、默认值2、转发和重定向的区别转发:url显示的依然是上一个的url,共享上一次的请求重定向:url显示的是下一个的url,不共享3、urlhttp://localhost:8080/Struts2_02_Default/demo/hello.action4、路径http://localhost:8080/Struts2_02_Default/demo/a/b/c/hello.action1、原路径找不到,http://localhost:8080/Struts2_02_Default/demo/a/b/hello.action2、如果1找不到,http://localhost:8080/Struts2_02_Default/demo/a/hello.action3、如果2找不到,http://localhost:8080/Struts2_02_Default/demo/hello.action3、如果3找不到,http://localhost:8080/Struts2_02_Default/hello.action三、11、自定义action继承ActionSupport2、功能方法必须满足格式public String 名字()throws Exception{....};3、urlhttp://localhost:8080/Struts2_03_Action/demo/a.action四、1、如何给action传入参数注意:赋值的必须有封装的set方法,通过el表达式获取的时候,必须有封装的get 方法1、直接给单个参数赋值,在action里建立一个变量,名字与参数的名字一样2、为对象的某个属性赋值,在action里建立一个对象,将参数改为对象名.属性的格式五、1、转发和重定向的区别转发到下一次的时候,url依然是上一次的url,共享上一次的request重定向到下一次的时候,url是下一次的url,不共享上一次的request2、struts2的result的type转发:共享上一次action重定向:不共享上一次action1、转发到下一个jsp,html:dispatcher2、重定向到下一个jsp,html:redirect3、转发到下一个action:chain转到同一个包下的action转发到不同包下的action4、重定向到下一个action:redirectAction转到同一个包下的action转发到不同包下的action六、1、为了分模块开发,可以设置多个xmL文件。
struts1和strtus2的区别
struts1和strtus2的区别1、Action类Struts 1的Action类扩展一个抽象基类。
在Struts 1是一个常见的问题抽象类而不是接口编程。
Struts 2的行动可能实现一个Action接口,连同其他接口,使可选和定制的服务。
Struts 2中提供了一个基础ActionSupport类实现常用的接口。
虽然,Action接口不是必需的。
任何的POJO对象与一个执行签名可以用作Struts 2的Action对象。
2、线程模型Struts 1的动作是单身,必须是线程安全的,因为只会有一个类的一个实例来处理所有的请求,该行动。
的单身战略名额限制什么可以做Struts 1的操作和发展,需要格外小心。
Action 资源必须是线程安全的或同步的。
在Struts 2 Action对象为每一个请求实例化,因此没有线程安全问题。
(在实践中,servlet 容器会产生许多被丢弃的对象,每个请求,以及一个新的对象并没有对性能上的损失或影响垃圾收集)。
3、Servlet的依赖Struts 1的操作的servlet API的依赖,因为HttpServletRequest和HttpServletResponse被传递给execute方法的调用时采取行动。
Struts 2的动作没有连接到容器中。
最经常使用的servlet上下文被表示为简单的地图,让行动单独测试。
Struts 2的动作仍然可以访问原始的请求和响应,如果需要的话。
然而,其他建筑元素减少或消除的,需要访问HttpServetRequest直接或HttpServletResponse的。
4、可测性测试Struts 1行动的主要障碍是execute方法暴露了Servlet API。
一个第三方扩展中,Struts TestCase中,提供了一组Struts 1的模拟对象。
Struts 2的动作可以测试通过实例的操作,设置属性和调用方法。
依赖注入的支持也使测试更简单。
struts2框架特征
struts2框架特征Struts2框架特征Struts2是一种流行的Java Web应用程序开发框架,其特征使其成为许多开发者的首选。
本文将介绍Struts2框架的特征,包括MVC 架构、强大的标签库、拦截器、数据验证、国际化支持以及灵活的配置等。
一、MVC架构Struts2采用了MVC(Model-View-Controller)架构,将应用程序的业务逻辑、数据模型和用户界面分离。
这种架构使开发者能够更好地组织代码、提高代码的可维护性,并能够更容易地进行代码重用和测试。
在Struts2中,Model代表数据模型,可以是POJO(Plain Old Java Object)或者是与数据库交互的实体类;View代表用户界面,通常是JSP页面;Controller则负责处理用户请求、调用业务逻辑,并将处理结果返回给用户。
二、强大的标签库Struts2提供了丰富的标签库,使开发者能够更轻松地构建用户界面。
这些标签库包括表单标签、数据展示标签、控制流标签等,可以大大简化页面开发的工作量。
例如,开发者可以使用Struts2的表单标签库来生成表单,并自动处理表单的数据绑定、验证和错误提示。
这样,开发者无需手动编写大量的HTML和JavaScript代码,能够更快速地完成表单开发。
三、拦截器Struts2的拦截器是其核心特性之一,可用于在请求到达Controller之前和之后执行一些通用的处理逻辑,如日志记录、权限验证、异常处理等。
开发者可以通过配置拦截器栈,将多个拦截器按照特定的顺序组合起来,实现复杂的请求处理流程。
拦截器的使用使得开发者能够将通用的处理逻辑从业务逻辑中分离出来,提高了代码的可维护性和重用性。
同时,Struts2还提供了许多内置的拦截器,如参数封装拦截器、文件上传拦截器等,方便开发者处理不同类型的请求。
四、数据验证在Web应用程序中,数据验证是一项重要的任务。
Struts2提供了强大的数据验证机制,开发者可以通过简单的配置实现对表单数据的验证。
Struts2知识点总结
Struts2基础知识Struts2概述1.Struts2框架应用javaee三层结构中的web层框架。
2.Struts2框架在struts1和webwork基础之上发展的全新框架。
3.Struts2所解决的问题:在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。
图解:4.现在比较稳定的Struts2版本struts-2.3.24-all.zip5.web层常见框架1.struts2.springMVCStruts2框架入门1.导入jar包1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring包,是不能使用的,导入会导致程序不能运行。
2.到app目录里面复制案例的jar包是最好的方法。
2.创建action3.配置action类的访问路径1.创建struts2核心配置文件,该核心配置文件位置和名称是固定的,位置必须在src下面,名称为struts.xml 。
2.引入dtd约束,可以在案例文件中找到,复制在struts.xml文件中即可。
3.action的配置*注意访问路径:http://域名/端口号/项目名/action名.action注意:.action可以省略,但建议不要省略,为了兼容一些老版本的浏览器。
4.配置Struts2的过滤器,可以在案例中的web.xml文件中找到,复制粘贴即可。
Struts2执行过程图解:Struts2配置1.是一种常量标签2.修改Struts2的默认常量值1.常用方式在struts.xml中进行配置。
2.其它两种方式1.在src下面创建struts.properties文件并修改。
2.在web.xml文件中进行修改。
3.Struts2最常用的常量struts.il8n.encoding=UTF-8,解决表单在通过post方式提交中文时,中文乱码的问题。
Struts2笔记(一)可使用全局页面。
1、配置方法:在package标签下配置2、注意:该标签只能在一个package标签中使用,如果有多个标签,需要重新定义。
Struts2第一天课堂笔记
一、框架概述1、框架的意义与作用:所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的经历放到业务需求的分析和理解上面。
特点:封装了很多细节,程序员在使用的时候会非常简单。
2、三大框架:Struts2,Hibernate,Spring3、学好框架:由于框架中细节很多,知识点比较零散,课后总结和做好笔记就变得尤为重要。
二、关于三层架构三、控制器:MVC中的控制器1、MVC回顾M:Model 模型,封装数据。
javabeanV:view 视图,展示界面。
jspC:Controller 控制器,控制程序流程。
Servlet2、Servlet和FilterServlet:Filter:总结:Servlet能做的事情,过滤器也可以做到。
并且过滤器比Servlet还多了一个放行的功能,因此过滤器比Servlet功能更为强大。
结论就是:过滤器同样也适合做控制器。
四、案例中的问题规律:1、获取请求正文,用户要做什么事情2、根据不同的请求,做出不同的判断3、执行具体的方法代码(动作)4、转向页面,展示给用户缺陷:1、重复性劳动太多,具体的执行代码也有冗余代码。
2、到底要做什么全是硬编码,像用户要做什么事情,对应执行什么代码,可以写在配置文件中。
3、具体的代码方法放到了控制器中,过于臃肿。
五、Struts2简介1、Struts2概述Struts2是Apache发行的MVC开源框架。
注意:它只是表现层(MVC)框架。
2、Struts2的来历Struts1:也是apache开发的一套mvc的开源框架。
在2005年之前非常流行。
弊端:Struts1的核心控制器就是一个Servlet。
随着使用者的增多,弊端开始出现。
Struts2:在long long ago,有一个设计超前的框架XWork,后来推出了XWork1和WebWork2。
Struts2就是apache和OpenSymphony 组织合并开发出来。
struts2常见面试题
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是一个提供了一些方便方法的抽象类,可以直接继承并实现自己的业务逻辑。
01、struts2(Struts2开发入门 、常用配置、参数传递) - 副本
1. Struts2简介1.1. 什么是Struts21.1.1. Struts2的概念Struts2是轻量级的MVC框架,它主要解决了请求分发的问题,重心在于控制层和表现层。
轻量级,指的是Struts2具有较低的侵入性,就是它对我们业务代码的依赖程度很低,简单来说,在使用Struts2框架时,我们的业务代码中基本上不需要import它的包。
Struts2实现了MVC,满足了MVC设计思想。
在我们使用Struts2做开发的时候,就相当于使用了MVC,这是Struts2自动帮助我们实现的,是默认的、隐含的,我们不需要再写特别的代码来实现MVC了。
作为一个框架,Struts2提供了一系列的API,我们可以使用它们来简化代码的编写,从而提升开发效率。
这些API复用程度很高,对业务代码的依赖性也很小,甚至很多是Struts2自动调用的,因此在很大程度上,我们的开发变得可以复用。
Struts2解决请求分发的问题,我们会在后面为什么使用Struts2中讲解。
重心在控制层和表现层,是纵观整个Struts2理论课程来看的,从中我们会体会到这一点,随着大家对Struts2的逐步了解,届时我们再回顾这一点。
1.1.2. 什么是MVCMVC是代码的分层思想,是软件设计领域经典的设计模式。
它根据代码功能的不同,将一个软件的代码分为3部分,即模型、视图、控制器,这3部分代码的含义和功能如下。
1、M-Model 模型模型(Model)的职责是负责业务逻辑。
包含两层:业务数据和业务处理逻辑。
比如实体类、DAO、Service都属于模型层。
2、V-View 视图视图(View)的职责是负责显示界面和用户交互(收集用户信息)。
属于视图的组件是不包含业务逻辑和控制逻辑的JSP。
3、C-Controller 控制器控制器是模型层M和视图层V之间的桥梁,用于控制流程。
比如:在Servlet项目中的单一控制器ActionServlet。
第一章Struts2系统架构
第一章Struts2系统架构本章主要介绍的Struts2的系统架构,让学员对Struts2框架在结构上有一个整体概念为我们以后更加详细的学习Struts2打下一个良好的基础。
第一节Struts2的系统架构及处理的主要流程1.Struts1简介Struts1的历史比较久远,Struts1是世界上第一个发布的MVC框架,目前市场率最高的框架。
下面将简单讲解Struts1的基本架构。
图1-1显示了Struts1的数据流图。
图1-1 Struts1数据流图Struts1框架以ActionServlet为核心控制器,ActionServlet获得客户端请求。
然后ActionServlet根据请求信息调用匹配的业务逻辑控制器(Action)处理用户请求。
请求处理完成后,业务逻辑处理器调用相应的JSP显示处理结果。
Struts1框架实现了MVC模式,下面我们了解一下Struts1是怎样实现MVC模式的。
Struts1框架中并没有提供Model层的实现。
在实际的企业应用中,通过一个JavaBean 实现一个业务逻辑,在功能比较复杂的应用中也采用EJB或WebService服务实现业务逻辑。
Struts1框架的View层采用JSP实现。
Struts1提供了大量丰富的标签库。
这些标签库与Struts的组件兼容的特别好,可以很容易的输出控制器的处理结果。
Struts1框架中,控制器是它的核心,Struts1的控制器由两部分组成:核心控制器(ActionServlet)和业务逻辑控制器(Action),核心控制器由Struts1框架提供。
业务逻辑控制器需要由用户自己继承Struts1框架提供的Action类实现。
在Struts1框架中,JSP/Servlet耦合非常紧密。
这种紧密关系促使Struts1存在各种缺陷。
下面我们分析一下Struts1中存在的缺陷。
●支持的表现层技术单一●耦合性强,不便于单元测试●代码依赖于Struts1 API,侵入性强2.WebWork简介WebWork出自于开源组织opensymphony,实际的创始人是Java领域的名人Rickard Oberg(JBoss和XDoclet的作者)。
面试中经常遇到的技术问题
面试中经常遇到的技术问题前绪:以下总结的是在面试过程中经常遇到的技术性问题,由于笔试的技术知识比较零散,且内容较多,每个公司注重的也有很大区别,在这里就不陈述了,大家除了看老师给发的笔试资料外还可以参考我所总结的常见面试题,其实在面试的时候很多的技术性问题都是出自于笔试题目,只不过换了种问法或加以扩展,有些题目是我们未曾学到的,大家可以参照下,提前下手学习。
一.ajax部分(1)ajax的原理和优缺点?(2)ajax的应用,做过什么功能,如何实现,了解和用过什么ajax框架?(如dwr)(3)普通web应用于ajax的区别?二.ejb部分(1)ejb与javabean的区别?(2)ejb是基于哪些技术实现的?并说出sessionbean和entitybean的区别,statefulbean和statelessbean的区别。
(3)ejb的角色和三个对象(4)ejb容器提供的服务(5)ejb规范规定ejb中严禁的操作方式存有哪些?(6)ejb的几种类型(1)struts1与struts2的工作机制?(2)struts1与struts2的区别?(3)单实例与多实例的区别?(基于上一个问题)(4)struts你都用过那些标签?(5)hibernate的工作机制?(6)如何优化hibernate?(7)为什么会用hibernate?它的优缺点就是什么?(8)hibernate如何实现关联的?(9)hibernate的延后读取就是怎样同时实现的?(10)hibernate如何实现分页?(11)spring的工作机制?什么就是ioc?什么就是aop?(12)spring是怎样实现声明式事务?(13)struts与spring就是怎样联手采用的?(14)struts、hibernate、spring是怎样相互配合使用的?(15)spring的事物管理?(提示信息:包含编程式和声明式)四.javascript部分(1)如何认知javascript的面向对象?(2)javascript都有哪些内置对象和方法?(3)你就是怎样应用领域javascript的?(4)window.parent与window.openner得区别?(5)javascript中三种提示框的方式?(prompt)(6)form中的input有哪些类型?各是做什么处理使用的?(7)form中的input可以设置readonly和disable,答这两项属性存有什么区别?(8)简述div元素和span元素的区别(9)融合text这段结构,谈谈innerhtmlouterhtmlinnertext之间的区别五.oracle数据库(1)oracle用过什么函数?(2)oracle用过什么(视图,索引,存储过程)?(3)oracle管理过么?(4)让你插入1000条数据你会怎么做?(5)数据库的job就是什么去继续执行的?(6)数据库分区和表空间的建立(7)数据库的子程序握个例子?(8)什么是绑定变量?(9)数据库的三范式?(10)什么是临时表,为什么要用临时表?(11)存储过程包含哪些部分?适用于于什么场合?(12)游标的作用?(13)数据库连接池的工作机制就是什么?(14)去掉数据库中指定表里重复的数据(如name重复)(15)常用操作命令必须甜(16)delete与truncate、drop的区别?(1)tomcat的四种公布项目的方式?(2)使用过weblogic吗?那个版本的?(3)应用服务器存有那些?(1)说一下常用过哪些设计模式?(2)说道一下工厂模式的机制?融合项目应用领域在哪些地方?(3)第三方插件的作用?(4)bs/cs的优缺点?(5)什么是多态?(6)什么就是面向对象?(7)接口与抽象类的区别?分别适用什么地方?(8)表述mvc模式?(9)mvc1与mvc2的区别?(10)说道一下你对webservice的认知(11)对类有什么理解。
黑盒法
黑盒法:该方法是把被测试对象看成一个黑盒子,测试人员完全不考虑程序内部结构和处理过程.只在软件的接口处进行测试,根据需求规格说明书.检查程序是否满足功能要求.因此黑盒测试有称为功能测试或数据驱动测试/白盒法:该方法是把测试对象看作一个打开的盒子,测试人员须了解程序的内部结构和处理过程,一检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致.Action 类:? Struts1要求Action类继承一个抽象基类。
Struts1的一个普遍问题是使用抽象类编程而不是接口。
? Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。
Struts2提供一个ActionSupport基类去实现常用的接口。
Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
线程模式:? Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。
单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。
Action资源必须是线程安全的或同步的。
? Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。
(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)Servlet 依赖:? Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和HttpServletResponse 被传递给execute方法。
? Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。
如果需要,Struts2 Action仍然可以访问初始的request和response。
Struts2介绍
Struts2集成指南关于Struts2Struts是Apache软件基金会(ASF)赞助的一个开源项目。
它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。
它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller〔MVC〕设计模式的应用框架〔Web Framework〕,是MVC经典设计模式中的一个经典产品。
Struts,a history在Java EE的Web应用发展的初期,除了使用Servlet技术以外,普遍是在JavaServer Pages(JSP)的源代码中,采用HTML与Java代码混合的方式进行开发。
因为这两种方式不可避免的要把表现与业务逻辑代码混合在一起,都给前期开发与后期维护带来巨大的复杂度。
为了摆脱上述的约束与局限,把业务逻辑代码从表现层中清晰的分离出来,2000年,Craig McClanahan采用了MVC的设计模式开发Struts。
后来该框架产品一度被认为是最广泛、最流行JAVA的WEB应用框架。
Craig McClanahan2006年,WebWork与Struts这两个优秀的Java EE Web框架(Web Framework〕的团体,决定合作共同开发一个新的,整合了WebWork与Struts优点,并且更加优雅、扩展性更强的框架,命名为“Struts 2”,原Struts的1.x版本产品称为“Struts 1”。
至此,Struts项目并行提供与维护两个主要版本的框架产品——Struts 1与Struts 2。
Struts1 vs. Struts2侵入性Struts 1在编程方面是面向抽象类编程,而不是面向接口编程。
Struts 1要求自定义Action 类继承一个特定的抽象基类Action。
另一方面,Struts 1的 Action 依赖于 Servlet API,因为Struts 1 Action 的execute 方法中有HttpServletRequest 和HttpServletResponse 方法。
java开发工程师职位面试10篇_面试频道
java开发工程师职位面试10篇_面试频道面试经验1面试公司:威盛电子(中国)职位:java开发工程师面试前一天晚上电话里面说直接去一层前台说是面试的,到了一层大厅的时候,发现才9:40,于是就抽出资料翻了饭,快9:50去找前台。
说明来意和面试职位后,前台mm把我带到第一会议室,说是填表。
进去的时候有一中科大的gg 也在等着,我们聊了会,他说听别人说如果今天可以面到hr 的话,就基本问题了,否则应该就被淘汰了。
不知道到底是怎样。
进入正题,过了一会,一个hr mm带我去了一个会议室,有一位面试官已经在等着了。
进去先问我,是xxx么,我说是,然后招呼我坐下,他进行了一番自我介绍,说是一个leader,具体是什么没记住,说主要负责技术面,如果通过他的面试后,会见到他的boss,然后是hr。
我当时还以为所有的成败都会在今天决定。
面试官开始让我做个自我介绍,我就问介绍哪方面的,他说比如什么时间进入什么学校读书,做过什么项目之类的。
然后我就%………………听完我说的项目经历后,他问我在项目中一般是什么样的角色。
之后说让我找一个自己觉得最成功的项目进行介绍,然后我指着简历上的一个项目,一顿描述,听完我的描述后,他问了几个实现相关的问题,都很细,心想,还好,这个项目比较了解,不然就栽大了。
所以去面试的话一定要把自己简历上的项目好好想清楚怎么说。
大致就这些了,之后跟我说三天内会给消息,如果三天内没有消息我就可以放弃他们公司,于是面试结束,最后问我要成绩单,然后我就走人了。
差不多不到半个小时。
面完之后心里很没底,没问我什么技术的具体问题,我当时都惊了,第一次经历这样的面试,不知道是不是被bs了。
鰄r mm带我去了一个会议室,有一位面试官已经在等着了。
进去先问我,是xxx么,我说是,然后招呼我坐下,他进行了一番自我介绍,说是一个leader,具体是什么没记住,说主要负责技术面,如果通过他的面试后,会见到他的boss,然后是hr。
struts2讲义
e.g. ums_struts2_02_action/struts.xml Ⅲ. 使用 DMI 或通配符 目的:减少 Action 的数量 方式一:动态方法调用(Dynamic Method Invocation DMI,struts2.1 后不建议使 用) 定义一个 Action 类,类中可以定义多个与 execute()方法,声明部分相同但方法名 不同的方法。 e.g. ums_struts2_02_action/UserAction_DMI.java 1、定义 UserAction_DMI 类
e.g. ScopeAction_3.java 方式四:实现 ServletRequestAware 接口
e.g. ScopeAction_4.java 注意:1、其中,前两种方式与 Servlet API 解耦合,后两种方式与 Servlet API 耦合,推荐使 用第二种方式,第二种方式使用了 IOC 的模式,解耦合更好。 Ⅵ.Action 中生成响应信息 e.g. ums_struts2_02_result Struts2 框架通过 Action 中 execute()方法的返回值,与 struts.xml 中<action>的<result>元 素的 name 属性值来判断最终响应信息的内容。其中<result>元素设置如下: <result type=”结果类型” name=”名称”>WEB 资源路径或名称</result> 说明: 1、name:result 名称随便起,默认为“success“,与 execute 方法返回值一致。 2、 WEB 资源路径或名称:WEB 资源路径如果为相对路径,则该路径相对于 WEB 应用上下文。如果跳转到 Action 则为该 Action 所对应的<action>元素的 name 值。 3、 type:设置生成响应信息的类型,默认为 dispatcher。 (Ⅰ)ActionSupport 中预定义的结果常量 在 Struts2 的 ActionSupport 类中预定义了一些 Result 常量,当定义的 Action 类继承了 ActionSupport 时就可以使用这些结果常量,当然也可以使用自定义的 result 字符串。
五大框架的理解
Java 五大框架之间的对比Spring 及其优点大部分项目都少不了spring的身影,为什么大家对他如此青睐,而且对他的追捧丝毫没有减退之势呢Spring是什么:Spring是一个轻量级的DI和AOP容器框架。
说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应用一般不依赖于spring的类。
DI:称作依赖注入(Dependency Injection),和控制反转一个概念,具体的讲,当一个角色需要另外一个角色协助的时候,在传统的程序设计中,通常有调用者来创建被调用者的实例。
但是在spring中创建被调用者将不再有调用者完成,因此叫控制反转。
创建被调用对象有Spring来完成,在容器实例化对象的时候主动的将被调用者(或者说它的依赖对象)注入给调用对象,因此又叫依赖注入。
AOP:Spring对面向切面编程提供了强有力的支持,通过它让我们将业务逻辑从应用服务(如事务管理)中分离出来,实现了高内聚开发,应用对象只关注业务逻辑,不再负责其它系统问题(如日志、事务等)。
Spring支持用户自定义切面。
面向切面编程是面向对象编程的有力补充。
面向对象编程将程序分成各个层次的对象,面向切面的程序将运行过程分解成各个切面。
AOP是从运行程序的角度去考虑程序的结构,提取业务处理过程的切面,OOP是静态的抽象,AOP是动态的抽象,是对应用执行过程的步骤进行抽象,从而获得步骤之间的逻辑划分。
容器:Spring是个容器,因为它包含并且管理应用对象的生命周期和配置。
如对象的创建、销毁、回调等。
框架:Spring作为一个框架,提供了一些基础功能,(如事务管理,持久层集成等),使开发人员更专注于开发应用逻辑。
看完了Spring是什么,再来看看Spring有哪些优点1.使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑2.可以提供众多服务,事务管理,WS等。
程序员常见的问题解答
程序员常见的问题解答1.Configuration接口的功能,主要作用?创建一个Configuration对象配置和启动hibernate框架创建SessionFactory对象的实例读取hibernate.cfg.xml核心配置文件2.Hibernate持久化操作的七步?1.创建Configuration对象2.创建SessionFactory对象3.创建Session对象4.开始事物5.持久化操作6.提交事物7.关闭Session3.怎么样使用HQL查询方法?创建一个查询createQuery()创建一个Query查询接口的实例,该实例可以利用HQL语言来进行数据库的查询操作。
HOL语句要给createQuery()方法作为参数才可以让Query方法来进行查询操作4.事务具有几个基本特征,都是什么吗?(ACID):1 Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。
2 Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。
3 Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。
同时,并行事务的修改必须与其他并行事务的修改相互独立。
4 Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。
5. 如果两个事物并发运行,就可能出现以上五种并发问题,都是什么?1第一类丢失更新(Lost update)2. 脏读取(Dirty Reads):3.虚读(Phantom Reads)4. 不可重复读取(Non-repeatable Reads)5第二类丢失更新(Second lost updates problem)6.hibertnate中的关联关系包括1.一对一的关联模式2.一对多的关联模式3. 多对多的关联模式7. 怎么样把映射表的xml文件配置到Hibernate核心配置文件中:<mapping resource="model/Student.hbm.xml" />8. ORM全称?(Object - Relation Mapping)对象关系映射9.ORM的工作原理?把持久化类映射成数据库中的表把对象映射成数据库中表的一行记录把对象的属性映射成数据库中表的字段10. Session接口的功能它是应用程序与数据库之间交互的但线程对象,一个session同样对应一个数据库,所以它是hibernate提供的与进行持久化操作的对象(持久化操作为增,删,改,查)同时它也是一个事物对象的工厂,及Transaction对象两种创建方式11.session中最常用的几种持久化操作的方法?save()delete()update()load()get()12. Session缓存的作用?1、减少访问数据库的频率。
Struts2课件
Sturuts2第一节、Struts2介绍Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
Struts2对Struts1进行了巨大的改进。
主要表现在如下几个方面: 在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个POJO。
线程模型方面:Struts1的Action是单实例的,一个Action的实例处理所有的请求。
Struts2的Action是一个请求对应一个实例(每次请求时都新new出一个对象),没有线程安全方面的问题。
Servlet依赖方面:Struts1的Action依赖于Servlet API,比如Action的execute方法的参数就包括request和response对象。
这使程序难于测试。
Struts2中的Action不再依赖于Servlet API,有利于测试,并且实现TDD。
封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。
Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。
表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(Object Graph NavigationLanguage)。
绑定值到视图技术:Struts1使用标准的JSP,Struts2使用"ValueStack"技术。
科大国创笔试题
1.字符转整型int i = Integer.parseInt([String]); 真的不是一般的杯具。
字符倒序输出public class Test {public static String reverseString(String str){StringBuffer sbf = new StringBuffer();for(int i=0;i<str.length();i++){sbf.insert(0, str.charAt(i)); //核心}return sbf.toString();}public static void main(String[] args){String str;str = "123456789";System.out.println(reverseString (str));}}2.struts1 2 区别struts1和struts2 是2个完全不同的框架,其实struts2核心就是 webwork 框架struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的所有请求。
Struts 1框架有3个重要组成部分:Action、ActionForm和ActionForward对象。
ActionForm必须实现ActionForm的基类,设计上并不是真正的POJO。
struts2核心控制器是FilterDispatcher,Struts 2用于处理用户请求的Action 实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。
而Struts 2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action的execute方法来处理用户请求。
s1与s2区别
s1与s2区别struts1和struts2的区别struts2不是struts1的升级,而是继承的webwork的血统,它吸收了struts1和webwork的优势。
1.action类struts1要求继承一个抽象的基类(MappingDispatchAction),而且是使用抽象类编程不是接口struts2 action类可以实现action接口但是不是必须的,任何有execute标识的POJO对象都可以用作struts2的action对象2. 线程模式struts1 action是一个单例模式并且必须是线程安全的,单例策略限制了struts1 action的行为,action资源必须是线程安全的或者是同步的.struts2 action对象为每一个请求产生一个实例,因此没有线程安全的问题.3.servlet依赖struts1 action 严重依赖于servlet的API(应用程序接口),调用action被调用时httpservletrequest和httpservletresponse被传递给execute方法strurs2 action不依赖于容器,action可以单独被测试,同时如果需要httpservletrequest和httpservletresponse也可以从ServletActionContext类用对应的get方法获取4.可测试性struts1 execute方法使用了servlet API很难测试虽然可以借助struts Testcase提供对象来测试但是也很麻烦struts2 Struts2只要实现了一个public String execute()就可以了,这样Action就可以实现脱离Servlet 测试.5.接受输入struts1使用actionForm对象来接受输入。
所有的actionform都必须继承该基类。
因为他javaBean不能当做作actionform,导致开发者经常创建多余的类来捕获输入。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
特征Struts 1 Struts 2
Action类Struts1的action需要去继承一个抽象基
类。
一个普遍问题就是Struts1是面向抽
象类编程来代替接口编程
Struts2的action可以实现一个Action接
口,也可以同时实现一些其他的接口来添
置一些附加的,常用的服务。
Struts2提
供一个基类ActionSupport实现了一些常
用的接口。
虽然Action接口不是必须的。
任何附带execute方法的POJO对象都
可以作为Struts2的action对象。
线程模型Struts1的action是单例的而且必须是线
程安全的,因为该类会只有唯一一个引用
来为action处理所有的请求。
单例策略
会限制Struts1的action的功能以及需要
扩展的额外的功能(The singleton
strategy places restrictions on what can
be done with Struts 1 Actions and
requires extra care to develop)。
Struts1
的action必须是线程安全的并且是同步
的。
Struts2的Action对象是针对每一个请求
的,所以自然也就不存在线程安全问题
了。
(实际上,)
Servlet的依赖Struts1的Action依赖于Servlet API,因
为当Action被调用的时候
HttpServletRequest和
HttpServletResponse对象是通过
execute方法进行处理的。
Struts2的Action和容器的连接并不紧
密。
通常servlet上下文被描绘成简单的
Map映射,允许Action被单独测试。
当
然,如果需要的话Struts2的Action也可
以通过访问初始的request和response
来完成一些功能。
然而,其他的一些架构
元素导致降低或者删除了直接访问
request和response的需求。
易测试性测试Struts1的Action有一个大障碍就是
execute方法是直接暴露于servlet API
的。
Struts2的Action可以很容易的通过设置
属性调用方法来进行测试。
当然依赖注入
的支持也使得测试变得简单。
输入处理Struts1使用一个ActionForm对象来获取
用户的输入。
和action一样,所有的
ActionForm都必须继承自一个基类。
因
为其他的javaBean不能被用作
ActionForm,开发者通常要写一些多余
的类来获取用户输入。
DynaBean可以被
用做生成ActionForm类的一个选择,但
是开发者需要对现有的javaBean进行重
Struts2使用Action属性作为输入属性,
除掉了对于输入对象的需求。
输入属性可
以是一个拥有他自己的属性的对象。
Action属性是通过标签和web页面交互。
Struts2也支持ActionForm模型,就是
POJO的Form对象和POJO的Action。
多数的对象类型,包括商业逻辑对象和领
域对象都可以作为输入/输入对象。
模式
驱动特征简化了标签和POJO输入对象
写。
的关系。
表达式语言Struts1和JSTL结合,所以他可以使用
JSTL的EL。
Struts2也支持JSTL,但是这个框架也支
持更加强大的表达式语言OGNL.
表现层和类型值的绑定Struts1使用标准的JSP机制将对象绑定
到page context来进行访问。
Struts2使用”ValueStack”技术,所以标签
不用将视图和表现的对象结合就可以得
到值.ValueStack策略允许通过一系列可
能具有相同属性名字但是不同属性类型
的的类型来完成视图的重用,
类型转换Struts1的ActionForm通常都是String类
型。
Struts1通过Commons-Beanutils实
现类型转换。
Struts2使用OGNL实现类型转换,框架
包含了对基础和公共类型的转换器。
验证Struts1支持通过ActionForm中的
validate方法实现手工验证。
也可以通过
扩展通用的验证框架进行验证。
对于同一
个类可以有不同的验证,但是不能关联到
子对象的验证。
Struts2也支持通过validate方法进行手
工验证以及Xwork验证框架进行验证。
Xwork验证框架支持将验证链接到子属
性,子属性使用了为属性类型和验证上下
文定义的验证。
Action执行的控制Struts1支持为每一个模块分配请求处理
(生命周期),但是一个模块中的所有
Action必须分享相同的生命周期。
Struts2支持通过拦截器栈为每个Action
创建不同的生命周期。
通常对于不同的
Action根据需要都要有对应的栈被创建
和使用。