Java EE框架实战开发教程PPT1第3章_第1页
Java EE框架实战开发教程PPT1第3章_第2页
Java EE框架实战开发教程PPT1第3章_第3页
Java EE框架实战开发教程PPT1第3章_第4页
Java EE框架实战开发教程PPT1第3章_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3.1.1Struts2体系结构Struts2的基本流程如下:①Web浏览器请求一个资源。②过滤器Dispatcher查找请求,确定适当的Action。③拦截器自动对请求应用通用功能,如验证和文件上传等操作。④Action的execute方法通常用来存储和(或)重新获得信息(通过数据库)。⑤结果被返回到浏览器,可能是HTML、图片、PDF或其他。Struts2的体系结构还可以参考图3.1.1Struts2体系结构

3.1.2工作流程3.1.3安装与配置Myeclipse2015作为开发工具,添加Struts2框架的步骤如下:(1)建立一个Web项目。(2)加载Struts2类库3.1.3安装与配置简单Struts2实例1.下载Struts2框架MyEclipse没有对Struts2的支持,所以需要用户自己下载Struts2开发包。登录/下载Struts2完整版,本书使用的是最新发布的Struts。将下载的Zip文件解压缩,它是一个典型的Web结构。打开其文件夹,里面包含以下4个目录(见图)。3.1.3安装与配置2.建立一个Web项目打开MyEclipse9.0,建立一个Web项目,命名为“Struts2.0”。3.加载Struts2类库由于本书使用最新版Struts2.3.1,相比老版本的Struts2需要多加载一些类库,包括:①

传统Struts2的5个基本类库struts2-core-.jarxwork-core-.jarognl-3.0.3.jarcommons-logging-1.1.1.jarfreemarker-2.3.18.jar②

附加的4个类库commons-io-2.0.1.jarcommons-lang-2.5.jarjavassist-3.11.0.GA.jarcommons-fileupload-1.2.2.jar3.1.3安装与配置一共是9个类库,都在图中Struts2开发包的lib目录下,将它们拷贝到项目的\WebRoot\WEB-INF\lib目录下,然后右击项目名,选择【BuildPath】→【ConfigureBuildPath】菜单项,出现如图所示的对话框。3.2配置文件web.xmlweb.xml文件打开项目中的WebRoot/WEB-INF/web.xml文件,修改其代码如下:<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.5" xmlns="/xml/ns/javaee" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/javaee /xml/ns/JavaEE/web-app_2_5.xsd"> <filter> <filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

</filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>3.2配置文件web.xmlStruts2框架就是通过web.xml配置了核心控制器,核心控制器也就是过滤器,对用户请求和处理程序响应的内容进行处理。在Struts2中,开发人员可以自定义过滤器,要求所有过滤器必须实现java.Serlvet.Filter接口,这个接口中含有3个过滤器类必须实现的方法:init(FilterConfig):Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。doFilter(ServletRequest,ServletResponse,FilterChain):完成实际的过滤操作,当用户请求与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法,返回响应之前也会调用此方法。FilterChain参数用于访问过滤器链上的下一个过滤器。destroy():Servlet容器在销毁过滤器实例前调用该方法,这个方法可以释放Servlet过滤器占用的资源。3.2配置文件web.xml过滤器类编写完成后,必须要在web.xml中进行配置,格式如下:<filter>

<filter-name>过滤器名</filter-name> <!--自定义的过滤器类,注意,这里要在包下,要加包名--> <filter-class>过滤器对应类</filter-class> <init-param> <!--类中参数名称--> <param-name>参数名称</param-name> <!--对应参数的值--> <param-value>参数值</param-value> </init-param><filter-mapping><filter-name>过滤器名</filter-name><url-pattern>映射规则</url-pattern></filter-mapping></filter>3.2配置文件web.xml<filter>元素表示对过滤器进行定义。<filter-name>元素是<filter>元素的子元素,表示过滤器的名字,该名字用来对其具体的类进行调用。<filter-class>元素也是<filter>元素的子元素,表示过滤器具体的类存放的路径。<init-param>元素表示初始化参数的定义,其子元素<param-name>表示参数名称,<param-value>表示定义的参数值。<filter-mapping>元素指定让struts2框架来处理用户的哪些请求(URL)。子元素<filter-name>表示过滤器的名字,与前面<filter>元素的子元素的名字一致。<url-pattern>表示过滤器的URL映射规则。过滤器必须和特定的URL关联才能发挥作用,3.2配置文件web.xml过滤器必须和特定的URL关联才能发挥作用,过滤器的关联方式有3种:与一个URL资源关联、与一个URL目录下的所有资源关联、与一个Servlet关联。①

