用Struts设计实例
一、建立普通的Web项目,为项目添加Struts支持
添加Struts支持后所做的工作:
⑴ 展开Struts1.2 Libraries目录查看Struts的包结构,与Struts的组件结构进行对照
⑵ 查看web.xml文件,明确下面的问题:
u <servlet>元素定义了Servlet实例—一个名为action的Servlet。其中有一项比较重要的初始化参数config,指明了Struts的配置文件的名称和所在的位置;
u <servlet-mapping>元素建立Servlet映射。这个Servlet处理的是URL以.do为结尾的用户请求。
凡是以“*.do”形式发送到Web项目中的请求,全部调用action所代表的ActionServlet处理,所以我们把ActionServlet称为Struts中的控制器。
⑶ 查看struts-config.xml文件。
此时的配置信息还没有生成,随着Struts其他核心组件的创建,这些配置会随之变化。
二、建立Struts核心组件—JSP页面
建立JSP组件后所做的工作:
⑴ 查看项目结构和struts-config.xml文件(尤其Design方式)
⑵ 补充JSP文件的代码:
input.jsp文件:
关键点:① 形成符合要求的界面形式;
② 在提交表单时,action参数的设置值是“input.do”。
display.jsp文件:
关键点:通过request对象取出要显示的数据。
三、建立Struts核心组件—ActionForm
设计窗口中参数的含义:
Name:ActionForm bean实例的名称,Action组件会初始化该实例,用于接收客户端录入的图书信息。
Form type:ActionForm组件的类名。图中将类存放在form包里,便于管理和维护。
Optional Details:用于设置ActionForm类的细节,比如该类中需要定义的各个属性。关于图书的信息有三个:图书类型、书名和作者,所以ActionForm bean中应该有三个属性对应这三个信息。
建立ActionForm组件后所做的工作:
⑴ 查看struts-config.xml文件,分析<form-beans>元素的定义
⑵ 查看InputActionForm.java文件的内容,分析bean的设计结构,明确它的作用和意义:
Action对象通过这个类的实例获取表单中关于图书类别、书名和作者的数据。
reset()方法的重置作用和validate()方法的数据验证作用。
四、建立Struts核心组件—Action
Action组件的工作流程:
⑴ 接受控制器的调遣:当客户端提交了图书信息后,ActionServlet也需要将具体的任务交给一个指定的Action组件;
⑵ Action组件会通过ActionForm组件对象获取图书信息(没有Form对象时,会自动创建并初始化)
⑶ 在特定的方法中<execute()方法>,让用户编程完成具体的处理。
设计窗口中参数的含义:
Path:请求路径,以“/”开头,但不包括“*.do”后缀。与视图中的请求相对应。图中的情况说明:凡是以“input.do”发出的请求均由这个Action组件来处理。
Type:要建立的Action类的类名,这里起名为InputAction,同时又把它放在action包里。
Optional Details:配置Action组件类的各个细节,如:Form bean、参数、方法、Forwards组件、异常等。
FormBean选项卡的设计:
Name:ActionForm组件的对象名,体现了ActionForm组件与Action组件的绑定关系。Action组件会通过它接收向本Action发送的关于图书信息的表单数据。当输入不方便时,可以通过点击“Browse”按钮,选择已经声明了的Form bean对象。
Scope:ActionForm Bean的有效使用范围。
Input Source:指向一个视图。当执行了ActionForm的validate()方法时,如果返回了错误信息,那么Struts将会返回到这个input属性所指定的页面中。
五、建立Struts核心组件—Forward
设计窗口中参数的含义:
Name:Forward组件的名称,即要转发的名称,这里为result,设计者可以根据见名之意的原则起名。
Path:转发的目的页面,可以通过“Browse”选择前面已经建立好的display.jsp页面。
这样就建立了针对InputAction这个组件的跳转功能:Action组件可以依据Forward的名称(result)将ActionForward对象返回到Servlet中,控制器根据ActionForward的名称找到其对应的URL地址(display.jsp的URL值),并把控制转移到该URL。
六、观察结果,补充代码
⑴ Struts项目的结构基本上完整了,发生的变化主要有两个:
在src目录下生成了action包,里面存放着Action组件对应的类文件InputAction.java;
在struts-config.xml文件的视图显示区可以看到各组件的关系图。
⑵ struts-config.xml文件的内容变化
⑶ 补充InputAction.java文件的代码
① 通过Form类中定义的getXXX()方法获取表单中的图书信息
② 将信息存储到request对象里,存储的关键字名称与display.jsp文件相呼应
③ 依据Forward组件的名称(result),返回到Servlet中