1、第四讲 Struts实例讲解,博和利初级培训 开发技能,Struts安装与使用,Step 1. 拷贝Struts.jar和所有common相关的jar包到Web应用的lib目录下。Step 2. 拷贝Struts-* .tld 到WEB-INF的目录下。Step 3. web.xml配置Step 4. struts-config.xml配置Step 5. 编写Form、Action和Jsp页面,Struts安装与使用,web.xml配置servlet-nameaction/servlet-nameservlet-classorg.apache.struts.action.ActionServl
2、et/servlet-classinit-paramparam-nameconfig/param-nameparam-value/WEB-INF/struts-config.xml/param-value/init-paramload-on-startup2/load-on-startup,Struts安装与使用,web.xml配置servlet-mappingservlet-nameaction/servlet-nameurl-pattern*.do或/do/*/url-pattern/servlet-mapping,Struts安装与使用,?xml version=1.0 encoding
3、=UTF-8?!DOCTYPE struts-config PUBLIC -/Apache Software Foundation/DTD Struts Configuration 1.1/EN http:/jakarta.apache.org/struts/dtds/struts-config_1_1.dtdstruts-configdata-sources / / 定义数据源form-beans / / 定义ActionForm,Struts安装与使用,global-exceptions / / 定义全局异常global-forwards / / 定义全局转向urlaction-mappi
4、ngs / / 定义actioncontroller / / 配置Controllermessage-resources / / 配置资源文件/struts-config,实例(一),inputPage,实例(二),inputPage, hello.jsp Input for ActionForm tutorial.actionform.WordsActionForm What do you want to say?,实例(三),inputPage, ,struts-config.xml,Action,Formbean,问题反馈(一),1.action中所有参数的理解?Path:与页面上对应的
5、url路径Name:与formbeans中对应的页面中的表单Parameter:与页面上对应的url路径中的?do后的方法参数Input:如果validate属性不为false,调用validate()方法;如果 validate()返回非空的ActionErrors,将会被转到input属性指定的URI,Type:action真正对应的ActionServletScope:页面访问的范围Validate:是否启用Struts自带的验证,true或false,2.在实际的应用中把model层封装到form中的用意? Model是直接与数据库进行交互,而form是与页面交 互,这样做是为了可以更
6、好的维护项目,分工明确。,问题反馈(二),3.action的运行原理?(带form的action)? 首先,Struts会在定义的scope搜寻相应的form,如果找到则重用,如果找不到则新建一个实例;取得form实例以后,调用其reset()方法,然后将表单中的参数放入form,如果validate属性不为false,调用validate()方法;如果validate()返回非空的ActionErrors,将会被转到input属性指定的URI,如果返回空的ActionErrors,那么转到parameter属性指定的目标URI。,问题反馈(三),Struts控制器对象,ActionServl
7、et继承自javax.servlet.http.HttpServlet类,其中Struts framework扮演的角色是中心控制器。它提供一个中心位置来处理全部的终端请求。控制器ActionServlet主要负责将HTTP的客户请求信息组装后,根据配置文件的指定描述,转发到适当的处理器。,Struts Action Classes,Struts Action Mapping, , ,使用ActionForward导航,return (mapping.findForward(welcome);, ,Struts捕获表单数据,对于每一个客户请求,Struts framework在处理Action
8、Form的时候,一般需要经历如下几个步骤:检查Action的映射,确定Action中已经配置了对ActionForm的映射。根据name属性,查找form bean的配置信息检查Action的formbean的使用范围,确定在此范围下,是否已经有此form bean的实例。假如当前范围下,已经存在了此form bean的实例,而是对当前请求来说,是同一种类型的话,那么就重用。,Struts 捕获表单数据,5. 否则,就重新构建一个form bean的实例form bean的reset()方法备调用调用对应的setter方法,对状态属性赋值如果validatede的属性被设置为true,那么就调
9、用form bean的validate()方法。如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行。,Struts的其他组件,Validation Framework for StrutsStruts TagLibBeanUtilsCollectionsDigester,问题反馈(一),Struts的其他组件Validation Framework for Struts,Struts TagLib, BeanUtils, Collections,Digester如何理解?在struts1.1中,新增了valid
10、ation framework。增加了对form数据提交的验证。将原本需要在ActionFrom Bean的validate()进行的验证通过配置文件的描述进行验证。 struts提供了一组可扩展的自定义标签库(TagLib),可以简化创建用户界面的过程。目前包括:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags这几个Taglib。,问题反馈(二),BeanUtils组件的全称是Bean Introspection Utilites。是属于Jakarta Commons项目组的。主要是帮助构建javabean的属性操作的(getter,setter),已经提供一种动态定义和访问bean的属性。,Collections组件主要是提供了一些集合或列表对象,在原有的java collections framework的基础上进行了扩展。 Digester组件翻译成中文的意思是“汇编”。其主要功能是根据xml配置文件,初始化系统的一些java类对象。Digester帮助你指定XML与java对象之间映射模型,而且允许客户话定制映射规则(rules)。,问题反馈(二),