与一个URL资源关联:<filter-mapping> <!--这里与上面配置的名称要相同--> <filter-name>过滤器名</filter-name> <!--与该URL资源关联--> <url-pattern>xxx.action</url-pattern></filter-mapping>②

与一个URL目录下的所有资源关联:<filter-mapping> <filter-name>过滤器名</filter-name> <url-pattern>/*</url-pattern></filter-mapping>③

扩展名匹配:<filter-mapping> <filter-name>过滤器名</filter-name> <url-pattern>*.action</url-pattern></filter-mapping>案例1.批量设置请求编码。为了避免提交数据的中文乱码问题,需要在每次使用请求之前设置request.setCharacterEncoding(“gb2312”)编码格式,这样确实很麻烦。Filter可以批量拦截修改servlet的请求和响应。packagecom;publicclassEncodingFilterimplementsFilter{publicvoidinit(FilterConfigconfig)throwsServletException{}publicvoiddestroy(){}publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{request.setCharacterEncoding("gb2312");chain.doFilter(request,response);}}

web.xml部分代码<filter><filter-name>EncodingFilter</filter-name><filter-class>com.EncodingFilter</filter-class></filter><filter-mapping><filter-name>EncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>案例2.出于信息安全和其他一些原因的考虑,项目中的一些页面要求用户满足了一定条件之后才能访问。可以用filter控制用户访问权限。packagecom;publicclassSecurityFilterimplementsFilter{publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{HttpServletRequestreq=(HttpServletRequest)request;HttpServletResponseres=(HttpServletResponse)response;HttpSessionsession=req.getSession();if(session.getAttribute("username")!=null){chain.doFilter(request,response);}else{res.sendRedirect("../failure.jsp");}}web.xml部分代码<filter><filter-name>SecurityFilter</filter-name><filter-class>com.SecurityFilter</filter-class></filter><filter-mapping><filter-name>SecurityFilter</filter-name><url-pattern>/admin/*</url-pattern></filter-mapping>

3.3配置文件pertiesStruts2提供了很多可配置的属性,通过这些属性的设置,可以改变框架的行为,从而满足不同的Web应用的需求。这些属性可以在perties文件中进行设置,该文件是struts2框架的全局属性文件,也是自动加载的文件。配置文件perties是标准的Java属性文件格式,使用“#”号作为注释字符,该文件是由一系列的key-value对组成,每个key就是一个struts2的属性,该key对应的value就是一个struts2的属性,该文件位于classpath下,通常放在Web应用程序的/WEB-INF/classes目录下。

3.4配置文件struts.xml配置文件struts.xml是struts2框架的核心配置文件,主要用于配置和管理开发人员编写的Action,以及Action包含的result定义、Bean的配置、常量的配置、包的配置和作用于action的拦截器的配置等。该文件通常放在WEB应用程序的WEB-INF/classes目录下,将被Struts2框架自动加载。3.4配置文件struts.xmlstruts.xml是一个XML文件,前部是XML的头,然后是<struts>标签,位于Struts2配置的最外层,其他标签都是包含在它里面的,如下:<?xmlversion="1.0"encoding="UTF-8"?> //XML头<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts> //<struts>标签 ……</struts>3.4配置文件struts.xml(1)package元素Struts2框架使用包来管理Action和拦截器等,每个package就是多个Action、多个拦截器、多个拦截器引用的集合,从而简化维护工作,提高了代码的重用性。package有以下几个常用属性:name(必选):指定包名,这个名字将作为引用该包的键。注意,包的名字必须是唯一的,在一个struts.xml文件中不能出现两个同名的包。extends(可选):允许一个包继承一个或多个先前定义的包。abstract(可选):将其设置为true,可以把一个包定义为抽象的。抽象包不能有action定义,只能作为“父”包被其他包所继承。namespace(可选):将保存的action配置为不同的名称空间。(2)命名空间的配置(namespace)Struts2以命名空间的方式来管理Action,主要针对大型项目Action重名的问题,因为不在同一个命名空间的Action可以使用相同的Action名字,同一个命名空间不能有同名的Action。

3.4配置文件struts.xml(3)Action元素当一个请求匹配到某个Action名字时,框架就使用这个映射来确定如何处理请求。<actionname="struts"class="org.act.StrutsAction"> <resultname="success">/welcome.jsp</result> <resultname="error">/hello.jsp</result></action>在上面代码中,当一个请求映射到struts时,就会执行该Action配置的class属性对应的Action类,然后根据Action类的返回值决定跳转的方向。其实一个Action类中不一定只能有execute()方法。如果一个请求要调用Action类中的其他方法,就需要在Action配置中加以配置。例如,如果在org.action.StrutsAction中有另外一个方法为:publicStringfind()throwsException{returnSUCCESS;}那么如果想要调用这个方法,就必须在Action中配置method属性,配置方法为:<!--name值是用来和请求匹配的--><actionname="find"class="org.act.StrutsAction"method="find"> <resultname="success">/welcome.jsp</result> <resultname="error">/hello.jsp</result></action>3.4配置文件struts.xml(4)result元素:一个result代表一个可能的输出。当Action类中的方法执行完成时,返回一个字符串类型的结果代码,框架根据这个结果代码选择对应的result,向用户输出。<result

name="逻辑视图名"

type="视图结果类型"/>

<param

name="参数名">参数值</param></result>param中的name属性有两个值:① location:指定逻辑视图。② parse:是否允许在实际视图名中使用OGNL表达式,参数默认为true。3.4配置文件struts.xmlresult中的name属性有如下值:success:表示请求处理成功,该值也是默认值。error:表示请求处理失败。none:表示请求处理完成后不跳转到任何页面。input:表示输入时如果验证失败应该跳转到什么地方(关于验证后面会介绍)。login:表示登录失败后跳转的目标。3.4配置文件struts.xml

type(非默认类型)属性支持的结果类型有以下几种:chain:用来处理Action链。chart:用来整合JFreeChart的结果类型。dispatcher:用来转向页面,通常处理JSP,该类型也为默认类型。freemarker:处理FreeMarker模板。httpheader:控制特殊HTTP行为的结果类型。jasper:用于JasperReports整合的结果类型。jsf:JSF整合的结果类型。redirect:重定向到一个URL。redirect-action:重定向到一个Action。stream:向浏览器发送InputStream对象,通常用来处理文件下载,还可用于返回AJAX数据。tiles:与Tiles整合的结果类型。velocity:处理Velocity模板。xslt:处理XML/XLST模板。plaintext:显示原始文件内容,如文件源代码。3.4配置文件struts.xml其中,最常用的类型就是dispatcher和redirect-action。dispatcher类型是默认类型,通常不写,主要用于与JSP页面整合。redirect-action类型用于当一个Action处理结束后,直接将请求重定向到另一个Action。如下列配置:…<actionname="struts"class="org.action.StrutsAction"> <resultname="success">/welcome.jsp</result> <resultname="error">/hello.jsp</result></action><actionname="login"class="org.action.StrutsAction"> <resultname="success"type="redirect-action">struts</result></action>…struts.xml文件的基本结构如下所示:<!DOCTYPE

struts

PUBLIC

"-//Apache

Software

Foundation//DTD

Struts

Configuration

2.0//EN"

"/dtds/struts-2.0.dtd">

<struts>

<!--

struts2的action必须放在一个指定的包空间下定义

-->

<package

name="default"

extends="struts-default">

<action

name="login"

class="org.qiujy.web.struts.action.LoginAction">

<result

name="success">/success.jsp</result>

<result

name="error">/error.jsp</result>

</action>

</package>

</struts>(5)包含配置(include)利用include元素,可以将一个struts.xml配置文件分割成多个配置文件,然后在struts.xml中使用include元素引入其他配置文件。比如一个网上购物程序,可以把用户配置、商品配置、订单配置分别放在3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论