第一章 Strut2框架技术的入门
1、Struts2的是怎么产生的?
Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并,全新的Struts2框架。其全新的Struts2的体系结构与Struts1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。因此Struts2和Struts 1有着太大的变化,但是相对于WebWork,Struts2只有很小的变化。
2、Struts2的设计模式是什么?采用这种设计模式有什么好处?
MVC模式
MVC模式对于Web应用的开发无疑是一种非常先进的设计思想,无论选择
哪种语言,无论应用多复杂,它都能为理解分析应用模型提供最基本的分析方法,
为构造产品提供清晰的设计框架,为软件工程提供规范的依据。
1. 模型(Model)
Model 部分包括业务逻辑层和数据库访问层。在Java Web 应用程序中,业务逻辑层一般由JavaBean或EJB构建。Model 部分就是业务流程或状态的处理以及业务规则的制定。业务流程的处理过程对其他层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的组件。MVC并没有提供模型的设计方法,而只提供给用户应该组织管理这些模型,以便于模型的重构和提高重用性。
2. 视图(View)
在Java Web 应用程序中,View 部分一般用JSP 和HTML 构建,也可以是XHTML、XML、Applet和JavaScript。客户在View 部分提交请求,在业务逻辑层处理后,
把处理结果又返回给View部分显示出来。因此,View部分也是Java Web应程序的用户界面。一个Web项目可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理以及响应用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理由模型负责。
3. 控制(Controller)
Controller 部分由Servlet 组成。当用户请求从View 部分传过来时,Controller 把该请求发给适当的业务逻辑组件处理;请求处理完成后,又返回给Controller。Controller再把处理结果转发给适当的View 组件显示或者调用Model。因此,Controller 在视图层与业务逻辑层之间起到了桥梁作用,控制了两者之间的数据流向。
模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,使显示得到及时更新。
MVC设计模式工作流程是:
用户的请求(V)提交给控制器(C);
控制器接受到用户请求后根据用户的具体需求,调用相应的JavaBean或者EJB (M部分)来进行处理用户的请求;
控制器调用M处理完数据后,根据处理结果进行下一步的调转,如跳转到另外一个页面或者其他Servlet。
3、在MyEclipse环境下怎么配置Struts2?
在MyEclipse9.1中已经集成了Struts2的插件,直接使用就可以。新建一个项目“ch01”后,单击“MyEclipse”->“Project Capabilities”->“Add Struts Capabilities”,如图1-22所示,弹出对话框如图1-23所示的对话框,在图1-23中选择“Struts2.1”后弹出另外一个对话框,在该对话框中单击“Next”,弹出如图1-24对话框。在图1-24中可以选择Struts2类库,进行选择后点击“打开”,Struts2类库在MyEclipse项目中配置完成。配置完成后,在“ch01”项目中将自动添加一个Struts2的包“Struts2 Core Libraries”。如需使用Struts2的最新版本,可以在该包中导入。
图1-22
图1-23
4、Struts2的工作原理是什么?
图1-26
Struts2的工作原理如图1-26所示,用户请求提交后经过多个拦截器拦截后交给核心控制器FilterDispatcher处理,核心控制器读取配置文件struts.xml,根据配置文件的信息指定某一个业务控制器Action(POJO类)来处理用户数据,业务控制器调用某个业务组件进行处理,在处理的过程中可以调用其他模型组件共同完成数据的处理。Action处理完后会返回给核心控制器FilterDispatcher一个处理结果,核心控制器根据返回的处理结果读取配置文件struts.xml,根据配置文件中的配置,决定下一步跳转到哪一个页面。
5、Struts2的核心组件是什么?怎么配置?P15
1.FilterDispatcher控制器
FilterDispatcher是一个过滤器,是Struts2的核心控制器,控制着整个Web 项目中数据的流向和操作。
与Web应用程序整合的MVC框架需要web.xml配置文件。基于MVC的Web框架需要在Web应用程序中加载一个核心控制器,Struts2框架需要加载FilterDispatcher,需在web.xml中进行配置。
除了web.xml配置文件配置核心控制器FilterDispatcher外,Struts2控制数据的操作时,还需要Struts2本身的配置文件struts.xml。
2. struts.xml配置文件
在Struts2中核心的配置文件是struts.xml,用户请求提交给核心控制器FilterDispatcher后,具体由那个业务控制器Action来完成,是struts.xml 配置文件中配置的,根据配置文件struts.xml中的数据,核心控制器FilterDispatcher调用某个业务控制器Action来完成数据的处理,处理完数据后把处理结果通过其他对象返回给核心控制器FilterDispatcher,核心控制器根据struts.xml配置文件的数据,决定下一步的操作。
所以Struts2中struts.xml是核心配置文件,在控制器操作中起到关键作用。
3.Action控制器
Action是Struts2的业务控制器,可以不实现任何接口或者继承Struts2类,该Action类是一个基本的Java类,具有很高的可重用性。Action中不实现任何业务逻辑,只负责组织调度业务模型组件。
第二章 Struts2核心组件
1、struts.xml的文件结构,根标签是
struts.xml配置文件的基本结构(struts.xml)
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "https://www.sodocs.net/doc/3d15628239.html,/dtds/struts-2.0.dtd">
name="success">/login/success.jsp
2、常量如何配置?
常量配置在struts.xml中的配置格式如下:
name:指定常量(属性)的名字。
value:指定常量的值。
例如,在struts.xml文件中,配置国际化资源文件名和字符集的编码方式为“gb2312”,代码如下:
对应的配置在struts.properties文件中的配置代码如下:
struts.custom.i18n.resources=messageResource
struts.custom.i18n.encoding=gb2312
struts.custom.i18n.resources
messageResource
struts.custom.i18n.encoding
gb2312
3、包含如何配置?
包含配置在struts.xml中的配置格式如下:
flie:指定文件名,必选项。
实例struts2-portlet.war的配置文件(struts.xml)
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "https://www.sodocs.net/doc/3d15628239.html,/dtds/struts-2.0.dtd">
4、包如何配置?可以有哪些属性?哪些属性是必填的?这些属性的默认值或
一般配置值是什么?
包含配置在struts.xml中的配置格式如下:
name:指定包名,是其他包继承的时候使用的属性,必选项。
extends:指定要继承的包名,可选项。
namespace:定义包的名称空间,可选项。
abstract:指定该包是否是一个抽象包,如果该包是抽象包,包中不能定义action。
配置包时必须指定name属性,只有指定了这个属性后此包才可以被引用,extends属性用来指定该包继承于其他的包,其值必须是另外一个包的名字。通过继承,子包可以继承父包配置的Action和拦截器。上述代码定义的包名是zzf,继承的包是struts-default,struts-default包是Struts2框架的默认包。
包的配置(struts.xml)
…
…
5、Action如何配置?可以有哪些属性?哪些属性是必填的?这些属性的默认
值或一般配置值是什么?
Action配置在struts.xml中的配置格式如下:
name:指定客户端发送请求的地址映射名称,必选项。
class:指定Action对应的实现类,可选项(参考2.3.1)。
method:指定Action类中处理方法名,如get或post方法,可选项。converter:指定Action类型转换器的完整类名,可选项。
Action配置(struts.xml)
…
…
6、结果
的默认值或一般配置值是什么?
结果配置在struts.xml中的配置格式如下:
name :指定Action返回的逻辑视图,必选项。
type:指定结果类型是定向到其他文件,该文件可以是JSP文件或者Action类,可选项。
7、Action类如何编写?Action接口定义有哪些常量?ActionSupport有什么
作用?
Struts2中的Action就是一个普通的Java类(POJO),该类不要求继承任何Struts2的父类,或者实现任何Struts2的接口,但是为了简化开发可以继承ActionSupport类。Action类通常包含一个execute()普通方法,该方法并没有任何参数,只是返回类型是字符串类型。Struts2中的Action是如果获取用户HTTP请求中的参数值?下面以【例2-8】来说明获取数据的过程。代码如【例2-8】所示,该例可参考1.3.1【例1-6】,是在其基础上进行改进了一部分功能,即增加了继承ActionSupport类。
【例2-8】登录Action(LoginAction.java)
package ch02Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private String userName;
private String password;
//setter和getter方法
public String execute() throws Exception
{
if(getUserName().equals("QQ")&&getPassword().equals("123")) {
//将属性userName的值存入session,即保存name
ActionContext.getContext().getSession().
put("userName", getUserName());
return SUCCESS;
}
else
{
return INPUT;
}
}
}
Struts2类库中的Action接口(Action.java)
public interface Action {
//声明常量
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
//声明方法
public String execute() throws Exception;
}
另外,Struts2为Action接口提供一个实现类ActionSupport 。ActionSupport类是一个默认的Action实现类,该类提供了许多默认的方法,如获取国际化信息的方法、数据验证的方法、默认处理用户请求的方法等。ActionSupport类是Struts2默认的Action处理类,如果编写业务控制器类时继承了ActionSupport类,则大大简化业务控制器类的开发。
在开发Web项目时可以直接使用ActionSupport类作为业务控制器。在struts.xml中配置Action时,如果没有指定class属性(即没有提供用户的Action),系统自动使用ActionSupport类作为业务控制器Action。
8、Action访问ActionContext有哪些方式?P47
P47自己找,我发现不了。
9、Action中动态方法调用有哪两种方法?
Struts2提供两种方式实现动态方法的调用:不指定method属性和指定method 属性。
1.不指定method属性
Struts2中所谓的不指定method属性是指,表单元素的action属性并不是直接等于某个Action的名字,且form表单不需要指定method属性。不指定method 属性格式如下: