




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Struts架构学习手册(修订版本:1.00)整理人:黄文杰1Struts框架21.1为什么需要Web框架21.2Struts框架介绍31.3Struts结构31.4安装和配置Struts51.4.1简述51.4.2在Web应用程序中使用Struts51.4.3Struts配置文件61.5进一步讨论Struts组成101.5.1ActionServelt111.5.2Action类121.5.3Struts中的错误处理131.5.4ActionForm151.5.5ActionForward151.5.6ActionMapping161.6Struts标签库介绍161.6.1Bean标签161.6.2Login标签171.6.3HTML标签171.6.4Template标签181.7基于Struts的Web应用程序例子182案例分析:设计与数据访问183案例分析:Web界面181 Struts框架前几章里我们看到怎样编写JSP、使用自定义标签以及访问相关数据库。我们已经已经讨论过怎样跟踪用户,并学习了开发基于JSP Web应用的多种可选结构。我们也向你介绍J2EE Web应用程序的概念,和利用系统级别服务(实例安全性)的Web容器的用法。当从头构建一个应用时,似乎有许多问题要考虑。如果我们希望把这些基本特性编入自己的应用里,会有许多代码需要编写。有容易一些的方法吗?毕竟,一定有设计得很好的JSP Web应用已经具有这些特性,那么我们为什么不利用这些已经存在的功能呢?回答是肯定的,而且也应该这么做。不是每次都重头开始去开发一个基于JSP的Web应用,重用一个已存在的框架更有意义。它关注公共的结构问题,提供一个组件库以便任务可以重复执行。以此为基础,你可以开发你的应用所特有的组件。这些框架可以在你的机构内开发和重用,也可以使用第三方的框架产品。然而,只要可能,重用第三方软件是一个好主意,因为如果可以获得已经测试过的、能很容易统一到系统里的第三方软件,将缩短分析、设计、开发和测试周期中的一些枯燥的阶段。这一章里,我们将看一个基于JSP的Web应用框架产品,Apache Struts框架。我们将集中学习Struts的以下内容:l 建立和安装Strutsl Struts结构l Controller与配置l 指令、映射和转发l 指令表单beansl 标签库l 国际化我们通过使用Struts框架创建一个应用程序来完成这一章的学习。1.1 为什么需要Web框架如果你研究任何真实的应用程序,将会发现它的组件可以大致分成两类:l 商业组件l 应用服务多数情况下,跨不同的应用来重用商业组件是困难的,因为由商业组件提供的功能可能在其他应用里不需要:它可能是惟一针对你的应用的。然而,应用服务可以在机构里跨应用重用,跟跨机构一样好,因为它们提供的服务对不同类型的应用都有用。这些应用服务可能包括请求路由(对一个MVC结构)、错误处理、以通用的方式产生的客户端脚本和已准备好的标签库。任何可以提供这些类型服务,且能通过与商业组件的协作编进你的应用的软件,可以被称为一个Web应用框架。很多大型的机构开发内部框架,可以在机构内部被不同的应用开发重用。然而,一些大公司同很小的机构一样,没有足够的时间和资源开发一个内部框架,而使用第三方框架产品:不管是商业软件还是开放的免费软件。这个方法的优势是你可以获得已经开发好的和测试过的软件包,因此可以节省时间、金钱和资源。在本章,我们将学习一个使用最普遍的第三方Web应用框架:Apache Struts框架。接下来的两章,基于学到的知识,用Struts设计和开发一个实际的应用程序。1.2 Struts框架介绍Struts是一个开放源代码的Web应用框架,基于MVC设计模式,使用servlet和JSP API建立,可以用来构建复杂的Web应用。它允许我们分解一个应用程序的商业逻辑、控制逻辑和表现逻辑的代码,使它的重用性和维护性更好。Struts框架是Jakarta工程的一部分,由Apache软件基金会管理。Struts可以从/struts站点下载。Struts框架提供以下服务:l 作为MVC结构中的controller的servlet。l JSP里用于bean管理、HMTL和JavaScript生成,模板处理和流程控制的JSP标签库。l 用于国际化消息的框架。国际化你的Web应用,意味着你的Web应用在使用时可以让用户以喜爱的语言来显示。这意味着你需要创建一个应用资源文件,包含每种语言的信息。l 一个JDBC的实现来定义数据源和数据库连接池。l 一个通用的错误和异常处理机制,包括从一个应用程序资源文件读取错误信息。l XML语法分析。l 文件上载工具。l 注册机制。本章的其余部分,我们将解释怎样使用其中的很多特性,我们也将通过一个案例学习使用它们来结束本章。1.3 Struts结构让我们从顶部开始。Struts使用MVC结构;图1.1所示的逻辑图描述了框架的高层结构。我们现在讨论图中的每个元素。一个基于Struts的应用程序的表示层(view)使用Struts标签库(taglibs)构建。来自客户的请求被传递给叫ActionServlet的servlet,它作为controller。使用了Struts的应用程序,所有需要通过框架的请求都通过ActionServlet传递。这个ActionServlet把数据从请求传递到ActionForm JavaBean。ActionForm是代表从一个表单View组件输入数据的JavaBean。这些表单由JSP用Struts html标签库产生。这个bean由ActionServlet生成,带request参数,它还请求ActionForm来验证用户提交的数据的合法性。ActionServlet通过定义一组ActionMapping来配置。一个ActionMapping是一个对象,它将请求中的URL映射到由应用程序开发者提供的处理请求组件。ActionServlet和ActionMapping的配置在XML配置文件中完成。专用的应用程序用于处理请求的组件叫Action类。在MVC结构中,它们代表模型。它们可能用于验证用户输入的合法性,假如在信息处理过程中出现了应用程序错误,Action类可以创建一个error对象的实例,然后保存在HTTP request对象中。如果在Action类中的逻辑成功地被执行,类给Controller传递一个ActionForward对象,代表所需的描绘响应的JSP。ActionForward有两种:专门转发给特定的Action类或全局转发(任何一个Action类可以把这些ActionForwards转给Controller)。1.4 安装和配置Struts1.4.1 简述在Jakarta的Web站点/struts可以下载Struts源码和二进制代码的最新版本。本节印刷时,最后的发行版本是Struts1.0。建议你下载这个版本的二进制发行文件,它是压缩文件。一旦你下载了压缩文件并在本地文件系统中的某文件夹中解压了文件内容,在文件夹中应该包括以下两个文件夹:l lib这个文件夹包括struts.jar文件、Struts自定义标签的标签库描述文件(tld)和上一节提到的Struts配置文件struts-config.xml的文件类型定义(DTD)。l Webapps这个文件夹包括关于例子应用程序以及Struts文档的Web应用程序卷文件(WAR)。1.4.2 在Web应用程序中使用Struts要在你的Web应用程序中使用Struts框架,要执行以下步骤:1、 当编译你的Java类,特别是Action类时,确保struts.jar文件出现在你的CLASSPATH环境变量指定的Struts软件的lib目录中。当你开发了一个使用Struts的新Web应用程序时,在WEB-INF文件夹的lib子文件夹中放置一份struts.jar的拷贝。2、 把在Struts目录lib文件夹下的所有标签库描述符文件拷贝到你的Web应用程序的WEB-INF文件夹下。3、 修改Web应用程序部署描述文件(web.xm.l),声明Struts ActionServlet,并把必需的请求映射到ActionServlet,如下所示: action org.apache.struts.action.ActionServlet application MyResources !-ApplicationResources- 2 action *.do 上面从web.xml文件中截取的一段代码用名字声明了ActionServlet,并映射以.do结尾的请求URI到ActionServlet中,元素的(可选的)内容一定是个正整数,标明这个servlet的优先级。低的整数比高的整数要先装入,因此,这个servlet应该是第二个装入。ActionServlet有一个初始化参数的host文件。如果没有指定,所有的参数用默认值。更详细的信息请参考/struts/userGuide中的Struts文档。4、 修改web.xml来声明为在JSP中使用的Struts标签库位置的逻辑名,如下所示: /bean /WEB-INF/struts-bean.tld /html /WEB-INF/struts-html.tld /logic /WEB-INF/struts-logic.tld /template /WEB-INF/struts-template.tld 上面摘录的代码把Struts bean、html、logic、template标签的标签描述文件分别映射到逻辑的URI/bean、/html、/logic、/template中去。这意味着在JSP文件中可以使用这些标签库。5、 需要创建一个Struts配置文件struts-config.xml,它包括关于Web应用程序的ActionMapping信息、JDBC数据源信息、ActionForm Bean信息和全局转发。把它复制到你的Web应用程序的WEB-INF目录下。接下来我们会讨论这个配置文件的内容,并会为我们基于Struts的例子应用程序创建一个配置文件。1.4.3 Struts配置文件 简述在Struts MVC模型的controller元素有以下组成部分:l ActionServlet(controller的主要组成部分)l ActionMapping对象ActionServlet是controller元素的主要组成部分,负责分配请求。为了完成这一任务,它需要关于哪个请求分别到哪个组件去处理的请示。换句话说,需要知道关于特定请求的映射,基于URL把请求映射到处理请求的组件上去。这种映射信息保存在ActionMapping对象中。ActionMapping在Struts配置XML文件中定义,由应用程序开发者提供。在启动时,由ActionServlet装入。配置文件的名字和位置作为给ActionServlet的初始化参数来定义。如果没有指定,默认的是./WEB-INF/struts-config.xml文件。这个文件也定义了JDBC数据源、ActionForm beans和全局转发。也可以用程序代码强迫ActionServlet重新装入这个配置信息。配置文件的根元素是。这个配置文件用于定义下列信息:l ActionForm bean。每个bean在元素中定义,这些元素成组地放在元素中。l ActionMapping。指令定义放在元素中,这些元素放在元素中。l 全局转发。可以为JSP页面定义全局转发,在应用程序中使用大量的全局转发。每个全局转发在元素中定义,这些元素成组地放在下。l JDBC数据源。也可以在这个配置文件下配置与外部数据库的连接。每个数据源在元素下定义。这些元素依次成组地放在Struts配置文件的元素中。通过构建一个struts-config.xml文件,我们依次看一看,怎样配置这些内容。 学习一个Struts配置文件的范例让我们从顶层元素开始:现在让我们配置一个表单bean。.1 配置ActionForm Bean正像我们已经注意到的,ActionForm bean被ActionServlet用于保存request参数。这些bean有与HTTP request参数的名字相对应的属性名。Controller从request参数创建ActionForm bean的实例,然后把该实例传递给Action类。ActionForm bean在配置文件中用元素声明为全局的。表1.1是这个元素的属性。表1.1:元素属性描述className这是由Struts创建ActionForm bean时使用的类的全限定名。默认通常是org.apache.struts.action.ActionFormBean,尽管如果愿意的话,我们可以定义自己的bean类。name在它相关联的范围内表单bean的名字(换句话说,就是request/session对象的保存该bean的属性名),这个属性用于把bean与ActionMapping关联起来。type类的全限定名(包括包名)下面从配置文件范例中摘录的一段显示了怎样声明表单bean: 这是用empForm名在其关联的范围内声明了一个com.example.EmployeeForm类型的表单bean,下一节我们将学习怎样把这个bean映射到一个ActionMapping上。.2 配置ActionMappingActionMapping对象用于把到来的请求URL映射到Action类,把ActionForm与Action类关联起来。ActionServlet内部保存这个映射,当请求到来时,通过考察请求URI,把控制传送到一个合适的Action类的一个实例。所有的Action类用perform()方法来实现应用程序专用的代码。这个方法返回一个ActionForward类的实例,它包含已转发响应的目的资源名字。ActionMapping用元素定义,可能包括0个或多个元素。元素有多个属性和子元素。元素的默认定义的属性如表1.2所示(头三个属性是必需的)。表1.2:元素属性描述path相对于Action类的路径name该属性定义了与这个指令关联的ActionForm bean的名字,由Action类使用。这与用于在元素中定义表单bean的名字相同。type根据这个映射,Action类链接的合法全名scope值为request或session,用以指明ActionForm bean的作用范围prefix用于request参数与bean属性匹配的前缀suffix用于request参数与bean属性匹配的后缀attribute假如与前面描述的name属性不同,这是保存ActionForm bean的request或session范围属性的名字className被Struts用于创建ActionMapping对象的类的全限定名,默认为org.apache.struts.action.ActionMapping类。但如果需要,可以扩展这个类,定义自己的类,来创建这些ActionMapping对象。input相对于输入表单的路径,如果遇到一个bean的合法性错误,要返回给该输入表单。unknown如果这个属性的值设为true,该指令用作请求URI的默认指令,因为没有定义ActionMapping。validate如果这个属性的值设为true,在对Action类实例调用perform()之前,ActionServlet将在ActionForm bean上调用validate()方法来进行输入合法性检查。元素的一个关键子元素是元素。元素是配置局部转发的方便途径。我们定义从Action类来的响应被转发到的资源的逻辑名。用在ActionMapping类中的定义的findForward()方法,这个Action类可以通过名字访问转发。该方法用代表转发名的字符串作为参数,返回给ActionServlet一个findForward类的一个实例。元素包含表1.3所示的属性。表1.3:属性描述classNameActionForward的全限定类名。这是一个隐含属性,默认的值是传递给ActionServelt的初始参数值。如果没有指定,默认值为org.apache.struts.action.ActionForward。一般情况下,总是用默认实现类。name逻辑名。通过它,Action类可以访问这个ActionForward。path到要转发的响应资源的相对路径。redirect如果设为true,ActionServlet用sendRedirect()方法转发资源,否则在请求分发器上用forward()方法。(?forwar与sendRedirect有什么区别?)下面摘录的片段展示了典型的元素。 这个映射用com.example.ValidateEmployeeAction类型的Action类匹配到路径/validateEmployee。一个逻辑名为empForm的request范围的表单bean与这个映射关联。到这个产生原始请求的表单页面的相对路径是/inputContent.jsp,而局部转发定义为susscess,它从Action转发响应到/outputContent.jsp。.3 配置全局转发全局转发用元素定义,它为每个全局转发保存一个元素。可以对ActionMapping的findForward()方法通过名字访问这些转发。下面摘录的片段展示了全局转发声明: name属性简单地定义了全局转发的名字, path给出了目标URL的相对路径。.4 配置JDBC数据源JDBC数据源可以在配置文件中在元素下定义。用元素可以在数据源元素中定义多个数据源。元素为表1.4列出的特定的数据源属性定义不同的属性。表1.4:元素属性描述type实现JDBC扩展API接口的类的名字description对这个数据源的描述autoCommit用这个数据源创建的连接,默认为自动提交模式driverClass被数据源使用的用于实现JDBC驱动程序接口的类key被Action类使用的名字用于查找这个连接loginTimeout数据库注册超时的值maxCount连接到这个数据源的最大连接数minCount需要创建的最少的连接数password访问数据库的口令readOnly创建的连接的只读状态user访问数据库的用户名urlJDBC URL的值下面摘录的片段展示了怎样用这些属性在Struts配置文件中定义一个数据源。通过指定key名字,用在ActionServlet中定义的方法可以从一个Action类访问数据源。下面的代码段展示了怎样从一个Action类访问数据源:javax.sql.Datasource ds = servlet.findDataSource(“myPool”);java.sql.Connection con = ds.getConnection();这里servlet是ActionServlet类的实例,在ActionServlet实例化Action类之后,该实例传递给Action类。最后,在struts-config.xml文件中完成所有配置之后,需要关闭顶层元素:现在我们已经对Struts配置的内容进行了分类,下面我们将进一步深入讨论Struts的各部分如何配合在一起。1.5 进一步讨论Struts组成本节我们将讨论Struts的主要组成部分之间的关系,它们是:l ActionServlet控制器l Action类l ActionForm beanl ActionMapping对象l ActionForward对象还要解释在Struts中怎样处理错误。让我们从控制器的主要组成部分ActionServlet开始。1.5.1 ActionServelt 简述ActionServlet是控制器的主要组成部分,它由Struts类org.apache.struts.action.ActionServlet实现。这个类继承了标准的javax.servlet.http.HttpServlet类。在处理请求时控制器完成下列任务:1、 为到来的请求找到请求URL。2、 把URL映射到适当的ActionMapping。3、 创建或找到封装为当前映射定义的所有信息的ActionMapping实例。4、 如果在映射中声明了的话,创建或找到ActionForm bean实例,用request参数去试着产生一个bean属性。5、 对在ActionMapping中声明的Action类实例调用适当的perform()方法,给它传递ActionForm bean(如果在映射中声明)、ActionMapping对象、request对象和response对象。6、 接受从perform()方法返回的ActionForward,转发response到由ActionForward指定的源。 ActionServlet的配置上一节(1.4节)在讲述安装和配置Struts时,我们看到需要在web.xml文件中声明ActionServlet,把它配置成在启动时装入。还提到过Servelt可能把一个配置配置信息host文件作为初始化参数。本节我们将更深入地讨论这些配置参数,它们的解释如表1.4所示。表1.4:参数默认说明applicationnull应用程序资源包类(为多种语言的支持消息提供工具)bufferSize4096为卸载文件用的缓冲区大小config/WEB-INF/struts-config.xml配置文件的名字和位置contenttext/html默认内容类型debug0调试级别detail0调试详细级别factorynull消息资源工厂,在关于国际化的一节中解释消息资源formBeanorg.apache.struts.action.ActionFormBean封装ActionForm bean信息的类的名字forwardorg.apache.struts.action.ActionForward封装ActionForwards信息的类的名字locatetrue假如设为true,它在用户的会话中保存一个locale对象mappingorg.apache.struts.action.ActionMapping封装ActionMappings信息的类的名字maxFileSize卸载文件的最大尺寸multipartClassorg.apache.struts.upload.DiskMultipartRequestHandler处理多部分请求的类的名字nocacheFalse需要的HTTP头是否被设置为不能缓冲nullTrue假如设为true,为一个不合法消息值返回null。tempDir作为Servlet Context属性为该web应用程序提供的工作目录当处理文件下载时使用的临时工作目录validateTrue是否用新形式配置文件(旧版本的Struts使用不同形式的配置文件)validatingTrue是否对配置文件使用合法性分析器由应用程序开发者提供的ActionServlet的特殊子类可以带有另外的参数,尽管在大多数情况下,标准的Servlet已足够满足所有的需求。上面的许多初始化参数可以用getter和setter方法配置。在第一次接收到request URI映射到Action类时,ActionServlet实例化Action类。ActionServlet在其Action类中以变量名servlet保存一个句柄。在它被实例化之后,为了重用,Action实例被保存在缓存器中。ActionServlet提供了各种方法,可以被Action类通过使用servlet实例变量用于访问数据源、全局转发等等。 ActionServlet的方法/Public void addFormBean(ActionFormBean formBean)Public void removeFormBean(ActionFormBean formBean)/Public void addForward(ActionForward forward)Public void removeForward(ActionForward forward)/Public ActionFormBean findFormBean(String name)Public ActionForward findForward(String name)Public ActionMapping findMapping(String name)/public void addDataSource(String key,DataSource ds)public DataSource findDataSource(String key)1.5.2 Action类 简述由应用程序开发者提供的Action类负责处理用户的请求。如果ActionServlet不能为特定的指令查找到有效的映射,它会调用默认的Action类,前提是在配置文件中有定义好的类。ActionServlet传递给Action类一个与当前指令相关联的ActionMapping类。这可以用于多种任务,比如查找本地转发、存取与设置ActionMapping属性等等。它还传递ServletRequest对象或HttpServletRequest对象(根据servlet环境确定是哪一个)重载的perform()方法的版本。Action类可以用它读取和设置request属性、读取请求参数等等。所有的Action类需要扩展Struts类org.apache.struts.action.Action,并重载在类中定义的一个perform()方法。该类定义了两种重载的perform()方法:/perform(ActionMapping action,ActionForm form,ServletRequest request,ServletResponse response) throws IOException,ServletException/perform(ActionMapping action,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException在该perform()方法中,Action类为请求处理提供了需要的商业逻辑。该方法返回ActionForward对象到ActionServlet,该ActionForward包含响应被转发到的资源的路径。Action类提供了一组保护的访问方法,可以被Action子类使用,在下一节我们将讲述。 Action类的方法protected Locale getLocale(HttpServletRequest request)protected void setLocale(HttpServletRequest request,Locale locale)/protected MessageResource getResource()/protected boolean isCancelled(HttpServletRequest request)/protected void saveErrors(HttpServletRequest request,ActionErrors errors)1.5.3 Struts中的错误处理Struts框架为错误处理提供了两个类和一个自定义标签。本节我们将讲述Struts为出错处理提供的两个类:l org.apache.struts.action.ActionErrorsl org.apache.struts.action.ActionErrorActionErrors实例持有一组ActionErrors实例集。ActionError实例表示每个单个出错消息。这些实例包含一个键值,它可以映射到一个实际的保存在指定的、作为给ActionServlet初始化参数的应用程序资源文件中的出错消息上。ActionError实例可以增加到在ActionErrors.GLOBAL_ERROR属性或任何用户定义的属性中的ActionErrors实例中。 ActionError类ActionError类为创建出错消息定义了一组重载的构造函数。第一个构造函数方法把String作为一个参数。例如:ActionError error = new ActionError(“error.invalid”);这里实例error映射到在应用程序资源文件中的一个出错消息:error.invalid=Invalid Number所以,在JSP用自定义标签显示的消息会像下面这样:Invalid Number另一种形式的构造函数可以用于在java.text包中使用MessageFormat类的消息中指定替换字符串。比如说,在资源文件中出现下面的一行:error.invalid=Invalid Number0那么,假如你像下面这样创建了一个出错消息:ActionError error = new ActionError(“error.invalid”,new Double(-1.2);用标签在JSP中显示的消息会是:Invalid Number 1.2进一步的扩展是在构造函数中定义多处可替换的字符,如下所示:ActionError(String key,Object value0,Object value1,Object value2)ActionError类还提供了读取(String)特定消息的错误键值的方法getKey(),以及读取用于替换出错消息的值的String数组的方法getValues()。 ActionErrors类不会单独用ActionError类进行出错处理。它们总是保存在ActionErrors类实例中,每一个持有一组ActionError类实例对应于指定的属性值。你可以用自己的属性值,也可以用ActionErrors.GLOBAL_ERROR。下面的代码段展示了在Action类中的perform()方法中的一个典型的出错处理情形:SqrtForm sqrtForm = (SqrtForm)form;Double num = sqrtForm.getNumber();if(num0)ActionErrors errors = new ActionErrors();ActionError error=new ActionError(“error.negativeNumber”,new Double(num);ActionForm bean的form首先转换为指定的ActionForm。如果用户输入的值为负数,就创建一个ActionErrors类的实例,并用add()方法在全局error属性下增加一个ActionError实例。Errors.add(ActionErrors.GLOBAL_ERROR,error);SaveErrors(req,errors);String input = mapping.getInput();Return new ActionForward(input);注意add()方法的两个参数:表示一个属性的String和一个ActionError对象。ActionError传递一个替换字符串作为含有由用户输入的数值的双精度类型对象。最后,从ActionMapping对象(映射)读取激活Action类的输入JSP,返回给ActionServlet一个ActionForward请求它显示输入JSP。如果输入JSP用自定义标签来描绘出错消息,应用程序资源文件包含下列体:error.negativeNumber=Square roots cannot be computed for negative numbers (0)JSP会显示下列消息,例如,若用户输入-2.1:Square roots cannot be computed for negative numbers (-2.1)表1.6是ActionErrors类的一些有用的方法。表1.6:方法描述clear()清除所有的出错消息empty()如果ActionErrors对象为空,返回trueget()返回出错消息:如果没有提供参数,所有的消息作为一个Iterator对象返回,如果提供了一个特定属性的字符串,该属性相关联的出错消息作为一个Iterator返回。properties()返回一个Iterator,它包含至少有一个错误的属性名。size()返回出错的个数总和。如果没有提供参数,返回所有属性的所有错误的总和;如果提供一个字符串属性名作为参数,返回该属性的出错个数。1.5.4 ActionForm由应用程序开发者提供的ActionForm类必须扩展Struts类org.apache.struts.action.ActionForm。当ActionServlet调用Action类,它创建并生成相应的ActionForm bean实例,然后把它传递到Action类。这些由应用程序开发者提供的bean可以可以包含具有getter和setter方法的额外的属性,通过ActionServlet用reflection可以访问。本节我们将学习ActionForm类提供的一些公共方法:/用于读取或设置上载文件的多部分的请求处理程序public void setMultipartRequestHandler(MultipartRequestHandler multipartRequestHandler)public MultipartRequestHandler getMultipartRequestHandler()/提供了出错处理的另一种方法(备注:推荐在Action类中进行合法性检查)public ActionErrors validate(ActionMapping mapping,ServletRequest request)public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)/把bean属性复位成默认值public v
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年文化创意产业园区厂房场地租赁协议范本
- 2025调味品线上线下融合销售策略合作协议
- 2025版智能电网建设水电工程大包合同
- 2025年度土方拉运及建筑材料运输合同范本
- 2025年度商业办公楼停车位使用权租赁协议
- 2025版铁路运输安全生产责任担保协议
- 名班主任工作室网络教学推广计划
- 2025年度房地产项目销售人员劳动合同范本
- 2025年大模型推理缓存优化(含答案与解析)
- 2025二手集装箱买卖与绿色物流服务合同
- 火焰探测器设计手册
- 给排水巡视检查记录表
- GB/T 778.1-2018饮用冷水水表和热水水表第1部分:计量要求和技术要求
- GB/T 19839-2005工业燃油燃气燃烧器通用技术条件
- GB/T 19478-2018畜禽屠宰操作规程鸡
- (完整版)人工智能介绍课件
- 陶瓷材料的制备课件
- 中职统计基础知识课件
- 预防校园欺凌-共创和谐校园-模拟法庭剧本
- 《人间词话》十则公开课
- 磁刺激仪技术参数
评论
0/150
提交评论