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>