|
1.给出一个struts-config 配置文件中一些配置信息,问在action中如何跳转到action-mapping中forward所指向jsp。
struts-config 配置文件类似:
<action-mapping>
<action path=""
name=""
validate=""
/>
<forward name="aaa" path="a.jsp"/>
</action-mapping>
这样的题需要假设一些东西出来,这样吧,还是举出一个例子说明一下吧。
<action path="/main" -->在JSP中指向的跳转路径
type="jp.co.xx.yy.common.login.LoginAction" -->main路径对应的Action类
name="WelcomeForm" -->关联到的FormBean
scope="request"> -->作用域为request
<forward name="success" path="/menu.do" /> -->如果成功了转向menu.do路径
<forward name="fail" path="/login.do" /> -->如果失败了转向login.do路径
</action>
2.请说一下MVC结构中M,V,C都代表什么?请说出B/S的三层结构各层的职责?
又是一道框架题,看来一定要把框架的基础知识掌握好啊。
V->是View,代表视图层;C->是Controller,代表控制层;M->是Model,代表模型层。
视图层负责画面的表示,而控制层负责页面的转移控制,模型层负责数据的处理。这样说好像有些太简单了吧?详细如下:
MVC(Model-View-Controller)应用程序结构被用来分析分布式应用程序的特征。这种抽象结构能有助于将应用程序分割成若干逻辑部件,使程序设计变得更加容易。
MVC结构提供了一种按功能对各种对象进行分割的方法(这些对象是用来维护和表现数据的),其目的是为了将各对象间的耦合程度减至最小。MVC结构本来是为了将传统的输入(input)、处理(processing)、输出(output)任务运用到图形化用户交互模型中而设计的。但是,将这些概念运用于基于Web的企业级多层应用领域也是很适合的。
在MVC结构中,模型(Model)代表应用程序的数据(data)和用于控制访问和修改这些数据的业务规则(business rule)。通常模型被用来作为对现实世界中一个处理过程的软件近似,当定义一个模型时,可以采用一般的简单的建模技术。
当模型发生改变时,它会通知视(View),并且为视提供查询模型相关状态的能力。同时,它也为控制器(Controller)提供访问封装在模型内部的应用程序功能的能力。
一个视(View)用来组织模型的内容。它从模型那里获得数据并指定这些数据如何表现。当模型变化时,视负责维持数据表现的一致性。视同时将用户要求告知控制器(Controller)。
控制器(Controller)定义了应用程序的行为;它负责对来自视的用户要求进行解释,并把这些要求映射成相应的行为,这些行为由模型负责实现。在独立运行的GUI客户端,用户要求可能是一些鼠标单击或是菜单选择操作。在一个Web应用程序中,它们的表现形式可能是一些来自客户端的GET或POST的HTTP请求。模型所实现的行为包括处理业务和修改模型的状态。根据用户要求和模型行为的结果,控制器选择一个视作为对用户请求的应答。通常一组相关功能集对应一个控制器。
2.
class a{
int i = 0;
}
clas b extends a{
int i = 1;
}
类b和类a都定义了变量i,这种现象称做什么?
这种现象应该叫做重用或重载吧。不同的书籍里面好像对这样的方式叫法不同,但是意思是一样的。这应该是一道面向对象的基础题。
3.java中值作为参数传递到函数中的时候值本身不会改变,但是对象作为参数传递到函数中时本身的值会改变,请说明原因。
函数中参数的传递分为按值传递和按址传递。如果传递一个值的话(这种说法总感觉怪怪的,不是特别清楚!),这个值的修改不会
影响传递前的数值;如果传递的是一个对象的话,当然就是按址传递了,也就是这个对象的地址被传到了函数中,在函数中修改对象
话,会影响传递前对象的内容,因为你修改的是同一地址上的信息,内容当然会跟着变了。
4. 在Struts框架里怎么处理异常?
看上去是一个很简单的问题,不过要说清楚这个问题,肯定不只要有Struts的开发经验,还有对它的内部的一些机制有所了解才行。
要定制自己的异常处理机制,第一步是继承org.apache.struts.action.ExceptionHandler类。这个类有2个方法可以覆盖,一个是excute()另外一个是storeException(). 在多数情况下,只需要覆盖其中的excute()方法。
当然您可以实现任何处理,但一般而言,我们必须检查抛出的异常,并针对该类型的异常进行特定的处理。缺省的,系统的异常处理功能是创建一个出错信息,同时把请求转发到配置文件中指定的地方去。定制异常处理的一个常见的例子是处理嵌套异常。假设该异常包含有嵌套异常,这些嵌套异常又包含了其他异常,因此我们必须覆盖原来的execute()方法,对每个异常编写出错信息。
一旦你创建了自己的ExceptionHandler 类,就应该在Struts配置文件中的部分声明这个类,以便让Struts知道改用你自定义的异常处理取代缺省的异常处理。
可以配置你自己的ExceptionHandler 类是用于Action Mapping特定的部分还是所有的Action对象。如果是用于Action Mapping特定的部分就在元素中配置。如果想让这个类可用于所有的Action对象,可以在元素中指定。例如,假设我们创建了异常处理类CustomizedExceptionHandler用于所有的Action类, 元素定义如下所示:
<global-exceptions>
<exception handler="com.cavaness.storefront.CustomizedExceptionHandler"
key="global.error.message"
...
在元素中可以对很多属性进行设置。在本文中,最重要的属性莫过于handler属性, handler属性的值就是自定义的继承了ExceptionHandler类的子类的全名。假如该属性没有定义,Struts会采用自己的缺省值。当然,其他的属性也很重要,但如果想覆盖缺省的异常处理的话,handler无疑是最重要的属性。
最后必须指出的一点是,你可以有不同的异常处理类来处理不同的异常。在上面的例子中,CustomizedExceptionHandler用来处理任何java.lang.Exception的子类. 其实,你也可以定义多个异常处理类,每一个专门处理不同的异常树。下面的XML片断解释了如何配置以实现这一点。
在这里,一旦有异常抛出,struts framework将试图在配置文件中找到ExceptionHandler,如果没有找到,那么struts将沿着该异常的父类链一层层往上找直到发现匹配的为止。因此,我们可以定义一个层次型的异常处理关系结构,在配置文件中已经体现了这一点。 |
|
|