1一、准备工作及实例1.解压struts-2.1.6-all.zipapps目录:struts2自带的例子程序docs目录:官方文档。lib目录:存放所有jar文件。Src目录:源文件存放地2.六个基本包struts2-core-2.1.6.jar:开发的核心类库freemarker-2.3.13.jar:struts2的UI标签的模板使用freemarker编写commons-logging-1.0.4.jar:日志包ognl-2.6.11.jar:对象图导航语言,通过它来读写对象属性xwork-2.1.2.jar:xwork类库,struts2在其上进行构建commons-fileupload-1.2.1.jar:文件上传组件,2.1.6版本后必须加入此jar包特别需要说明的是目前strust2的最新版本是struts-2.1.6,它作为2.1X的正式版。特别要注意导入commons-fileupload-1.2.1.jar包,在此jar包中包含了RequestContext类,如果不导入该jar包将会报异常。3.初识struts2配置文件(1).web.xml文件主要完成对StrutsPrepareAndExecuteFilter的配置(在以前的版本中是对FilterDispatcher配置,新版本同样支持用FilterDispatcher配置),它的实质是一个过滤器,它负责初始化整个Struts框架并且处理所有的请求。这个过滤器可以包括一些初始化参数,有的参数指定了要加载哪些额外的xml配置文件,还有的会影响struts框架的行为。除了StrutsPrepareAndExecuteFilter外,Struts还提供了一个ActionContexCleanUp类,它的主要任务是当有其它一些过滤器要访问一个初始化好了的struts框架的时候,负责处理一些特殊的清除任务。(2).struts.xml文件框架的核心配置文件就是这个默认的struts.xml文件,在这个默认的配置文件里面我们可以根据需要再包括其它一些配置文件。在通常的应用开发中,我们可能想为每个不同的模块单独配置一个struts.xml文件,这样也利于管理和维护。这也是我们要配置的主要文件。(3).struts.properties(参default.properties)在Struts框架使用了很多属性,我们可以通过改变这些属性来满足我们的需求。要改变这些属性,只需在struts.properties文件中指定属性的key和value即可。属性文件可以放在任何一个包含在classpath中的路径上,但是通常我们都把它放在/WEB-INF/classes目录下面。我们可以在struts-default.properties文件中找到一个属性的列表。(4)struts-default.xml此文件是struts2框架默认加载的配置文件,它定义了struts2一些核心bean和拦截器,它会自动包含(included)到struts.xml文件中(实质是通过packageextends=struts-default),并为我们提供了一些标准的配置。我们可以在struts2-core.jar中找到这个文件。(5)其它配置文件velocity.properties,struts-default.vm,struts-plugin.xml4.让MyEclipse提示xml信息当我们在编写struts.xml时,发现eclipse并不会给出帮助提示,那是因为MyEclipse默认并不支持struts2,所以我们需要手工导入dtd以支持提示。步骤:[window][preferences][MyEclipse][FilesandEditors][XML][xmlCatelog]然后在右边点add添加:location为dtd文件所在的位置(struts-2.0.dtd文件struts2-core-2.1.6.jar中可以得到),KeyType选择URI,Key为struts-2.0.dtd文件中文档声明的内容(),在struts.xml文件中也有此key值。5.如何使用alt+/提示在MyEclipse6.5中,默认的提示为Ctrl+Space,而它会与我们的输入法切换冲突,使提示失效。找到2key,先取消ContentAssist命令的绑定,再用“alt+/”来绑定。6.实例步骤一,新建myStruts2项目,并导入struts2的六个基本jar包。步骤二,建立LoginAction文件,主要代码如下:packagecom.asm;importcom.opensymphony.xwork2.Action;publicclassLoginActionimplementsAction{privateStringusername;privateStringpassword;...省略get/set方法publicStringexecute()throwsException{if(username.equals(struts2)){returnloginSuccess;}else{returnloginFailure;}}}说明:实现了Action接口,主要是为了保证execute的正确定义,其实我们也可以不实现此接口,只要能保证execute方法书写的正确书写(方法名,返回值)。步骤三,在struts.xml文件中注册LoginAction。此配置文件要放在src目录下,实质就是成为classpath环境变量下的文件。主要代码如下:?xmlversion=1.0encoding=UTF-8?!DOCTYPEstrutsPUBLIC-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN=myFirstnamespace=/extends=struts-defaultactionname=loginclass=com.asm.LoginActionresultname=loginSuccess/success.jsp/resultresultname=loginFailure/failure.jsp/result/action/package/struts说明:package后面会有详细说明。action元素中的name属性值指定了此action所指定的请求路径为“login.action”。后面login.jsp中的formaction=...属性值就会参照此name属性。步骤四、提供jsp页面login.jsp主要代码:bodyformaction=%=request.getContextPath()%/login.actionmethod=get户名:inputtype=textname=usernamebr密码:inputtype=passwordname=passwordbrinputtype=submitvalue=login/form/bodyfailure.jsp主要代码3%@pagelanguage=javaimport=java.util.*pageEncoding=UTF-8%%@tagliburi=/struts-tagsprefix=s%htmlbody登录失败,错误的用户名:s:propertyvalue=username/brahref=%=request.getContextPath()%/login.jsp返回/a/body/html说明:使用了标签库,在struts2中使用标签库非常简单,只需要像上面那样导入标签库便可以使用所有的struts2的所有标签success.jsp主要代码body登录成功!/body步骤五、配置web.xml。完成核心监听器注册。内容如下:?xmlversion=1.0encoding=UTF-8?web-appid=WebApp_9version=2.4xmlns=:xsi=:schemaLocation=://java.sun.com/xml/ns/j2ee/web-app_2_4.xsdfilterfilter-namestruts2/filter-name!--filter-classorg.apache.struts2.dispatcher.FilterDispatcher/filter-class--filter-classorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter/filter-class/filterfilter-mappingfilter-namestruts2/filter-nameurl-pattern/*/url-pattern/filter-mapping/web-app说明:注释掉的部分为以前2.1.4版本中用的核心filter类。StrutsPrepareAndExecuteFilter类的init方法将会读取类路径下默认的配置文件struts.xml,并以javabean形式存放在内存中,以后struts2对用户的每次请求将使用内存中数据,而不是重读struts.xml文件。步骤六、发布测试。简要分析执行流程:当输入.../login.jsp访问jsp页面填写完相关信息并提交给login.action时,它会首先被在web.xml中配置的过滤器监听到,过滤器会去查找strust.xml文件,并结合namespace查找名为login的action,查找到此action便交给其处理,LoginAction内部会执行execute方法,并返回结果result(result也是参照的struts.xml中action下的result配置)。关于表单传参,主要是参照的action中的方法名,而非属性名。7.开启struts2自带的开发模式常量在以前的开发中,当修改一些配置时总是不能及时地更新到服务器,我们总会重新部署或重启来更新改变的内容,在struts2中可以通过一个常量来达到此目的。即在struts.xml中的struts元素下增4加如下内容:constantname=struts.configuration.xml.reloadvalue=true/这样配置后,当配置文件修改保存时就会及时更新到服务器中。其它一些常量:!--指定WEB应用的编码集,相当于调用HttpServletRequest.setCharacterEncodint方法,如果使用了velocity或freemarker,它也用于指定输出的编码格式--constantname=struts.i18n.encodingvalue=UTF-8/!--指定请求后缀为.action,指定多个请求后缀用逗号分隔--constantname=struts.action.extensionvalue=action/!--设置浏览器是否缓存静态内容,建议:开发阶段关闭,运行时开启--constantname=struts.serve.static.browserCachevalue=false/