Struts是一个非常优秀的MVC框架,是应用最广泛的 Java Web 应用开发框架。
基于Struts开发的应用有3类组件构成:控制器组件、模型组件和视图组件。
控制器组件包括 ActionServlet (Struts的核心控制器) 还包括自定义的Action类(继承org.apache.struts.action.Action )代表用户的一个操作。
Struts框架主要是基于配置文件的,它最主要的配置文件为 struts-config.xml (Struts 2.0以前的版本)下面主要介绍如何在项目中使用Struts 和 Struts 的配置:
使用Struts框架,首先要导入Struts库,可以到Struts的官方网站下载, 也可以直接在MyEclipse来快速添加(在项目上单击右键 选MyEclipse –> Add Struts Capabilities),然后创建Struts的配置文件 struts-config.xml 如果是用后一种方式加入的Struts库,那么MyEclipse会自动生成一个 strtus-config.xml 配置文件 。 接下来我们要在 we.xml 中配置Struts的核心控制器 ActionServlet 。
web.xml 中增加的配置如下:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
配置详解: <init-param>节点用于配置ActionServlet的初始化参数 ,这里将Struts的配置文件的路径作为参数,让程序创建ActionServlet时加载Strtus的配置文件 struts-config.xml ; <load-on-startup>节点用于配置ActionServlet的加载顺序,值为0表示服务器启动时就加载,并且加载顺序为第一。 <url-pattern>节点配置 ActionServlet 的访问路径, 值 *.action 表示 凡是以.action结尾的请求都交由Struts处理。接下来是自定义Action的配置,自定义Action分为普通Action(只能处理用户的某个特定的请求的Action) 和 DispatcherAction(可以处理多种请求的Action) 。 自定义Action的配置包括ActionForm的配置和Action的配置。 首先展示普通Action的配置。 例如这个普通Action的类名为 LoginAction 对应的 ActionForm为 LoginForm 。 则在 struts-config.xml中的配置如下:
<struts-config>
<!-- FormBean 的配置 -->
<form-beans>
<form-bean name=”loginForm” type=”com.kj.struts.form.LoginForm” />
</form-beans>
<!--Action 的配置 –>
<action-mappings>
<action name=”loginForm” input="login.jsp" path=”/login” scope=”request”
type=”com.kj.struts.action.LoginAction” >
<forward name=”input” path=”/login.jsp” />
<forward name=”welcom” path=”/welcome.jsp” />
</action>
</action-mappings>
</struts-config>配置详解: <form-bean>节点用于配置FormBean 主要属性有 name 和 type , 在<action-mappings>节点内配置所有的自定义Action <Action>节点用于配置每个Action的详细信息. 属性 name 用于指定Action使用的ActionForm的引用名(即form-bean 的name属性的值); 属性input 指定ActionForm的 validate 方法验证出错时转向的页面; 属性 path 指定action的访问路径; 属性 scope 用于设置action对应的ActionForm的作用范围; 属性 type 用于指定此action对应的类; <forward>节点用于配置action的跳转路径,可以配置多个,对应action处理的不同结果。
DispatcherAction 在 struts-config.xml 中的配置如下:
<struts-config>
<!-- FormBean 的配置 -->
<form-beans>
<form-bean name=”loginForm” type=”com.kj.struts.form.LoginForm” />
</form-beans>
<!--Action 的配置 –>
<action-mappings>
<action name=”loginForm” parameter=”login” path=”/login” scope=”request”
type=”com.kj.struts.action.LoginDispatcherAction” >
<forward name=”input” path=”/login.jsp” />
<forward name=”welcom” path=”/welcome.jsp” />
</action>
</action-mappings>
</struts-config>配置详解: DispatcherAction的配置与普通Action基本一致,唯一的不同是 DispatcherAction 要多配置一个属性 parameter 用于指示DispatcherAction 执行哪个方法。
每创建一个新的自定义Action 就要创建相应的 ActionForm 类 而且如果ActionFrom要获取的值太多,就要定义很多的属性,很麻烦。Struts提供了动态 FormBean的配置,使得所有FormBean的属性都可以在配置form-bean时配置完成,不必再编写相应的FormBean类了。 动态Form( DynaActionForm) 的配置如下:
<struts-config>
<!-- FormBean 的配置 -->
<form-beans>
<form-bean name=”loginForm” type=”org.apache.struts.action.DynaActionForm”>
<form-property name=”username” type=”java.lang.String” />
<form-property name=”password” type=”java.lang.String” />
</form-bean>
</form-beans>
<!--Action 的配置 –>
<action-mappings>
</action-mappings>
</struts-config>配置详解: 动态ActionForm (DynaActionForm) 与普通ActionForm 配置的区别有三点: 1.type属性的值为固定的 org.apache.struts.action.DynaActionForm Struts提供的动态ActionForm类。 2. ActionFrom的属性直接在配置文件里配置,使用<form-property>节点配置ActionForm的属性。 3. 动态ActionForm 在Action中使用时和ActionForm有所不同,首先要用 DynaActionForm dynaForm = (DynaActionForm)from; 将form对象转成DynaActionForm类型, 然后使用 dynaForm.getString(“username”); 的方式取值, 如何属性的类型是其他类型 可以使用 Integer id = (Integer)dynaForm.get(“id”); 的方式取值, 注意get方法取出的值是Object类型,必须转型。
动态ActionForm虽然不需要定义ActionForm类,但是还是要在 struts-config.xml 中配置相应的属性,配置依然很复杂,所以应用很少。 更好的解决方式是在ActionForm中 定义实体实体对象属性, 用实体对象来封装众多的属性, 这样做就不需要设置很多的属性了,使用的时候也只需要将页面 input 的name属性设置为 对象属性名.属性名 (例如 <input type=”text” name=”user.username” />)即可。
注意: 使用实体类作为ActionForm的属性时, 定义该属性一定要使用new User() 的方式创建实例,否则使用时会报 “未将对象引用设置到对象实例” 的错误 , 实体属性定义方式如下:
private User user = new User();
Struts框架配置详解
最新推荐文章于 2018-06-26 20:26:53 发布