【Jsp精品源码栏目提醒】:网学会员,鉴于大家对Jsp精品源码十分关注,论文会员在此为大家搜集整理了“【精品】:struts2学习笔记 - 编程语言”一文,供大家参考学习!
STRUTS 2.1.8 学习笔记 2010-5-11 下载完成struts2.1.8 完成jdk eclipse tomcat环境配置 下载struts2 学习资料 2010-5-12 1HelloWord实例 web.xml /所有请求经过名为struts2的过滤器进行请求的转发处理等操作 基本用到的jar 默认struts.xml的位置在SRC下而不是在WEB-INF下 默认的过滤器和2.1.3之前org.apache.Struts2.dispatcher.FilterDispatcher不同特注意。
struts.xml配置各请求要执行的action test.
jsp HelloWorld.java URLhttp://localhost:8080/TEST001/HelloWorld HelloWorld在Struts.xml中指定action name 制定执行的方法名 Action可以进行按模块进行区分打包 请求的名字 请求执行的类 配置方法执行完毕后要转向的页面类似forward Struts标签的配置此处不需进行tld文件的导入应该直接包含在上述的jar文件中 通过请求返回的现实内容 Struts.xml中action指定method Struts.xml中action指定result name 5.14.2010 包名查找 Namespace 查找 Y N 包中查action Y 执行action N 默认空包中查action Y N 提示找不到 包名分段截取 Struts2 要点笔记一 一、Struts2 主要几句话 1、 Struts2 是由webwork2发展来的而非Struts1相比Struts1Struts2编码规范跟类似与webwork2 2、Struts2 非侵入式设计、Struts1属于侵入式设计 3、Struts1与ServletAPI、strutsAPI紧密耦合Struts1则不 4、Struts2 利用拦截器进行AOP编程实现如权限拦截功能 5、Struts2 提供了类型转换器 6、Struts2 提供多种表现层技术如
JSP/Freemarker/Velocity等 7、Struts2 的输入验证可以对指定方法进行验证解决Struts1之痛 8、Struts2 提供了全局范围、包范围和Action范围的国际化资源文件管理实现 二、Struts2 需要的最少jar Struts-core-2.xx.jar Xwork-2.xx.jar Ognl-2.6.x.jar 对象图导航语言Object Graph Navigation LanguageStruts2通过其读写对象属性 Freemarker-2.3.x.jar Commons-logging.jar Commons-fileupload.jar 切勿全选所以jar否则你会很痛苦Struts2提供其他框架的支持所以依赖其他jar、一些配置文件。
三、环境搭建三部曲 1 找到开发Struts2应用需要使用的jar文件 2 编写Struts2配置文件 3 在web.xml中加入Struts2MVC框架启动配置 附2.1.8版本的配置 lt-- struts2 --gt ltfiltergt ltfilter-namegtstruts2lt/filter-namegt ltfilter-classgt org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter lt/filter-classgt lt/filtergt ltfilter-mappinggt ltfilter-namegtstruts2lt/filter-namegt lturl-patterngt/lt/url-patterngt lt/filter-mappinggt 四、Struts.xml配置文件中包的介绍 ltpackage namequotdefaultquot namespacequot/testquot extendsquotstruts-defaultquotgt ltaction namequotindexquot class”cn.itcast.action.HelloWorldAction” methed”execute”gt ltresult namequotsucccessquotgt/page/hello.jsplt/resultgt lt/actiongt lt/packagegt 管理一组业务功能相关的action在实际应用中把一组应用功能相关的action放在一个包下 1name必须其他包要继承该包必须经过该属性进行引用 2namespace定义该包的命名空间命名空间做为访问该包下action路径的一部分如上action访问路径为/test/index.action 3. extends 默认继承了struts-default包可使这个包下面默认应用了struts2一些新功能如拦截器等 4abstract 当 abstract”true” 则该包内不能有action 五、Struts2里Action名称的搜索顺序 http://localhost:8080/struts2/test/helloworld //配置可访问 http://localhost:8080/struts2/test/sdf/dsf/as/helloworld //也可访问的 在Struts2中首先会按照命名空间规则先查/test/sdf/dsf/as 这个命名空间下有无helloworld没有此action后会在/test/sdf/dsf这个命名空间查以此类推直至/test下查到有该action。
还有一点如果在/test下还是无法查到该action则会到默认的命名空间ltpackage namequotdefaultquot extendsquotstruts-defaultquotgt去查 六、Action配置中各项默认值 1 如果没有给action配置class则默认的是ActionSupport 2 如果没有给action配置method则默认的是execute方法 3 如果没有给result配置name则默认的是success 例如可以利用各种默认项的搭配完成action转发 Struts1 ltaction path”/control/employee/addUI” gt lt—Struts1的转发 --gt ltforward name”addUI”gt/WEB-INF/page/employeeAdd.jsplt/forwardgt lt—Struts1的重定向 --gt lt-- ltforward name”addUI” redirect”true”gt/WEB-INF/page/employeeAdd.jsplt/forwardgt --gt lt/actiongt Struts2 ltaction name”addUI”gt ltresultgt/WEB-INF/page/employeeAdd.
jsp”lt/resultgt lt/actiongt 同样访问http://localhost:8080/XX/addUI.action 就可访问到employeeAdd.
jsp 七、Struts2 中result常用的视图转发类型dispatcher默认、redirect、redirectAction、plainText 1. 转发上面已经介绍了 2重定向 a.ltaction namequotredirectquotgt ltresult typequotredirectquotgt/index.jsplt/resultgt lt/actiongt b.ognl表达式在struts.xml中获取action中的变量 ltaction namequotredirectquotgt ltresult typequotredirectquotgt /index.jspusernameusernamelt/resultgt lt/actiongt http://localhost:8080/struts2/redirect.action 将重定向到如下URL http://localhost:8080/struts2/index.jspusername”action中定义的值” 传中文时候请进行编码 username URLEncoder.encode“李显武” “UTF-8” 注意用get方式传的中文在页面显示还需要解密: URLDecoder.decodenew Stringrequest.getParameter“username”.getBytes“ISO8859-1” “UTF-8” 注action中要提供该变量的getter、setter方法 3. 重定向到actionaction在同一个包 ltaction namequothelloworldquot classquotcn.itcast.action.HelloWorldActionquot methodquotexecutequotgt ltresult namequotsuccessquotgt/WEB-INF/page/hello.jsplt/resultgt lt/actiongt ltaction namequotredirectActionquotgt ltresult typequotredirectActionquotgthelloworldlt/resultgt lt/actiongt 当action不在同一个包时候 ltaction namequothelloworldquot classquotcn.itcast.action.HelloWorldActionquot methodquotexecutequotgt ltresult namequotsuccessquotgt/WEB-INF/page/hello.jsplt/resultgt lt/actiongt ltaction namequotredirectActionquotgt ltresult typequotredirectActionquotgt ltparam name”actionName”gtaction名lt/paramgt ltparam name”namespace”gt需要重定向的action所在的包lt/paramgt lt/resultgt lt/actiongt 4. plainText显示原始文件内容例如当我们需要原样显示
jsp文件源代码的时候我们可以使用此类型 ltaction name”plainText”gt ltresult name”souce” type”plainText”gt ltparam name”location”gt/xxx.jsplt/paramgt ltparam name”charSet”gtUTF-8lt/paramgtlt—指定读取文件的编码 --gt lt/resultgt lt/actiongt 八、在Struts2中公用的视图 ltpackage ……gt ltglobal-resultgt ltresult name”pub”gt/public.jsplt/resultgt lt/global-resultgt lt/packagegt 九、为Action属性注入值 ltaction name”list” class”cn.itcast.action.HelloWorldAction”gt ltparam name”savepath”gt/imageslt/paramgt ltresultgt/WEB-INF/page/message.jsplt/resultgt lt/actiongt 从配置文件将value植入action的属性再用EL表达式将action的属性值显示出来 注意变量的命名、getter、setter方法 十、指定Struts2处理的请求后缀 默认使用的是处理.action的请求其实也可以通过常量”struts.action.extension”进行修改如我们可以配置Struts2只处理以.do为后缀的请求路径 ltxml versionquot1.0quot encodingquotUTF-8quot gt ltDOCTYPE struts PUBLIC quot-//Apache Software Foundation//DTD Struts Configuration 2.0//ENquot quothttp://struts.apache.org/dtds/struts-2.0.dtdquotgt ltstrutsgt ltconstant namequotstruts.action.extensionquot valuequotdoquotgtlt/constantgt lt/strutsgt 也可以指定处理多个后缀请求 value之间以””分开如: value”doactionjhtml” 十一、细说常量的配置 Struts2中常量可以在多个配置文件中配建议在struts.xml中配置方式如下 ltstrutsgt ltconstant name”struts.action.extension” value”do”/gt lt/strutsgt 因为常量可以在多个配置文件中进行定义所以我们需要了解struts2加载常量的搜索顺序 struts-default.xml struts-plugin.xml struts.xml struts.properties web.xml 如果在多个文件中配置了同一个常量则后一个配置文件中的常量值将会覆盖前面文件中配置的常量值 Struts2 要点笔记二 十二、Struts2常量一览常用的以粗体显示了 struts.configuration 该属性指定加载Struts 2配置文件的配置文件管理器。
该属性的默认值是org.apache.Struts2.config.DefaultConfiguration这是Struts 2默认的配置文件管理器。
如果需要实现自己的配置管理器开发者则可以实现一个实现Configuration接口的类该类可以自己加载Struts 2配置文件。
struts.locale 指定Web应用的默认Locale。
struts.i18n.encoding 指定Web应用的默认编码集。
该属性对于处理中文请求参数非常有用对于获取中文请求参数值应该将该属性值设置为GBK或者GB2312。
提示当设置该参数为GBK时相当于调用HttpServletRequest的setCharacterEncoding方法。
struts.objectFactory 指定Struts 2默认的ObjectFactory Bean该属性默认值是spring。
struts.objectFactory.spring.autoWrite 指定Spring框架的自动装配模式该属性的默认值是name即默认根据Bean的name属性自动装配。
struts.objectFactory.spring.useClassCache 该属性指定整合Spring框架时是否缓存Bean实例该属性只允许使用true和false两个属性值它的默认值是true。
通常不建议修改该属性值。
struts.objectTypeDeterminer 该属性指定Struts 2的类型检测机制通常支持tiger和notiger两个属性值。
struts.multipart.parser 该属性指定处理multipart/form-data的MIME类型文件上传请求的框架该属性支持cos、pell和jakarta等属性值即分别对应使用cos的文件上传框架、pell上传及common-fileupload文件上传框架。
该属性的默认值为jakarta。
注意如果需要使用cos或者pell的文件上传方式则应该将对应的JAR文件复制到Web应用中。
例如使用cos上传方式则需要自己下载cos框架的JAR文件并将该文件放在WEB-INF/lib路径下。
struts.multipart.saveDir 该属性指定上传文件的临时保存路径该属性的默认值是javax.servlet.context.tempdir。
struts.multipart.maxSize 该属性指定Struts 2文件上传中整个请求内容允许的最大字节数。
struts.custom.properties 该属性指定Struts 2应用加载用户自定义的属性文件该自定义属性文件指定的属性不会覆盖struts.properties文件中指定的属性。
如果需要加载多个自定义属性文件多个自定义属性文件的文件名以英文逗号隔开。
struts.mapper.class 指定将HTTP请求映射到指定Action的映射器Struts 2提供了默认的映射器org.apache.struts2.dispatcher.mapper.DefaultActionMapper。
默认映射器根据请求的前缀与Action的name属性完成映射。
struts.action.extension 该属性指定需要Struts 2处理的请求后缀该属性的默认值是action即所有匹配.action的请求都由Struts 2处理。
如果用户需要指定多个请求后缀则多个后缀之间以英文逗号隔开。
struts.serve.static 该属性设置是否通过JAR文件提供静态内容服务该属性只支持true和false属性值该属性的默认属性值是true。
struts.serve.static.browserCache 该属性设置浏览器是否缓存静态内容。
当应用处于开发阶段时我们希望每次请求都获得服务器的最新响应则可设置该属性为false生产环境下可以缓存。
struts.enable.DynamicMethodInvocation 该属性设置Struts 2是否支持动态方法调用该属性的默认值是true。
如果需要关闭动态方法调用则可设置该属性为false。
struts.enable.SlashesInActionNames 该属性设置Struts 2是否允许在Action名中使用斜线该属性的默认值是false。
如果开发者希望允许在Action名中使用斜线则可设置该属性为true。
struts.tag.altSyntax 该属性指定是否允许在Struts 2标签中使用表达式语法因为通常都需要在标签中使用表达式语法故此属性应该设置为true该属性的默认值是true。
struts.devMode 该属性设置Struts 2应用是否使用开发模式。
如果设置该属性为true则可以在应用出错时显示更多、更友好的出错提示。
该属性只接受true和flase两个值该属性的默认值是false。
通常应用在开发阶段将该属性设置为true当进入产品发布阶段后则该属性设置为false。
struts.i18n.reload 该属性设置是否每次HTTP请求到达时系统都重新加载资源文件。
该属性默认值是false。
在开发阶段将该属性设置为true会更有利于开发但在产品发布阶段应将该属性设置为false。
提示开发阶段将该属性设置了true将可以在每次请求时都重新加载国际化资源文件从而可以让开发者看到实时开发效果产品发布阶段应该将该属性设置为 false是为了提供响应性能每次请求都需要重新加载资源文件会大大降低应用的性能。
struts.ui.theme 该属性指定视图标签默认的视图主题该属性的默认值是xhtml。
struts.ui.templateDir 该属性指定视图主题所需要模板文件的位置该属性的默认值是template即默认加载template路径下的模板文件。
struts.ui.templateSuffix 该属性指定模板文件的后缀该属性的默认属性值是ftl。
该属性还允许使用ftl、vm或
jsp分别对应FreeMarker、Velocity和
JSP模板。
struts.configuration.xml.reload 该属性设置当struts.xml文件改变后系统是否自动重新加载该文件。
该属性的默认值是false开发阶段很实用。
struts.velocity.configfile 该属性指定Velocity框架所需的velocity.properties文件的位置。
该属性的默认值为velocity.properties。
struts.velocity.contexts 该属性指定Velocity框架的Context位置如果该框架有多个Context则多个Context之间以英文逗号隔开。
struts.velocity.toolboxlocation 该属性指定Velocity框架的toolbox的位置。
struts.url.http.port 该属性指定Web应用所在的监听端口。
该属性通常没有太大的用处只是当Struts 2需要生成URL时例如Url标签该属性才提供Web应用的默认端口。
struts.url.https.port 该属性类似于struts.url.http.port属性的作用区别是该属性指定的是Web应用的加密服务端口。
struts.url.includeParams 该属性指定Struts 2生成URL时是否包含请求参数。
该属性接受none、get和all三个属性值分别对应于不包含、仅包含GET类型请求参数和包含全部请求参数。
struts.custom.i18n.resources 该属性指定Struts 2应用所需要的国际化资源文件如果有多份国际化资源文件则多个资源文件的文件名以英文逗号隔开。
struts.dispatcher.parametersWorkaround 对于某些Java EE服务器不支持HttpServlet Request调用getParameterMap方法此时可以设置该属性值为true来解决该问题。
该属性的默认值是false。
对于 WebLogic、Orion和OC4J服务器通常应该设置该属性为true。
struts.freemarker.manager.classname 该属性指定Struts 2使用的FreeMarker管理器。
该属性的默认值是org.apache.struts2.views.freemarker.FreemarkerManager这是Struts 2内建的FreeMarker管理器。
struts.freemarker.wrapper.altMap 该属性只支持true和false两个属性值默认值是true。
通常无需修改该属性值。
struts.xslt.nocache 该属性指定XSLT Result是否使用样式表缓存。
当应用处于开发阶段时该属性通常被设置为true当应用处于产品使用阶段时该属性通常被设置为false。
struts.configuration.files 该属性指定Struts 2框架默认加载的配置文件如果需要指定默认加载多个配置文件则多个配置文件的文件名之间以英文逗号隔开。
该属性的默认值为struts- default.xmlstruts-plugin.xmlstruts.xml看到该属性值读者应该明白为什么Struts 2框架默认加载struts.xml文件了。
Struts2 要点笔记三 十三、Struts2的处理流程 request—gtStrutsPrepareAndExecuteFilterInterceptorStruts2内置的一些拦截器或用户自定义拦截器Action用户编写的Action类似Struts1中的ActionResult类似Struts1中的forwardJsp/Htmlresponse StrutsPrepareAndExccuterFilter是Struts2框架的核心控制器它负责拦截由lturl-patterngt/lt/url-patterngt指定的所有用户请求当用户请求到达时该Filter会过滤用户的请求。
默认情况下如果用户请求的路径不带后缀或者后缀以.action结尾这时请求将被转入Struts2框架处理否则Struts2框架将过滤该请求的处理。
当请求转入Struts2框架处理时会经过一系列的拦截器然后再转到Action。
与Struts1不同Struts2对用户每一次请求都会创建一个Action所以Struts2的Action是线程安全的 十四、Struts2指定多个配置文件 将配置文件以模块进行划分然后通过include导入 ltxml versionquot1.0quot encodingquotUTF-8quot gt ltDOCTYPE struts PUBLIC quot-//Apache Software Foundation//DTD Struts Configuration 2.0//ENquot quothttp://struts.apache.org/dtds/struts-2.0.dtdquotgt ltstrutsgt ltinclude filequotstruts-user.xmlquotgtlt/includegt ltinclude filequotstruts-trade.xmlquotgtlt/includegt lt/strutsgt 十五、Struts2动态方法调用在Struts2.1版本文档中已经不推荐使用了 如果在action中存在多个方法时我们可以使用方法方法名调用指定的方法如下 public class HelloWorldAction private String message public String getMessage return message public String execute throws Exception this.message “我是execute方法” return “success” public String other throw Exception this.message “我是other方法” 假设访问上面的action的URL路径为/struts2/test/helloworld.action 要访问action的other方法我们可以这样调用 /struts2/test/helloworldother.action 如果不想使用动态方法调用我们可以通过常量 struts.enable.DynamicMethodInvocation关闭动态方法调用. ltconstant name”struts.enable.DynamicMethodInvocation” value”false”/gt Struts2使用通配符定义action官方推荐 ltpackage name”employee” namespace”/control/employee” extends”struts-default”gt ltaction name”list_” class”cn.itcast.action.HellWorldAction method”1”gt ltresult name”success”gt /WEB-INF/page/message.
jsp lt/resultgt lt/actiongt lt/packagegt 注 a. 通配符可以添加多个如: list___ b. method”1” 表示取第一个 c. 通配符可以放置多个地方如 class、result中 十六、Struts2 请求参数的接受 以下两种方法当参数比较多的时候用第一种方法将会发现action中有很多setter、getter方法这样不利于阅读action所以建议使用第二种。
a. 采用基本类型接收请求参数get/post 在Action类中定义与请求参数同名的属性Struts2便能接受请求参数并赋值给同名属性 如请求路径http://localhost:8080/test/view.actionid78 public class ProductAction private Integer id //struts2通过反射技术调用与请求参数同名的属性的setter方法来获取请求参数值 public void setIdInteger id this.id id public Integer getId return id b. 采用符合类型接收请求参数 如请求路径http://localhost:8080/test/view.actionproduct.id78 public class ProductAction private Product product public void setProductProduct product .