struts1第二课.docx
《struts1第二课.docx》由会员分享,可在线阅读,更多相关《struts1第二课.docx(16页珍藏版)》请在冰豆网上搜索。
struts1第二课
第一讲Struts开发步骤
一、新建web工程,引入struts1.2的组件包
二、打开struts-config.xml文件,通过设计视图创建实体类(FormBean类),
新建formBean如下图所示:
点add按钮加入属性
三、在struts-config.xml文件的设计视图,开始设计访问流程
1、建立自定义的Action必须继承自Action
2、当此action处理请求以后跳转的下一个路径,整个流程图如下所示:
此导航图对应的xml源代码如下:
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.2//EN""http:
//struts.apache.org/dtds/struts-config_1_2.dtd">
attribute="userForm"
input="/login.jsp"
name="userForm"
path="/check"
scope="request"
type="com.zhhlk.struts.action.CheckAction"
validate="false">
name="loginok"
path="/loginok.jsp"
contextRelative="true"/>
name="fail"
path="/fail.jsp"
contextRelative="true"/>
在login.jsp页面通过check.do提交表单数据到CheckAction进行处理,在CheckAction中需要重写execute方法,在此方法中接收用户的请求,接收到以后对请求进行处理,获取actionform对象,此ActionForm就是UserForm对象,此form对象中已经封装了用户的请求信息。
实际上就是将表单元素的值传递给了UserFrom对象。
在action的execute方法中对userfrom对象进行验证.业务代码如下:
packagecom.zhhlk.struts.action;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.struts.action.Action;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionForward;
importorg.apache.struts.action.ActionMapping;
importcom.zhhlk.struts.form.UserForm;
/**
*
*XDocletdefinition:
*@struts.actionpath="/check"name="userForm"input="/login.jsp"scope="request"
*/
publicclassCheckActionextendsAction{
/**
*Methodexecute
*@parammapping
*@paramform
*@paramrequest
*@paramresponse
*@returnActionForward
*/
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse){
UserFormuserForm=(UserForm)form;//TODOAuto-generatedmethodstub
if(userForm==null){
returnmapping.findForward("fail");
}
if(userForm.getUname()!
=null&&!
userForm.getUname().equals("")&&userForm.getPasswd()!
=null&&!
userForm.getPasswd().equals("")){
returnmapping.findForward("loginok");
}
returnmapping.findForward("fail");
}
}
在execute方法中传递了四个参数,四个参数的意义如下:
(1)、ActionMapping-实现跳转到指定的路径,对应的是struts-config.xml文件的节点,此对象由struts容器创建,并且调用findForward方法跳转到指定的路径。
(2)ActionForm—>实体类对象,由struts容器创建,用于封装jsp页面提交的表单元素或请求的信息。
ActionForm当中的属性名称必须要与jsp页面的表单元素的名称保持一致(一样),且属性要大于或等于表单元素的个数,继承自ActionForm类.
(3)HttpServletRequest-请求对象,由web容器创建
(4)HttpServletResponse响应对象,由web容器创建
四、编写jsp页面,页面的规范如下:
<%@pagelanguage="java"pageEncoding="UTF-8"%>
<%@tagliburi="http:
//struts.apache.org/tags-bean"prefix="bean"%>
<%@tagliburi="http:
//struts.apache.org/tags-html"prefix="html"%>
<%@tagliburi="http:
//struts.apache.org/tags-logic"prefix="logic"%>
<%@tagliburi="http:
//struts.apache.org/tags-tiles"prefix="tiles"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
htmllang="true">
base/>
login.jsp
登陆
formaction="check.do"method="post">
账号:
textproperty="uname"/>
密码:
passwordproperty="passwd"/>
submitvalue="提交"/>
resetvalue="重置"/>
form>
html>
在jsp页面使用了struts的html标签以后,form>标签中不能出现name属性,因为在struts的html标签中name属性表示作用域的名称。
Form表单的名称与action节点的name属性名称一致。
第二部分动态的(DynaActionForm)ActionForm
一、在当前的web工程中创建实体类UserBean类(此web工程已经引入了Struts组件包)
二、将创建的UserBean类定义为动态的FormBean的属性
具体的配置代码如下:
Struts-config.xml文件中的导航如下:
Struts-config.xml文件的配置导航源码如下:
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.2//EN""http:
//struts.apache.org/dtds/struts-config_1_2.dtd">
attribute="userForm"
input="/login.jsp"
name="userForm"
path="/check"
scope="request"
type="com.zhhlk.struts.action.CheckAction"
validate="false">
name="loginok"
path="/loginok.jsp"
contextRelative="true"/>
name="fail"
path="/fail.jsp"
contextRelative="true"/>
在action中对动态formbean的对象处理如下:
/*
*GeneratedbyMyEclipseStruts
*Templatepath:
templates/java/JavaClass.vtl
*/
packagecom.zhhlk.struts.action;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.struts.action.Action;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionForward;
importorg.apache.struts.action.ActionMapping;
importorg.apache.struts.action.DynaActionForm;
importcom.bean.UserBean;
publicclassCheckActionextendsAction{
/**
*Methodexecute
*@parammapping
*@paramform
*@paramrequest
*@paramresponse
*@returnActionForward
*/
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse){
DynaActionFormuserForm=(DynaActionForm)form;//TODOAuto-generatedmethodstub
//通过DynaActionForm对象获取UserBean对象的属性
UserBeanub=(UserBean)userForm.get("ubean");
if(ub==null){
returnmapping.findForward("fail");
}
if(ub.getUname()!
=null&&ub.getPasswd()!
=null&&!
ub.getUname().equals("")&&!
ub.getPasswd().equals("")){
returnmapping.findForward("loginok");
}
returnnull;
}
}
通过UserBeanub=(UserBean)userForm.get("ubean");获取UserBean对象,ubean参数表示配置在struts-config.xml文件中:
的name属性
三、在jsp页面对动态form中的ubean属性进行访问
<%@pagelanguage="java"pageEncoding="UTF-8"%>
<%@tagliburi="http:
//struts.apache.org/tags-bean"prefix="bean"%>
<%@tagliburi="http:
//struts.apache.org/tags-html"prefix="html"%>
<%@tagliburi="http:
//struts.apache.org/tags-logic"prefix="logic"%>
<%@tagliburi="http:
//struts.apache.org/tags-tiles"prefix="tiles"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
htmllang="true">
base/>
login.jsp
--
-->
用户登录
formaction="check.do"method="post">
账号:
textproperty="ubean.uname"/>
密码:
passwordproperty="ubean.passwd"/>
submitvalue="提交"/>resetvalue="重置"/>
form>
html>
(1)使用struts的html标签获取动态formBean中的对象属性需要做以下的规范(login.jsp页面):
textproperty="ubean.uname"/>通过子属性ubean设置属性uname的值.
Ubean是动态form(UserForm)的子属性。
(2)在action的execute方法中通过动态Formbean对象的get(“子属性名”),获取对象.
UserBeanub=(UserBean)userForm.get("ubean");
(3)向动态的formBean中设置属性采用以下方式(action中):
userForm.set("ubean",ub);
(4)在jsp页面访问动态formBean中的对象属性如下(loginok.jsp):
writename="userForm"property="ubean.uname"/>
测试结果如下: