1、 谈谈你对Struts 2的理解?
Struts 2是实现MVC模式的Web层框架。基于WebWork核心,并具有Struts1的一些优点。主要实现的是控制器部分的功能,可以和多种页面技术(完成视图功能)配合使用。
2、 在MVC中控制器的主要功能有哪些?
协调输入、输出和模型之间的关系。从输入界面获取输入信息(通过request.getParameter方法),根据请求选择调用模型的业务方法,执行完之后,如果需要把结果传递给输出界面,可以把信息保存在request中或者session中(setAttribute方法),根据调用模型的结果,选择界面对用户进行响应。
3、 Struts2是如何实现MVC的控制器呢?
Struts2的控制器包括中心控制器、struts.xml和用户编写的Action。中心控制器是框架提供的,只需要在web.xml进行配置一次即可。用户在实现功能的时候,需要编写每个功能对应的Action(多个功能可以对应一个Action),然后在struts.xml中进行配置。
如何实现MVC的控制其功能:
从输入界面接收输入信息:该功能由框架完成,用户需要做的是Action中编写和输入界面中输入元素对应的属性,并提供set方法。框架从request中获取输入值,然后通过Action的set方法对属性赋值。
选择调用业务方法,每个业务方法通常对应一个Action(通常是Action的一个方法),界面发送的请求与具体的Action的对应关系是在struts.xml中进行配置的。
把值从控制器传递到界面,用户需要在Action提供相应的属性,并且提供get方法,具体的传值过程是由框架完成的。
如何响应?在Action中调用业务方法之后,方法返回一个表示输出界面的字符串,在配置文件struts.xml中配置表示界面的字符串具体对应哪个输出界面。具体的响应过程由框架来完成。
4、 具体使用Struts2框架开发应用的过程?
第一步:创建Web工程
第二步:引入Struts的类库,核心的类库有ognl.jar、freemarker.jar、struts2-core.jar、webwork.jar,common-logging,这些类库最终都应该在web-inf/lib下面。
第三步:在web.xml中声明中心控制器。
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
通过这样的配置,所有的请求都会发送给中心控制器。
第四步:在工程中创建struts2的配置文件struts.xml。配置我们编写的每个Action,还有请求与Action对应关系,执行结果(字符串)与响应界面的对应关系。一般从其他地方拷贝,不要自己写。
第五步:编写Action,配置Action。在开发过程中主要是这一步。
5、 如何编写Action
Action类可以是普通的类,可以是实现Action接口的类,可以是继承ActionSupport的类。Action接口是execute方法和几个常量,通常不使用。ActionSupport实现了Action接口,并且封装了对国际化和验证的支持,如果项目需要使用验证和国际化等功能,可以继承该类。
Action类中的方法(控制方法),方法的返回值是字符串,是逻辑名字,表示某个输出界面。方法没有参数。对应每个请求都应该有这样一个方法。
为了获取输入信息,需要定义与输入元素名字相同的成员变量,并提供set方法。为了输出,需要编写成员变量来表示这些输出信息(在控制方法中对成员变量赋值),并提供get方法供框架调用。
6、 如何配置Action
在struts.xml中配置。主要包括两部分:请求与具体的Action的方法的对应关系;Action中的控制方法返回的字符串与具体的响应界面的对应关系。
请求与Action方法的对应关系:
² <action name="login" class="action.UserAction" method="login">
name指出请求的名字,class指出Action类的名字,method指出方法的名字
² <action name="login" class="action.UserAction">
如果没有指定method方法,默认找Action中的execute方法
² 也可以在请求中指定方法的名字
login!login.action,“!”之前是请求的名字,“!”之后是方法的名字,这样在配置的时候就可以不指定方法的名字。
执行结果的配置:
<result name="success">/success.jsp</result>