您的位置:首页 > 编程语言 > Java开发

struts学习日志

2008-05-05 01:37 316 查看
struts学习日志

--struts-config.xml配置文件

1,data-sourses 元素
<data-sources>
<data-source>
<set-property property="autoCommit" value="true"/>
<set-property property="driverClassName" value="org.gjt.mm.mysql.Driver"/>
<set-property property="url" value="jdbc:mysql://localhost:3306/databasename">
<set-property property="maxCount" value="10"/>
<set-property property="minCount" value="1"/>
<set-property property="user" value="root"/>
<set-property property="password" value="root"/>
........... 0->N
</data-source>
</data-sources>
在data-surces中可以有多个data-source元素的配置,<set-property>采用键值对的形式设置
(key

(value


property ---- value

2.form-beans 元素
<form-beans>
<bean name="formbean类名称" type="对应packageName的全限定名">
................. 0->N
<form-beans>

--DynaActionForm 使用
在配置文件struts-config.xml中配置:
<form-beans>
<bean name="SimpleDanyActionForm" type="org.apache.struts.action.DynaActionForm">
<set-property name="sex" type="java.lang.String"/>
<set-property name="num" type="java.lang.Integer"/>
.............

</bean>
</form-beans>

在action中调用
public ActionForm excute(ActionForm form,ActionMapping map,HttpServletRequest request,HttpServletResponse response){

//在给DanyActionForm赋值前,必须将form强制转换成DynaActionForm
DynaActionForm sampleActionForm = (DynaActionForm)form;
//分别取出requesgt域中相应的值
String sex =(String)request.getParameter("sex");
int num=Integer.parseInt(request.getParameter("num"));
................. 0->N

//设置sampleActionFormBean 设置动态FormBean的属性
sampleActionForm.set("sex",sex);
sampleActionForm.Set("num",num);
.................. 0->N
}

3. global-exceptions 元素 设置全局异常
<global-exceptions>
<exception key=""
type=""
scope=""
path=""/>
..................... 0->N
</global-exceptions>

4. global-forwards 元素 设置全局转发
<global-forwards>
<forward name="" path="">
<global-forwards>

5. action-mappings 元素 设置请求表单中action到路径的映射关系

<action-mappings>
<action path=""
name=""
attribute=""
validate=""
parameter="">

<forward name="" path=""/>
........ 0->N
<exception key="" type=""/>
......... 0->N
</action>
.......... 0->N
<action-mappings>

6. control 元素
<control contentType="text/html;charSet=UTF-8"
locale="true"
processorClass="MyRequestProcessor"/>

其中常用的属性有: locale , contentType ,bufferSize , tempDir , nochache
className属性 : 指定了和<controller>元素相对应的配置类,默认的是 org.apache.struts.config.ControllerConfig;
processorClass : 指定了负责处理请求的java类的完整类名,默认的是 org.apache.struts.action.RequestProcessor类

7. message-resources 元素 设置资源文件的配置路径信息

<message-resources key="" ##说明被调用的文件名
parameter="" ##指定文件的具体路径
/>

8.plugin 元素

<plugin className="org.apache.struts.tiles.TilesPlugin">
<set-property property="difinitions-config" value="/WEB-INF/tiles-defs.xml"/>
<set-property property="difinitions-debug" vlaue="2"/>
<set-property property="difinitions-parser-details" value="2"/>
<set-property property="difinitions-parser-validate" value="true"/>
</plugin>

--对于验证 validate
方法:
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
//通常从request域中取出数据,进行验证
//假设业务逻辑方法
ActionErrors errors = new AcitonErrors();
String loginName= (String)request.getparamester("loginName");
if(StringUtil.isEmpty(loginName)){
//loginName.error 指在配置文件中定义的键值key
ActionError error = new ActionError("loginName.error");
errors.add("loginNameError",error);
//使用方法 saveErrors()存储ActionErrors对象到request域,可以在相应的request域中取到
saveErrors(request,error);

return mapping.findForword("failure");

}

--对于 ActionForm 的复位
方法;
public void reset(ActionMapping mapping ,HttpServletRequest request){
loginName="";
}

说明:reset方法对于scope范围有讲究,
-- 当scope=reuqest时,每次调用ActionForm时都会产生一个新的ActionForm的实例
-- 当scope=session时,由于生命周期中本ActionForm Bean 只能被创建一次,其他的调用也会去使用第一次所创建的ActionForm Bean
当有时候要对部分的变量值进行修改,在"scope=session"时,就得用reset的方法来解决。

--actionMapping org.apache.struts.atcion.ActionMapping
封装了<action> 元素中定义的所有信息,在actionMapping类中所有的action元素的属性都会被写入。
执行actionMapping 的findForward()方法:
public ActionForward findForward(){};
pubilc ActionForward[] findForward(){};
public ActionForward findForward(ActionForward forward){}

--ActionServlet org.apache.struts.action.ActionServlet 继承于javax.servlet.http.HttpServlet类

在处理请求的流程:
1. 为到来的请求找到相应的URI;
2. 把URI映射到适当的ActionMapping
3. 如果找到相应的ActionForm声明,装载产生相应的实例
4. 如果找到相应的Action则产生实例,调用适当的excute方法,并为之传递ActionMapping,ActionForm,HttpServletRequest,HttpServletResponse 对象
5. 接受excute方法返回的ActionForward,转发到相应的源(该源由相应的ActionForward指定)

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>
............. 0->N
<load-on-startup>1<load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

--struts框架的控制器
--由ActionServlet(struts的servlet),RequestProcessor(请求处理),ModuleConfig(配置存储信息),Action,ActionForm(action的转发) 5个主要对象组成
##ActionServlet中主要方法
public void doGet(HttpServletRequest request,HttpServletResponse response)throw IOExcepetion,ServletException{
process(request,response);
}

public void doPostt(HttpServletRequest request,HttpServletResponse response)throw IOExcepetion,ServletException{
process(request,response);
}
public void process(HttpServletRequest request,HttpServletResponse response)throw IOExcepetion,ServletException{
//利用requestUtil工具包中的selectModule方法,根据request域中参数选择modulcConfig对象
RequestUtil.selectModule(request,getServletContext());
//利用getRequestProcessor()方法得到requestProcessor对象,再调用process方法整个工作流程
getRequestProcessor(getModuleConfig(request)).process(request,response);
}

--validation-rule.xml 配置
<!DOCTYPE form-validation PUBLIC "-//Apache Software Foundatin//DTD Commons Validate Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1.0_dtd">
<form-validation>
<global>
<validator name="required"
className="org.apache.struts.validator.FieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.validator.ValidatorAction,
org.apache.validator.Field,
org.apache.validator.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="errors.required"/>
<validator name="Integer"
className="org.apache.struts.validator.FieldChecks"
method="validateInteger"
methodParams="java.lang.Object,
org.apache.validator.ValidatorAction,
org.apache.validator.Field,
org.apache.validator.ActionErros,
javax.servlet,http.HttpServletRequest"
msg="errors.integer"/>
<validator name="range"
className="org.apache.struts.validator.FieldChecks"
method="validateRequest"
methodParams="java.lang.Object,
org.apache.validator.ValidatorAction,
org.apache.validator.Field,
org.apache.validator.ActionErros,
javax.servlet,http.HttpServletRequest"
msg="errors.range"/>
</global>
</form-validation>

--validation.xml
<?xml vesion="1.0" encoding="UTF-8"?>
<!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation/DTD Commons Validator Rules Configuration 1.0//EN"
"validator_1.0_dtd">
<form-validation>
<formset>
<form name="checkForm">
<field property="userName" depends="required">
<arg0 key="userName"/>
</fiedld>
<field property="passWord" depends="required,maxlength,minlength

">
<arg0 key="passWord"/>
<var>
<var-name>maxlength</var-name>
<var-value>12</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>6<var-value>
</var>
</field>

<field property="age" depends="range">
<arg0="age"/>
<arg1="18" resource="false"/>
<arg2="30" resource="false"/>
<var>
<var-name>min</var-name>
<var-value>18</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>30</var=value>
</var>
</field>

<field property="email" depends="eamil">
<agr0 key="email"/>
</field>
</form>
<formset>
</form-validation>

文章引用自:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: