您好,欢迎访问三七文档
1.Struts中DispatchAction和Action类有什么不同?DispatchAction是Struts包含的另一个能大量节省开发时间的Action类。与其它Action类仅提供单个execute()方法实现单个业务不同,DispatchAction允许你在单个Action类中编写多个与业务相关的方法。这样可以减少Action类的数量,并且把相关的业务方法集合在一起使得维护起来更容易。要使用DispatchAction的功能,需要自己创建一个类,通过继承抽象的DispatchAction得到。对每个要提供的业务方法必须有特定的方法signature。例如,我们想要提供一个方法来实现对购物车添加商品清单,创建了一个类ShoppingCartDispatchAction提供以下的方法:publicActionForwardaddItem(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){throwsException;}那么,这个类很可能还需要一个deleteItem()方法从客户的购物车中删除商品清单,还有clearCart()方法清除购物车等等。这时我们就可以把这些方法集合在单个Action类,不用为每个方法都提供一个Action类。在调用ShoppingCartDispatchAction里的某个方法时,只需在URL中提供方法名作为参数值。就是说,调用addItem()方法的URL看起来可能类似于:=addItem其中method参数指定ShoppingCartDispatchAction中要调用的方法。参数的名称可以任意配置,这里使用的”method”只是一个例子。参数的名称可以在Struts配置文件中自行设定。2.Struts的控制器如何知道什么样的信息转发到什么样的Action类呢?在struts中,控制器信息转发的配置映射信息是存储在特定的XML文件(比如struts-config.xml)中的。这些配置信息在系统启动的时候被读入内存,供strutsframework在运行期间使用。在内存中,每一个action元素都与org.apache.struts.action.ActionMapping类的一个实例对应。当可以通过/logonAction.do(此处假设配置的控制器映射为*.do)提交请求信息的时候,控制器将信息委托com.test.LogonAction处理。调用LogonAction实例的execute()方法。同时将Mapping实例和所对应的LogonFormBean信息传入。其中name=LogonForm,使用的form-bean元素所声明的ActionFormBean。3.介绍一下Struts的Action类ActionServlet把全部提交的请求都被控制器委托到RequestProcessor对象。RequestProcessor使用struts-config.xml文件检查请求URI找到动作Action标示符。一个Action类的角色,就像客户请求动作和业务逻辑处理之间的一个适配器(Adaptor),其功能就是将请求与业务逻辑分开。这样的分离,使得客户请求和Action类之间可以有多个点对点的映射。而且Action类通常还提供了其它的辅助功能,比如:认证(authorization)、日志(logging)和数据验证(validation)。Action最为常用的是execute()方法当Controller收到客户的请求的时候,在将请求转移到一个Action实例时,如果这个实例不存在,控制器会首先创建,然后会调用这个Action实例的execute()方法。StrutsFramework为应用系统中的每一个Action类只创建一个实例。因为所有的用户都使用这一个实例,所以你必须确定你的Action类运行在一个多线程的环境中。4.介绍一下Struts的ActionServlet类ActionServlet继承自javax.servlet.http.HttpServlet类,其在Strutsframework中扮演的角色是中心控制器。它提供一个中心位置来处理全部的终端请求。控制器ActionServlet主要负责将HTTP的客户请求信息组装后,根据配置文件的指定描述,转发到适当的处理器。按照Servelt的标准,所有得Servlet必须在web配置文件(web.xml)声明。同样,ActoinServlet必须在WebApplication配置文件(web.xml)中描述,有关配置信息如下。servletservlet-nameaction/servlet-nameservlet-classorg.apache.struts.action.ActionServlet/servlet-class/servlet全部的请求URI以*.do的模式存在并映射到这个servlet,其配置如下:servlet-mappingservlet-nameaction/servlet-nameurl-pattern*.do/url-pattern/servlet-mapping一个该模式的请求URI符合如下格式:中心控制器为所有的表示层请求提供了一个集中的访问点。这个控制器提供的抽象概念减轻了开发者建立公共应用系统服务的困难,如管理视图、会话及表单数据。它也提供一个通用机制如错误及异常处理,导航,国际化,数据验证,数据转换等。当用户向服务器端提交请求的时候,实际上信息是首先发送到控制器ActionServlet,一旦控制器获得了请求,其就会将请求信息传交给一些辅助类(helpclasses)处理。这些辅助类知道如何去处理与请求信息所对应的业务操作。在Struts中,这个辅助类就是org.apache.struts.action.Action。通常开发者需要自己继承Aciton类,从而实现自己的Action实例。5.Struts中最核心的类和包有哪些?@org.apache.struts.action基本上,控制整个strutsframework的运行的核心类、组件都在这个包中,比如我们上面提到的控制器ActionServlet。已经Action,ActionForm,ActionMapping等等。struts1.1比1.0多了DynaActionForm类。增加了动态扩展生成FormBean功能@org.apache.struts.actions这个包是主要作用是提供客户的http请求和业务逻辑处理之间的特定适配器转换功能,而1.0版本中的部分动态增删FromBean的类,也在struts1.1中被Action包的DynaActionForm组件所取代@org.apache.struts.config提供对配置文件struts-config.xml元素的映射。这也是sturts1.1中新增的功能@org.apache.struts.utilStrtuts为了更好支持webapplication的应用,体统了一个些常用服务的支持,比如ConnectionPool和MessageSource。详细信息请参考@org.apache.struts.taglib这不是一个包,而是是一个客户标签类的集合。下面包括BeanTags,HTMLTags,LogicTags,NestedTags,TemplateTags这几个用于构建用户界面的标签类。@org.apache.struts.validatorStruts1.1framework中增加了validatorframework,用于动态的配置from表单的验证。6.如何配置spring+struts?在struts-config.xml加入一个插件,通过它加载applicationContext.xml在struts-config.xml修改action-mapping标记,具体action交给了DelegateActionProxy通过DelegateActionProxy进入一spring的环境。在spring的applicationContext.xml加入beanname=”/login”class=”singleton=”false”/7.Spring和Struts的区别?strusts:是一种基于MVC模式的一个web层的处理。Spring:提供了通用的服务,ioc/diaop,关心的不仅仅web层,应当j2ee整体的一个服务,可以很容易融合不同的技术strutshibernateibatisejbremotespringJDBCspringMVC8.如何在struts中配置数据源在,什么文件?用什么标签?如何取出DataSource?Struts-config.xmldata-sourcesdata-sourcekey=”data”type=”org.apache.commons.dbcp.BasicDataSource”set-propertyproperty=”driverClassName”value=”com.microsoft.jdbc.sqlserver.SQLServerDriver”/set-propertyproperty=”url”value=”jdbc:microsoft:sqlserver://localhost:1433;databaseName=t23″/set-propertyproperty=”username”value=”sa”/set-propertyproperty=”password”value=”//data-source/data-sourcesDataSourceds=(DataSource)this.getServlet().getServletContext().getAttribute(”data”);Connectioncon=ds.getConnection();9.Struts1和Struts2都有什么区别?特性Struts1.xStruts2Action类Struts1.x要求Action类要扩展自一个抽象基类。Struts1.x的一个共有的问题是面向抽象类编程而不是面向接口编程。Struts2的Action类实现了一个Action接口,连同其他接口一起来实现可选择和自定义的服务。Struts2提供一个名叫ActionSupport的基类来实现一般使用的接口。当然,Action接口不是必须的。任何使用execute方法的POJO对象可以被当作Struts2的Action对象来使用。线程模型Struts1.xAction类是单例类,因为只有一个实例来控制所有的请求。单例类策略造成了一定的限制,并且给开发带来了额外的烦恼。Action资源必须是线程安全或者同步的。Struts2Action对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet容器给每一个请求产生许多丟弃的对象,并且不会导致性能和垃圾回收问题)。Servlet依赖Struts1.x的Action类依赖于servletAPI,当Action被调用时,以HttpServletRequest和HttpServletResponse作为参数传给execute方法。Struts2的Action和容器无关。Servlet上下文被表现为简单
本文标题:Struts面试题
链接地址:https://www.777doc.com/doc-2850813 .html