struts面试题.docx_第1页
struts面试题.docx_第2页
struts面试题.docx_第3页
struts面试题.docx_第4页
struts面试题.docx_第5页
已阅读5页,还剩195页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 中的许多特性都是通过拦截器来实现的, 例如异常处理,文件上传,验证等。拦截器是可配置与重用的. 多种表现层技术. 如:JSP、FreeMarker、Velocity 等4. Struts2 如何访问 HttpServletRequest、HttpSession、ServletContext 三个域对象 ?. 与 Servlet API 解耦的访问方式 通过 ActionContext 访问域对象对应的 Map 对象 通过实现 Aware 接口使 Struts2 注入对应的 Map 对象. 与 Servlet API 耦合的访问方式 通过 ServletActionContext 直接获取 Servlet API 对象 通过实现 ServletXxxAware 接口的方式使 Struts2 注入对应的对象5. Struts2 中的默认包 struts-default 有什么作用?. struts-default 包是 struts2 内置的,它定义了 struts2 内部的众多拦截器和 Result 类型,而 Struts2 很多核心的功能都是通过这些内置的拦截器实现,如:从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。当包继承了struts-default包才能使用struts2为我们提供的这些功能。.struts-default 包是在 struts-default.xml 中定义,struts-default.xml 也是 Struts2 默认配置文件。Struts2 每次都会自动加载 struts-default.xml文件。. 通常每个包都应该继承 struts-default 包。6. 说出 struts2 中至少 5 个的默认拦截器exception;fileUpload;i18n;modelDriven;params;prepare;token;tokenSession;validation 等7. 谈谈 ValueStack:. ValueStack 贯穿整个 Action 的生命周期,保存在 request 域中,所以 ValueStack 和 request 的生命周期一样. 当 Struts2 接受一个请求时,会迅速创建 ActionContext,ValueStack,Action. 然后把 Action 存放进 ValueStack,所以 Action 的实例变量可以被 OGNL 访问。请求来的时候,Action、ValueStack 的生命开始;请求结束,Action、ValueStack的生命结束. 值栈是多实例的,因为Action 是多例的(和 Servlet 不一样,Servelt 是单例的),而每个 Action 都有一个对应的值栈,Action 对象默认保存在栈顶;. ValueStack 本质上就是一个 ArrayList(查看源代码得到);. 使用 OGNL 访问值栈的内容时,不需要#号,而访问 request、session、application、attr 时,需要加#号;. Struts2 重写了 request 的 getAttribute 方法,所以可以使用 EL 直接访问值栈中的内容8. ActionContext、ServletContext、pageContext的区别 ?. ActionContext Struts2 的 API:是当前的 Action 的上下文环境. ServletContext 和 PageContext 是 Servlet 的 API9. Struts2 有哪几种结果类型 ?参看 struts-default.xml 中的相关配置:dispatcher、chain、redirect 等.10. 拦截器的生命周期与工作过程 ?每个拦截器都是需要实现 Interceptor 接口 init():在拦截器被创建后立即被调用, 它在拦截器的生命周期内只被调用一次. 可以在该方法中对相关资源进行必要的初始化; intercept(ActionInvocation invocation):每拦截一个动作请求,该方法就会被调用一次; destroy:该方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次;11. 如何在 Struts2 中使用 Ajax 功能 ?. JSON plugin. DOJO plugin. DWR plugin. 使用 Stream 结果类型.1. Struts框架的整体运行流程在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象,例如:Action的映射信息存放在ActionMapping对象中.当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组件生成动态网页,返回给客户8. ActionServlet在Struts框架中的总体作用功能是什么1. 在web应用启动时ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象,例如:Action的映射信息存放在ActionMapping对象中。2. ActionServlet是整个struts框架的骨干,也是主要的控制部件,它能够处理客户request并且决定由哪个Action处理客户request。它象一个Action工厂,创建基于客户request请求的Action类的对象9. Struts框架的后缀名一般为.do,后缀后能不能更改,如果能更改的话,如何进行更改后缀名可以更改,在web.xml中把action*.do中的url-pattern值改成你想要的后缀名就可以了。1. 如何在Struts-config.xml中配置数据源以及获取数据源Key绑定在ServletContext上的DataSource实例的索引键,若不设定则缺省为Action.DATA_SOURCE_KEY,如果在应用程序中有多于一个的DataSource,则必须设置Key的值。DriverClassName所用的JDBC驱动类(必须的)如:com.microsoft.jdbc.sqlserver.SQLServerDriverurl所用的JDBC的URL(必须的)如:jdbc:microsoft:sqlserver:/xg088:1433MaxCount同时打开的最大连结数,缺省值为2(可选的)MinCount同时打开的最小连结数,缺省值为1(可选的)User连结到数据库的用户名(必须的)Password连结到数据库的密码(必须的)Description关于DataSource的描述信息(可选的)ReadOnly如果设为true,则表示该连结是只读的,缺省为false。(可选的)LoginTimeout创建连结的最大允许时间,以秒为单位。(可选的)AutoCommit如果为true,则每次execute之后会强制回滚。缺省为true。(可选的)在action中只要继承了org.apache.struts.actions.Action及子类,即可通过getDataSource方法获得数据源,代码如下:/多个数据源DataSourcedatasource=this.getDataSource(httpServletRequest,”key值”);/单个数据源DataSourcedatasource=this.getDataSource(httpServletRequest);1. Struts-config.xml文件action配置中的attribute属性和name属性有什么区别name:用来表示Actionform的名称,attribute:表示ActionFrom的实例放到作用域中的名称.1. Struts中的Action是不是线程安全的?如果不是有什么方式可以保证Action的线程安全?如果是,说明原因不是线程安全的。在Struts的生命周期中,只会为每个Action类创建一个实例,所有的客户请求共享这个实例。因此,必须保证在多线程环境中,Action也能正常工作。因此在Action类中要谨慎使用实例变量。如果在Action类中定义了实例变量,那么在Action实例的整个生命周期中,这个实例变量被所有请求的线程共享。因此不能在Action类,特别是execute方法中定义代表特定客户状态的实例变量。如果要采用实例变量,需要采用Java的线程同步机制。1. Action的Execute方法有几个参数,这几个参数的具体作用是什么一共有4个参数ActionMappingmapping获取映射ActionFormform获取表单HttpServletRequestrequest获得请求HttpServletResponseresponse获得响应1. Action的Execute方法的返回值是什么类型,有几种方式可以返回此类型Action的Execute方法的返回值的类型是ActionForward,返回此类型的方法有三种:1、通过new一个ActionForward,传入它要去的页面的路径;2、通过mapping.findForward()的方法,通过action配置中的forward属性来找到相应跳转的页面;3、通过mapping.getInputForward()的方法,根据action配置中的input属性来查找。1. ActionFrom中对于错误消息的存取是如何存取的,页面上面是如何显示ActionFrom中存放的出错消息ActionForm中的错误消息是通过ActionForm中的validate方法来进行验证的,validate()方法会传回ActionErrors对象,ActionErrors可以储存ActionError的讯息,这时ActionServlet就不会继续进行接下来的工作,而是导回structs-config.xml所设定的位置,并forward至input属性所设定的位置。页面上是通过struts提供的标签来显示出错消息的。1. 普通的Action对于消息的存取是如何实现的,页面上面是如何显示Action中存放的消息Action对于消息的存取是通过ActionMessages来实现的,ActionMessages以一个HashMap存储ActionMessage.Map中的key是一个标识,其对应的value是一个List对象,所有的ActionMessage存储在List中.也就是说key标识了一组ActionMessage.页面上是通过struts的的标签来显示的。1. 普通的ActionForm和动态的ActionForm有什么区别,在动态的ActionForm中如何设定一个日期类型的属性1.动态的ActionForm,由actionform继承而来,之所以有这个东西是因为,它特点是不需要FormBean,而是在struts-config.xml中通过form-property来设置form的表单字段属性.优势是减少在大型开发过程中formbean的增加而显得程序臃肿,给维护和升级带来极大的不便.2.需要注意的是:在JSP或Action中访问动态ActionForm时与标准的ActionFrom有所不同,标准ActionForm为每个属性均提供了一对getXXX()/setXXX()方法,通过调用getxxx()/setxxx()方法即可读取或设置ActionForm某个属性.而DynaActionForm则把所有的属性保存在一个Map类对象中,只能通过get()和put()来存取其属性值.如,从动态表单实例中读取会员的注册信息:Stringusername=form.get(“username”).toString();Stringpassword=form.get(“password).toString();Stringphone=form.get(“phone”).toString();在动态的ActionForm中,要设置一个日期类型的属性,有两种方式:1.直接将数据类型设置为java.sql.Date,但是在页面上必须输入yyyy-mm-dd格式的日期才能行。2.将类型设置为java.lang.String,不过后台需要转换。1. 动态ActionForm是以什么方式存取表单控件的值的。要使用动态ActionForm取得一个控件的值是如何取得动态ActionForm是通过在配置文件中设置相应的表单控件的名称的属性来实现表单控件值的存取。取得动态ActionForm的控件的值的方法有两种,一是通过request.getParameter()的方法来获得,二是使用动态的ActionForm来获取值,只要调用相应的动态ActionForm的get()方法,如:testDynamicActionForm.get(“控件名称”)。1. 普通的Action与DispatchAction的区别是什么普通Action通常只能完成一种业务操作.DispatchAction可以处理多个业务请求,只不过再配置Action的时候需要设置parameter=”your_method”;请求时这样写http:/localhost:8080/test.do?your_method=add&id=1其中add是继承DispatchAction的Action类的一个业务操作。1. Struts框架中常用的有HTML/Bean/Logic标签,这些标签的主要功能是什么1)HTMLTags:该标签库包含的标签可以用来创建Struts输入表单。2)BeanTags:该标签库包含的标签可以用来创建bean、访问bean和访问bean的属性。同时提供了依据cookies、headers和parameters的值创建相关bean的能力。3)LogicTags:该标签库包含的标签可以用来进行逻辑判断、集合迭代和流程控制。1. HTML标签中的name属性代表什么功能,为什么可以省略不写当标签与JavaBean合作的时候,Name代表作用域中Bean的名称;当标签没有跟JavaBean合作,Name表示作用域中对象的名称。因为在配置文件中已经通过name这个属性将action和actionForm关联在一起了,所以可以不用写。1. Struts标签中name和property两个属性的作用和区别当标签与JavaBean合作的时候,Name代表作用域中Bean的名称;PropertyBean中属性的值。1. 请简述J2EE平台体系中标签的体系结构在标签体系中,最高的是JspTag,它是一个接口,内部没有任何的东西;接着是Tag和SimpleTag,他们都是接口,SimpleTag是简单的标签类,只能实现无body的标签,它的实现类是SimpleTagSupport。Tag下面的接口是IterationTag;它的子接口是BodyTag;IterationTag的实现类有TagSupport,主要用来做无body的标签,BodyTagSupport继承自TagSupport并实现了BodyTag接口,主要实现有body标签。1. 请简述自定义标签的步骤1、创建实现了Tag接口的标签处理程序类,创建相应的属性。2、创建一个TLD描述文件来描述这个标签,在TLD文件中定义与标签处理程序Java类中定义的属性对应的属性。3、在jsp页面中导入标签。4、在jsp页面使用自定义标签。1. 如何在自定义标签中获取ServletContext,HttpSession,HttpServletRequest这些JSP页面常见的对象1、获取ServletContext对象:this.pageContext.getServletContext();2、获取HttpSession对象:this.pageContext.getSession()3、获取HttpServletRequest对象:ServletRequestservletRequest=this.pageContext.getRequest();HttpServletRequestrequest=(HttpServletRequest)servletRequest;1. Servlet2.4版本中新增加了一个标签为简单标签,要实现简单标签的话,必须实现标签中的哪一个方法,该方法有没有返回值doTag()方法,它没有返回值1. Struts框架如何实现国际化的步骤1、资源文件的编写2、Jsp页面必须使用UTF-8编码机制3、使用来输出资源文件中定义的资源显示信息。4、本地页面语言的指定。1. 如何实现页面中HTML标签的初始值设置在对应的ActionForm中设置相应属性的初始值,或者调用ActionForm中的相应属性的set方法来为其设置初始值。1. Struts框架的综合运用开发过程中,一般会使用ActionForm和JavaBean,这两个Bean能不能通用?如果不能的话请简述原因无法通用,1.ActionForm是表示表单对象,负责action和表单的数据传递,javabean是表示和数据库交互的对象。2.从软件分层角度看,bean分开的话,一旦框架发生变化,无需进行大量代码重构。1. 如何操作Oracle表中CLOB和BLOB字段1、先把自动提交设置成false;2、先插入一个空的大对象empty_clob();3、将这条记录锁住;4、取出这条记录中的CLOB或BLOB的内容,用流的方式写入到数据库中,再关闭流;5、提交。选择题:1. Struts体系结构实现了MVC设计模式的概念,那么它将以下选项中给出的什么分别映射为web应用中的组件?( )A ViewB ModelC ActionServletD ActionE ActionMappingF Controller2. 在Struts体系结构中,以下哪个由代表系统状态和商业逻辑的Action来构建?( )A ViewB ModelC ActionD Controller3. 在Struts中,以下选项哪一个是负责Struts体系中的流程控制?( )A ControllerB ModelC ActionServletD Action4. ActionServlet由什么来实现?( )A ViewB ModelC ActionMappingD Controller5. 在Struts框架中ActionForm对象的主要作用是什么?( )A 封装对象B 流程控制C 构建业务逻辑D 返回结果6. 在负责显示的JSP页面我们需要在action标签中,我们需要添加,在横线处添什么属性来负责验证?A validate()B validate=”true”C validate=”false”D html:errors7. 在Struts框架中适用资源文件都要以什么编码来编写?( )A ISO8859-1B GBKC UTF-8D GB23128. 以下哪些是Action的子类?( )A DispatchActionB MappingDispatchActionC DynaActionFormD DynaValidatorActionForm9. 在Struts中动态的ActionForm是什么?( )A DispatchActionB MappingDispatchActionC DynaActionFormD DynaValidatorActionForm10. 如何在Struts中如果我们要使用Validation作验证?( )A 需要使用DynaValidatorActionForm类B 同时我们要把validation.jar和jakarta-ora.jar两个文件配置到WEB应用的lib下C 还要保证validator-rules.xml和validation.xml两个配置文件放到WEB应用下D 还要把json.jar配置到WEB应用的lib下11. struts框架中,关于FormBean,下列说法正确的是:( )A FormBean是一种数据bean,主要用来封装表单提交上来的数据,并把这些数据传递给ActionB 在FormBean中可以对页面上传递来的参数进行一下格式上的验证,这种验证是一种客户端的验证C 用户每次提交表单,都会产生一个新的FormBean实例D 动态FormBean不能进行验证操作12. struts框架中,在一个Action的配置信息中,name属性指的是什么?A 当前action实例的名字B 当前action所在的类的名字C 该Action中调用的FormBean的实例的名字D 该Action中调用的FormBean的类的所在包名13. 在Struts中,以下哪些说法是正确的?( )A 每个HTTP请求对应一个单独的ActionServlet实例B 对于每个请求访问HelloAction的HTTP请求,Struts框架会创建一个单独的HelloAction实例。C 每个子应用对应一个单独的RequestProcessor实例D 每个子应用对应一个单独的web.xml文件14以下说法正确的是?( )A DispatchAction解决多个页面使用相同的表单时,将多个请求功能合并到一个Action对象中,前提条件:合并的请求要使用相同的ActionForm。B DispatchAction类可以将多个请求合并成一个Action去处理,Action一样但是servletpath不一样。C LookupDispatchAction类可以解决客户端在同一个表单中所有的按钮名字都要相同,服务器端要通过名字得到值,解决一个form多个提交按钮的情况。D MappingDispatchAction类可以将多个请求合并成一个Action去处理,Action一样但是servletpath不一样。15. 在Struts框架中如果要使用Validation作验证的话,需要使用以下哪个Form?( )A ActionFormB ValidatorActionFormC ValidatorFormD DynaValidatorActionForm16. 在LookupDispatchAction中我们需要覆盖什么方法来解决按钮和方法的对应关系?( )A getKeyMethodMap()B execute()C unspecified()17. 关于struts框架,下面那些说法是正确的?( )A Struts中无法完成上传功能B Struts框架基于MVC模式C Struts框架容易引起流程复杂、结构不清晰等问题D Struts可以有效地降低项目的类文件数目18. 关于struts项目中的类与MVC模式的对应关系,说法错误的是?( )A Jsp文件实现视图View的功能B ActionServlet这一个类是整个struts项目的控制器C ActionForm、Action都属于Model部分D 一个struts项目只能有一个Servlet19. 下面哪些任务不是RequestProcessor完成的?( )A 把Struts配置文件信息加载到内存中B 如果需要的话,创建ActionForm实例,组装数据,并进行表单验证C 找到匹配的Action实例,调用其execute()方法D 把请求转发到Action的execute()方法返回的ActionForward代表的组件20. 对于以下代码,HelloAction希望把请求转发给hello.jsp,在HelloAction的execute()方法中如何实现?( )type = hello.HelloActionname = HelloFormscope = requestvalidate = trueinput = /hello.jspA return (mapping.forward(“SayHello”);B return (new ActionForward(mapping.getInput();C return (mapping.findForward(“SayHello”);D return (mapping.findForward(“hello.jsp”);E return (new ActionForward(“SayHello”);21. 对于以下这段配置ActionServlet的代码,哪些说法是错误的?( )actionorg.apache.struts.action.ActionServletconfig/WEB-INF/myconfig.xml2action*.doA Servlet容器在启动Struts应用时,会初始化这个ActionServletB 对于所有URL中以”.do”结尾的HTTP请求,都由ActionServlet处理C 这段代码位于struts-config.xml中D 这段代码位于web.xml中22. 在Struts中如果需要使用资源文件,需要在struts-confg.xml中进行配置,配置的标签是:( )ABC D 23. 在JSP页面中我们要使用Struts的标签库,需要引入那两个标签,请问在下面横线处应分别添什么A htmlB cC beanD JSTL24. 向某个作用域内设置属性的JSTL标签是什么?( )A bean:messageB c:setC c:chooseD bean:equal问答题:1. 请回答:什么是MVC模式?2. 在MVC模式中的各个部分都有那些技术来实现,如何实现的?3. Struts的三大核心是什么?4. 什么是struts的框架5. 请简要的描述Struts中,ActionServlet,ActionClass,ActionForm,ActionMapping,ActionForward,ActionErrors,Tag标签,这几个组件的主要用途?6. 请描述以下Struts的应用是什么样的?1. Struts框架的整体运行流程在WEB启动时就会加载并初始化ActionServlet。ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象中.当ActionServlet接收到一个客户请求时:一、检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效。二、如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交表单数据保存到ActionForm对象中。三、根据配置决定是否需要表单验证,如果需要验证,就调用ActionForm的validate()方法。四、如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionError对象,就表示表单验证成功。五、ActionServlet根据ActionMapping实例包含的映射决定将请求转发给哪个Action。如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。六、Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。七、ActionForward对象指向的JSP组件生成动态网页,返回给客户。1. ActionServlet在Struts框架中的总体作用功能是什么ActionServlet是struts框架的总控制器,处理客户端请求并决定由那个action处理请求。1. Struts框架的后缀名一般为.do,后缀名能不能更改,如果能更改的话,如何进行更改后缀名后缀名可以更改。通过修改web.xml中的*.do1. 如何在Struts-config.xml中配置数据源以及获取数据源在struts中配置oracle数据源需要四个包:commons.pools,commons.dbcp,Class12.jar,struts_legacy.jar,把它加到WEB-INF下的lib目录下就可以了,然后这段写在struts-config.xml文件的标签下:1. Struts-config.xml文件action配置中的attribute属性和name属性有什么区别attribute:制定与当前Action相关联的ActionForm Bean在作用域里的名称name:指定和当前Acion关联的ActionForm Bean的名字。该名称必须在form-bean元素中定义过。1. Struts中的Action是不是线程安全的?如果不是有什么方式可以保证Action的线程安全?如果是,说明原因不是. 为了确保action的线程安全, 最好的办法就是不要在action里定义实例变量1. Action的Execute方法有几个参数,这几个参数的具体作用是什么ActionMapping mapping:Action里的配置属性信息 ActionForm form:与该Action相关联的ActionForm对象HttpServletRequest request:该Action接收到的请求信息HttpServletResponse response:该Action返回的响应信息1. Action的Execute方法的返回值是什么类型,有几种方式可以返回此类型返回值类型:ActionForward1).mapping.findForward(“Forward的名称”);2).new ActionForward(“jsp组件的路径”);1. ActionFrom中对于错误消息的存取是如何存取的,页面上面是如何显示ActionFrom中存放的出错消息1. 普通的Action对于消息的存取是如何实现的,页面上面是如何显示Action中存放的消息2. 普通的ActionForm和动态的ActionForm有什么区别,在动态的ActionForm中如何设定一个日期类型的属性3. 动态ActionFrom是以什么方式存取表单控件的值的。要使用动态ActionForm取得一个控件的值是如何取得4. 普通的Action与DispatchAction的区别是什么5. Struts框架中常用的有HTML/Bean/Logic标签,这些标签的主要功能是什么6. HTML标签中的name属性代表什么功能,为什么可以省略不写7. Struts标签中name和property两个属性的作用和区别8. 请简述J2EE平台体系中标签的体系结构9. 请简述自定义标签的步骤10. 如何在自定义标签中获取ServletContext,HttpSession,HttpServletRequest这些JSP页面常见的对象11. Servlet2.4版本中新增加了一个标签为简单标签,要实现简单标签的话,必须实现标签中的哪一个方法,该方法有没有返回值12. Struts框架如何实现国际化的步骤13. 如何实现页面中HTML标签的初始值设置14. Struts框架的综合运用开发过程中,一般会使用ActionForm和JavaBean,这两个Bean能不能通用?如果不能的话请简述原因15. 如何操作Oracle表中CLOB和BLOB字段16. Struts1.struts1和struts2的区别17. 在Action实现类方面的对比:Struts1要求Action类继承一个抽象基类;Struts1的一个具体问题是使用抽象类编程而不是接口。Struts2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用作Struts2的Action。18. 线程模式方面的对比:Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。19. Servlet依赖方面的对比:Struts1 Action依赖于Servlet API,因为Struts1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。Struts2 Action不再依赖于Servlet API,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。 当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts2 Action仍然可以访问它们。但是,大部分时候,Action都无需直接访问HttpServetRequest和HttpServletResponse,从而给开发者更多灵活的选择。20. 可测性方面的对比:测试Struts1 Action的一个主要问题是execute方法依赖于Servlet API,这使得Action的测试要依赖于Web容器。为了脱离Web容器测试Struts1的Action,必须借助于第三方扩展:Struts TestCase,该扩展下包含了系列的Mock对象(模拟了HttpServetRequest和HttpServletResponse对象),从而可以脱离Web容器测试Struts1的Action类。Struts2 Action可以通过初始化、设置属性、调用方法来测试。21. 封装请求参数的对比:Struts1使用ActionForm对象封装用户的请求参数,所有的ActionForm必须继承一个基类:ActionForm。普通的JavaBean不能用作ActionForm,因此,开发者必须创建大量的ActionForm类封装用户请求参数。虽然Struts1提供了动态ActionForm来简化ActionForm的开发,但依然需要在配置文件中定义ActionForm;Struts2直接使用Action属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的烦琐,实际上,这些属性还可以是包含子属性的Rich对象类型。如果开发者依然怀念Struts1 ActionForm的模式,Struts2提供了ModelDriven模式,可以让开发者使用单独的Model对象来封装用户请求参数,但该Model对象无需继承任何Struts2基类,是一个POJO,从而降低了代码污染。22. 表达式语言方面的对比:Struts1整合了JSTL,因此可以使用JSTL表达式语言。这种表达式语言有基本对象图遍历,但在对集合和索引属性的支持上则功能不强;Struts2可以使用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(Object Graph Notation Lang

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论