传智博客struts开发.ppt
《传智博客struts开发.ppt》由会员分享,可在线阅读,更多相关《传智博客struts开发.ppt(47页珍藏版)》请在三一办公上搜索。
1、Struts开发,讲师:方立勋,TIP:为什么学习Struts,MVC设计模式基于MVC设计模式的Servlet+Jsp+JavaBean的WEB应用程序的工作流程。基于Strus的web应用程序的工作流程。为什么要用strus,它给我们带来了什么?,TIP:Struts开发快速入门,用户注册(使用struts完成),步骤:1、编写register.jsp表单页面,表单提交RegisterUser.do处理。2、在web工程中导入struts开发包,在web.xml文件中配置struts框架提供的ActionServlet,使其处理所有以.do为结尾的请求。3、在/WEB-INF/目录下编写A
2、ctionServlet工作时使用的配置文件struts-config.xml,配置当ActionServlet收到RegisterUser.do请求时,调用一个名称为RegisterUse的Action处理。4、编写ActionRegisterUse,在其excute方法内编码,采用传统方式获取数据,并调用service完成用户注册,然后转发给相应的jsp页面。,TIP:让struts自动封装请求数据,Struts的ActionServlet的功能非常强大,我们只需要在它的配置文件(struts-config.xml文件)中配置一下,它就可以自动把请求数据封装到用户指定的formbean中。
3、并且,struts在调用开发人员编写的action时,会把封装了数据的formbean传给action。这样,可以省去开发人员在action中手工获取客户端提交的数据,减轻编码工作量。,注意:用于封装数据的formbean要继承struts的ActionForm。,TIP:让struts转发请求,用户在编写action时,无须在action内手工编码进行请求转发。struts的ActionServlet在调用action.execute方法时,可以根据它的返回值,决定调用哪个JSP页面响应用户请求。Action.execute方法的返回值ActionForward代表一个转发对象,struts
4、的ActionServlet在收到Action.execute方法的返回值ActionForward后,会取出该对象封装的转发地址,进行请求转发。,Action,ActionServlet,ActionForward,JSP,TIP:让struts根据配置实现转发,在struts的配置文件struts-config.xml文件中,可以配置forward标签,它用于封装一个转发地址。如:Struts的ActionServlet在调用action时,会把action的配置信息封装一个ActionMapping对象中,并传递给action。因此,开发人员在编写action时,无须硬编码指定转发地址,
5、可以通过ActionMapping对象,获得配置文件中配置的转发地址,从而实现转发。如下图:,TIP:让struts根据配置实现转发,ActionServlet,action,ActionMapping,Struts-config.xml,请求,封装配置信息,*.do,actionServlet,Struts-config.xml,action,formbeam,actionMapping,actionforward,jsp,Web服务器,Web.xml,ActionServlet,Action,ActionFrom,1、web服务器收到请求后,把请求派发给struts的servlet进行处理
6、。2、ActionServlet读取配置文件,根据请求的path创建相应的action实例对象,3、根据配置文件创建封装请求参数的ActionForm对象。4、创建代表当前Action配置信息的ActionMapping对象。5、调用Action实例的execute方法,并把ActionForm和ActionMapping对象传递进去。6、ActionServlet根据execute方法的返回值ActionForward封装的转发信息,把请求转发到相应的JSP页面显示。,Struts-config.xml,ActionMapping,ActionForward,ActionForward,JS
7、P,TIP:读struts源码,分析struts工作流程,Struts的控制器组件主要包括(课后一定读源码)ActionServlet对象:Struts 的核心类RequestProcessor对象:由ActionServlet调用,负责处理用户请求Action对象:用户自己编写的类Struts处理请求的流程:当 ActionServlet 接收到 HTTP 请求后,在 doGet 或 doPost 方法中都会调用process()方法处理请求在 ActionServlet 的 process()方法中一旦选择了正确的子应用模块,就会调用RequestProcessor实例的process()
8、方法来处理请求。在ActionServlet调用这个方法时,会把当前的request和response对象传给它RequestProcessor实例的process()方法调用ProcessActionCreate()方法,先判断是否在 Action 缓存中存在Action实例,如果不存在,就创建一个Action实例,把它保存在 Action 缓存中RequestProcessor实例的process()方法调用Action实例的execute()方法,TIP:Struts配置文件常用属性,指定action处理的地址,指定处理请求的Action的完整类名,指定使用哪个formbean封装请求参
9、数,指定把formbean存放到哪个域对象中,默认session,指定formbean存储的key,不设默认为name属性的值,指定把formbean的数据是由哪个页面提供的,提供此属性的目的在于formbean校验失败时,程序方便跳回formbean的输入页面,显示校验失败信息。,指定收到请求时,跳转到相应的jsp页面,如果配置了此属性,则action将不再被调用。相当于ServletUI,指定收到请求时,进行页面包含。,如果action把该属性设置为true,则它可以处理客户机发出的所有无效的.do请求,默认值为false,用于处理错误页面,配置action参数,调用actioMappin
10、g.getParameter方法可以获得这里配置的参数。,标签和所有的配置信息使用哪个对象封装,默认值为ActionMapping对象。,请求参数封装到formbean中后,是否让struts自动调用formbean的validate方法进行数据校验。默认true,TIP:补充知识点,严格按照MVC设计模式改进注册用例,需求:Web应用程序若要严格按照MVC设计模式,所有客户端的请求都需要发送给servlet处理,servlet再转发到JSP显示。因此,对于上述案例中的register.jsp页面,也要禁止用户直接访问,而应把它放在web-inf目录中保护起来,由用户访问servlet后,se
11、rvlet再转发到register.jsp页面上。传统做法和Struts的做法。在首页上挂上注册功能标签的好处:也有坏处使用不用关心web应用程序的名称。可以自动附加jsessionid参数进行url重写。可以对参数信息进行url编码。标签常用属性:paramID、paramName、name、property。,TIP:补充知识点,标签示例:,TIP:借助struts完成表单校验,表单数据提交后,在服务器端编程校验数据合法性,是一个很常见的需求。所以struts的ActionServlet在把数据封装到formbean后,会自动调用formbean的validate方法对数据进行校验,并根据
12、validate方法的返回值,决定转发到哪个jsp页面处理。Stuts的这种处理方式,可以让开发人员少死点脑细胞,开发人员只需要在validate方法中写代码进行数据校验就OK了,调用方法的事由struts的actionServlet去做了,并且,调用方法完后,如果有错误,跳转的事,也由struts根据配置文件做了。注意:若想struts的actionServlet把数据封装到formbean后,调用其validate方法,需要在struts-config.xml文件中把action的validate属性设置为true,默认值为true。,TIP:借助struts完成表单校验,Struts调用
13、formbean.validate方法后,其规则为:如果validate返回的ActionErrors对象为空或null,则Struts认为表单验证通过,struts进而继续调用Action处理请求。如果validate返回的ActionErrors不为空,并且封装了数据,则认为校验失败,Struts将自动跳转回表单输入页面。(input属性指定)因此用户若想校验失败,只需要创建ActionErrors对象,并调用其方法:ActionErrors.add(String key,ActionMessage message)向ActionErrors对象中加入相应的错误消息,返回给struts即可
14、。示例代码:,TIP:在JSP中显示校验信息,Struts在收到Formbean的返回值ActionErrors后,会将其存储到request域中,进而带给表单页面,以便开发人员在表单页面中显示校验失败的错误信息(这点建议读读struts的源码)。在JSP页面中开发人员可以编码显示错误信息:,注意上面的代码取request的errors对象时为什么用“”,这个值从何来?显示消息时有需要在struts-config.xml文件中配置一个资源文件,TIP:使用显示校验消息,在JSP页面中手工编码获取errors对象中保存的数据很麻烦,因此Struts编写了标签,它用于封装JSP页面中用于获取消息的
15、java代码。用户使用标签可以很轻松获取到errors中保存的校验信息,示例。标签也可以以ActionMessage中封装了key为关键字,从资源文件中检索数据予以显示,如下所示:,取消false,html:errors标签在显示ActionMessage封装的消息时,将以ActionMessage的key为关键字从资源文件中检索数据显示,看看标签源码,看errors标签是如何以关键字检索资源文件数据的。注意:errors标签工作时需要资源文件。,TIP:ActionMessage,ActionMessage封装消息的方式很灵活,后面两个构造函数中的value参数,用于替换消息文本中的占位符:
16、,对应资源文件内容:errors.required=0不能为空,TIP:练习,完成对Register.jsp页面的完整校验,TIP:练习,private String username;private String password;private String password2;private String gender;private String birthday;private String income;private String city;private String preference;private String email;,TIP:练习,注意事项:日期校验不要采用Da
17、teFormat,而应采用:DateLocaleConverter dlc=new DateLocaleConverter();Date d=(Date)dlc.convert(this.birthday,yyyy-mm-dd);对于页面中的数据,可采用枚举类表示,对枚举值的校验可采用如下类似方式:Gender.valueOf(this.gender);,TIP:使用Struts标签完成表单数据回显,Struts提供了很多表单相关的自定义标签,如:这些标签除用于生成相应的html标签外,最大的好处在于它在产生html标签时,会自动检索相应formbean的数据予以显示,这样,当表单校验失败时,
18、表单数据的回显struts帮我们干了,开发人员就不需要再编码去取了。,TIP:使用Struts标签完成数据回显,使用Struts的html标签完成数据回显时注意的问题:html标签回显数据时,会以为关键字,从各个域中查找bean,找不到则抛空指针异常。所以使用html标签时域中须有以为关键字的对象。这个工作可以交给html:form标签做,html:form标签在执行时,会查找域中已有的formbean,并以为关键字把formbean存在域中。如果html:form标签在域中找不到formbean,则html:form标签会实例化一个空bean,然后存储到域中。因此,为了在页面中使用strut
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 博客 struts 开发
链接地址:https://www.31ppt.com/p-6081841.html