尚学堂马士兵Struts2教学视频之Struts2学习笔记
Struts2学习笔记
Struts2项目的构建与配置 (2)1. 配置struts.xml (2)2. 配置web.xml (2)3. 配置Struts2的jar包 (2)Struts.xml的配置 (2)1. <package>的属性与配置 (2)2. <action>的属性与配置 (3)3. <result>的属性与配置 (5)4. <include>的属性与配置 (6)5. <constant>配置struts.properties (6)6. <exception-mapping>与<global-exception-mapping> (6)7. <default-class-ref> (6)8. <default-action-ref> (6)9. <default-interceptor-ref> (7)10. <interceptors> (7)11. <interceptor-ref> (7)12. <global-results> (7)Struts的常见问题 (7)1. 超链接路径问题的说明 (7)2. 声明式的异常处理 (8)3. i18n国际化 (8)4. 拦截器 (8)5. 类型转换 (9)OGNL表达式 (10)1. 访问值栈中action的属性 (10)2. 访问方法 (10)3. 访问集合 (11)4. 投影(过滤的作用) (11)5. 使用“[]”访问元素 (11)Struts2的标签 (11)1. $、#、%的区别 (11)2. 控制标签 (11)3. 数据输出标签 (12)4. 通用标签 (13)5. HTML非表单标签 (13)6. HTML表单标签(很少用) (14)7. AJAX标签(很少用) (15)作者:李志伟编写完成时间:2013-11-21Struts2项目的构建与配置1.配置struts.xml(1)struts.xml文件位置:在项目的src目录下创建该文件,并配置。
Struts2学习笔记
Struts1是一个优秀的框架,但是还是具有很多不好的地方,如Action和ActionForm严重倚赖系统框架中的API。
如ActionForm必须继承ActionForm,Action控制器继承Action,测试麻烦。
Struts2是基于webwork发展而来,并非struts1使用MyEclipse8.5版本,可自动添加依赖struts2的系统库Struts2原理:说明:Struts2没使用Servlet作为核心控制器,而是换做一个Filter过滤器来进行,其类是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 过滤器所拦截的请求是<url-pattern>/*</ url-pattern>(当然根据版本的不同,过滤器类也不同,如Org.apache.Struts2.dispatcher.FilterDispatcher)如果请求中带有.action或.do,则转入Struts2框架处理。
配置文件:Web.xml中:<filter><filter-name>struts2</filter-name><!-版本不同这里的配置不同-→<!—<filter-class>Org.apache.Struts2.dispatcher.FilterDispatcher</filter-class>→<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFi lter</filter-class><init-param><param-name>config</param-name><param-value>struts-default.xml,struts-plugin.xml,../struts.xml </param-value></init-param></filter><filter-mapping><filter-name>struts2</ filter-name><url-pattern>/*</ url-pattern></filter-mapping>Struts.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""/dtds/struts-2.1.dtd"> <struts><!—这个package可以处理文件同名的情况,一般不会更换-- ><package name="default"extends="struts-default"namespace="\"> <action name="Login"class="com.test.action.LoginAction"><result name="cheng">/index.jsp</result><result name="bai">/fail.jsp</result></action></package></struts>配置文件说明:1、package中的name为了区分不同的包2、extends是继承的包名3、namespace是提交时区分的地址,如namespace=”user”,则提交时需要加入action=”/user/xxx.action”控制其中的代码,其中数据直接封装和页面表单元素名称对应。
struts2学习笔记(部分)
1、namespaece(最好用模块的名字命名)Namespace 为空时,用于处理其他package不能处理的全部的action2、Package 用于区分重名的情况3、copy项目的方法及注意事项修改它的启动项引入别人的项目的方法4、action4`1修改文件的默认编码4`2每次访问action都重新new出一个新的对象,不存在同步的问题执行过程4`3Action 继承ActionSupport5、路径:获取系统绝对路径<% String context = request.getContextPath(); %><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>使用绝对路径6、ActionMethod动态调用方法7、ActionWildcard通配符使用通配符,将配置量减到最低约定优于配置8、数值传递ActionAttrParamInputDomainModelDrivenModel过程9、中文问题 2.1.6.的bug不能解决中文问题10、11、value stack值栈< s:property value=“Name”/>取值栈中的数值如:< s:property value=“error”/>< s:property value=“[0]Propertyvalue是一个map,name就是key name is error 就是value 13、访问页面元素访问Stack Context中的元素14、include,模块包含15、认Action (好处:访问不存在时自动跳转带默认页)Default-action-ref默认action引用16、result类型1)默认是dispatcher 常用服务器端跳转2)Rdiect 只能是视图不能是action 客户端跳转,最后显示jsp3)Chain ---forwordaction action前不可以加”/”action之间的跳转,最后显示action4)RedirectAction action跳转,最后显示jsp服务器断的跳转:17、Global_ResultExtends =“要继承的包名“Result name属性:18、取value stack中的值动态绑定的。
struts2学习笔记
(3).
HttpServletRequest request=ServletActionContext.getRequest();//得到request
(4).实现ServletRequestAware等
国际化实现中英文切换:
两个超链接:<s:a action="changeLanguage?flag=zh">中文</s:a>
<s:a action="changeLanguage?flag=en">英文</s:a>
ChangeLanguageAction中内容:
public class ChangeLanguageAction {
{
struts.i18n.encoding=UTF-8 //设置编码格式
}
6.重定向跳转也可传Action中的属性值
<param name="username">${ername}</param>
7.struts2 中设置request ,session,application值
locale=;
context.setLocale(locale);
}
context.getSession().put("WW_TRANS_I18N_LOCALE",locale);
//必须将此WW_TRANS_I18N_LOCALE存放在session中
return "input";
}
}
11.struts2 文件上传下载,下载时需配置如下
struts2学习笔记
1.包头的设置name是struts的包,与Java的包名效果类似,但不是按项目中SRC中包名设置的。
namescape是该包的命名空间。
将作为访问该报Action的路径的一部分。
默认命名空间为namescape=””;假设form 表单提交给helloworld的action ,其action=”/test/helloworld”exctends是表示该包继承的其他包struts_default是任何包都必须继承的包。
否则无法使用struts的核心功能,比如参数上传到action,文件上传,数据校验等。
abstract=”true”定义为抽象包,不得包含Action。
2.action的查找顺序(1)寻找namespace为path1/path2/path3/的包,有这个包:寻找test的Action有这个action:执行没有这个action:寻找namespace为””的命名空间(默认命名空间)是否有这action,没有的话提示找不到action没有这个包:寻找namespace为path1/path2/的包重复(1)步骤。
3.action的默认属性4.Action中各种result的转发类型dispatcher(默认类型)redirect(重定向)redirectAction (重定向到新的Action)plainText (显示原始文件内容)result转发还可包含参数,该参数取自Action中的属性。
例:<action name=”login” class=”xxxx.xxx.xxx.sdsds”><result name=”sucess”> /aaa.jsp?username=${ssss}</result></action>其中ssss是login这个Action中所必须具有的属性redirect书写格式1.<result name=”sucess” type=”redirectAction”>login</result>该写法只能访问位于同一包中的Action;2. <result name=”sucess” type=”redirectAction”><parma name=”actionname”>login</parama><parma name=”namespace”>/xxxxx</parama></result>该写法可访问位于其他包的ActionplainText书写格式1.<result type=”plainText”>/login.jsp</result>2. <result type=” plainText”><parma name=”location”>/login.jsp</parama><parma name=”charSet”>UTF-8</parama></result>全局转发只能在包内定义全局转发。
struts2学习笔记
Struts2 框架第一天今天重点内容:1、什么是Struts2框架?框架特性分析2、struts2 快速入门(分析struts2 运行原理)3、struts2 常用配置4、如何访问Struts2 Action (Servlet)5、Struts2 结果集使用(响应跳转/ajax)1.Struts2 框架概述1.1.什么是struts2Struts2 框架问题:什么是框架?为什么要学习框架?框架是一些已经写好代码,通常和具体业务无关(可以看成:软件的半成品)学习框架,提高开发效率,简化开发(应用框架,实现代码代码开发实现开发标准化)javaEE三层结构在web阶段DAO模式符合JA V AEE三层结构的三层结构出自JavaEE规范(体系结构图)表现层⏹业务层⏹持久层/集成层Struts2 是一个表现层框架(简化表现层代码开发)分层开发:代码结构更加清晰,为了更好维护和扩展1.2.struts2 由来由两个框架优点合并后发展而来(struts1 + webwork)历史由来:Java兴起98年(最早进行java开发分方向j2se 、j2ee、j2me )J2EE 企业级应用软件开发2000 年左右出现struts1 (几乎所有开发人员都在用)随着互联网的发展struts1 设计慢慢开始存有缺陷和不足Webwork框架的出现该框架的设计思想比struts1 先进的多,例如:引入拦截器机制、ognl 表达式语言Apache 推出struts2 框架,特点: 开发流程类似struts1 ,内部结构类似webwork (struts2 和webwork 源自xwork 命令模式框架)1.3.struts2 开发包结构使用框架,导入jar包课程使用struts-2.3.15.3-all.zip 版本学习apps 使用demo (方便后期快速导入jar包和配置文件)开发中war重命名成zip包解压找到里面的13个核心jar包doc 文档(学习struts2的官方官方规范文档)lib 开发struts2 需要的所有jar包src 源代码开发struts2 没必要导入lib下128个jar包(去struts2_blank.war下方找struts2 最基本jar)将war包改为zip 扩展名,解压缩回顾jar记忆: 核心struts2-core-3.15.3.jar+ xwork-core+ognl (3) 上传(2jar) 日志: 2 jar 字符串lang 1 asm.* 3 jar 处理字节码信息javassist.jar 1 代理相关freemarker 1 jar 图形模板引擎开发strutrs2 基包导入web 工程!1.4.struts2入门理论JavaEE设计模式:前端控制器模式过滤器模式访问如图:前段控制器作用: 请求分发!通过struts.xml配置给指定Actionstruts前端控制器:开发中将所有的重复的代码提前到前端控制器去完成,在Action 中只要写不重复业务处理代码!编写快速入门开发流程说明2.Struts2快速入门案例第一步:在myeclipse 新建web project选择javaee版本,课程优先5.0 ------ myeclipse2014 servlet 版本2.5 采用JDK6 编译器第二步:导入struts2 开发jar包apps/struts2_blank.war/WEB-INF/lib/ 13个jar包asm-* 字节码操作类库(.class文件)commons-fileupload 文件上传依赖commons-iocommons-lang3 对字符串、数据操作公共方法commons-logging Java通用日志接口,依赖日志实现log4j freemarker 模板引擎(struts2标签库,依赖freemarker )javassist 生成代理ognl 表达式语言(比EL强大很多倍)struts2-core 核心jar包xwork-core struts2和webwork依赖命令模式框架2: 配置web.xml3:配置struts.xml 推荐找到2.3.15.jar --> apps 目录:struts-blank自带struts.xml 文件导入!编写HelloAction (类似之前写的Servlet )5 struts.xml 注册action 和请求资源虚拟路径映射!访问该action http://localhost/strut2_day01/hellAction运行流程分析图解:3.分析struts2运行原理Struts2 核心控制器Struts Prepare And Execute Filter (准备和执行)-------- 前端控制器模式查看系统执行默认一组拦截器打开文档: struts2核心jar 内struts-default.xml系统执行前端控制器根据struts-default.xml 配置文件配置默认拦截器栈执行一组拦截器然后再执行目标Action -->execute 方法!请求---执行一堆拦截器组件(业务功能)---- 具体ActionStruts2 可以复用代码功能,基于Interceptor 实现的问题:执行了哪些拦截器?小结原理:1: 通过web.xml 配置前端控制器2: 前端控制器执行一组拦截器通过struts.xml 访问具体action 执行业务方法3: action execute 方法返回字符串结果页面跳转!拦截器组件执行顺序:参考struts-core.jar 提供struts-default.xml 配置文件默认情况下,访问每个Action ,defaultStack 都会执行!每个拦截器都会被调用,一些重复功能,由拦截器去实现的!!!问题: 是否是struts2 开发每一次请求都会执行拦截器?拦截器并不是每次都执行!! 看访问资源的!1: 访问资源目标是一个Action 组件必然会调用拦截器然后执行action ' 2: 如果访问是jsp/html 静态资源前端控制器不会调用默认拦截器栈的!拦截器只针对Action 有效!3.1.配置struts.xml DTD提示struts.xml 引入DTD约束(限制如何配置这个文件)⏹如果电脑可以联网,自动从网上下载DTD,缓存提供提示⏹如果电脑没有联网,在本地配置DTD文件位置,提供本地提示struts-2.3.15.3\src\core\src\main\resources文件struts.xml关闭重新打开有自动提示标签!4.struts2 常用配置文件了解前端控制器在容器启动的时候执行哪些配置文件的加载! 配置文件源码分析流程: 分析StrutsPreparedAndExecuteFilter先加载*.properties 然后再加载*.xml 配置文件properties:配置框架启动一些基本配置信息: 比如: 请求虚拟路径配置乱码配置..... default.properties : 框架加载的默认配置信息其次加载xml 文件: 三个struts-default.xml : 核心包下struts-plugin.xml : struts 和第三方插件整合的时候加载插件配置文件举例: struts-json-plugin.jarstruts2 + json 整合整合第三方插件配置文件.struts.xml: 用户自定义配置文件: 可以重写上述框架配置文件信息以及用户开发相关信息: action exception result .... 小节: 容器一旦启动: 加载xxx.properties 又加载三个xml ...继续加载src 必须名称叫做struts.properties配置文件修改: default.properties 信息4.1.框架配置文件配置文件加载顺序通过源码跟踪执行主要的配置文件哪些?init 容器启动的时候加载配置文件!!跟踪dispatcher.init();配置文件的加载顺序!! 核心defalust.properties [1] struts-default.xml struts-plugins.xml struts.xml [2] struts.properies[3](修改框架默认配置信息)⏹Struts2 常量配置文件⏹default.properties (框架执行加载配置信息) struts-core jar包org.apache.struts2 包下⏹项目默认配置信息!!!⏹Struts2 框架内置核心配置文件struts-core jar包struts-default.xml 拦截器结果集⏹(Bean元素、结果集类型、拦截器… )在struts2框架体系中,package 实现一些配置复用,编写子包继承struts-default⏹Struts2 框架插件配置文件位于每个插件包根目录struts-plugin.xml扩展一些插件配置用户自定义配置因为开发中往往需要更改框架默认配置信息参数⏹在用户项目src目录struts.xml ,推荐使用!进行用户开发相关配置⏹⏹用户也可以添加properties 修改框架默认加载信息!!⏹在用户项目src目录struts.properties ,文件名不能修改!⏹用户自己常量配置文件default.properties 不推荐!⏹在web.xml 配置struts2 常量(更不推荐)规则:后加载配置文件,配置内容,可以覆盖之前加载配置内容!!!开发人员主要采用struts.xml 或者struts.propertiesstruts.properties (只能配置常量)struts.xml 修改struts.xml添加标签<constant name="" value=""></constant>测试通过struts.xml 或者自定义struts.properties 修改框架加载的默认配置信息!! 修改访问路径扩展名struts.action.extension=action,, 改成自己的扩展名4.2.小节配置文件1: default.properties : 框架加载默认配置信息如果用户需要修改推荐: struts.xml 引入<constant 标签name="key"> 2: TranditionXml :struts-default.xml : 定义struts2 大量结果集以及拦截器配置和工厂Bean : 使用默认拦截器和结果集跳转程序员在struts.xml 使用<package extends="struts-default"> 使用struts2 提供结果集和拦截器3: struts-plugin.xml : 整合第三方插件: 如果需要使用第三方插件: 程序员在struts.xml <package extends="xxx插件包名称">4: struts.xml : 定义用户自己的配置信息:4.3.详细分析Action相关映射配置Struts2 提供前端控制器,采用请求分发思想,将不同url请求,分配给不同Action进行处理,需要在struts.xml 配置请求路径和Action 映射关系!问题:struts2 package作用Package可以用来管理Action,实现包内配置复用(通过包继承实现)struts-default.xml 定义一个package包内定义大量结果集类型和拦截器用户开发package 通常继承struts-default 包name属性:包名称,在struts容器具有唯一性(在开发中可以用模块名称作为包名)namespace 属性:名称空间区分重复性举例:如果两个包存在同名Action ,需要名称空间区分action访问路径访问上面Action 应用名称空间http://localhost/struts2_day01/demo2/hello.action4.4.struts2 常量配置在struts2 六种配置文件中,都可以配置struts2 常量,后加载配置文件常量可以对先加载配置文件进行覆盖!常用常量分析1、struts.i18n.encoding=UTF-8相当于request.setCharacterEncoding(“utf-8”); 解决post 请求乱码问题Struts2开发时,无需关注post 乱码问题2、struts.action.extension=action,,Action请求映射路径默认扩展名问题:http://localhost:8080/struts2_day1/hello 也可以访问HelloAction如果请求路径必须以.action结尾3、struts.configuration.xml.reload=true修改struts.xml 配置后,无需重启服务器当设置devMode =true 激活xml自动重新加载4、struts.ui.theme=xhtml设置页面标签显示样式// struts-tag 标签库5、struts.objectFactory=struts负责创建Action对象类6、struts.enable.DynamicMethodInvocation=true // 默认是false访问Action 支持动态方法调用访问action组件可以采用动态调用的方式进行.配置文件分离,在大型项目中,因为如果使用一个配置文件,需要配置很多Action,不方便维护,struts.xml 提供<include> 标签,将配置分离出去5.访问Action5.1.Action 三种书写格式第一种写法,编写自定义Action类,实现Action接口Action 接口提供execute 处理业务逻辑方法1: 实现Action 接口!!struts.xml配置访问: Action http://localhost/struts2_day01/helloAction第二种写法:编写自定义Action 继承ActionSupport 类(间接实现Action接口)ActionSupport 类的特点:源码:添加了更多的接口实现ActionSupport 提供更多功能(数据校验、国际化…)编码:struts.xml 配置注册!注意DTD 约束规范逗号表示标签书写顺序!访问action http://localhost/struts2_day01/helloAction2第三种特殊写法:POJO plain old java object写法domain--->充当Action 场景: 请求封装对象本身就是javaBeanUser --->== Action提供一个execute 方法struts.xml 配置http://localhost:8099/struts2_day01/helloUserPOJO(Plain Old Java Object)简单的Java对象,实际就是普通JavaBeans 小结:5.2.关于Action的业务方法说明5.2.1.通配符的使用1: 访问指定业务方法<action 标签添加method ="对应Action中指定方法名称">配置struts.xml 注意每一个method属性值匹配Action具体的方法名称问题: 如果目标Action 方法业务过多struts.xml 引入多个action 标签重复性很高!如何简化struts.xml 配置??解决方案: 2种简化: 1: 通配符(重点) 2: 动态方法调用(掌握)5.2.2.通过设置method属性,执行Action不同业务方法设置method属性,指定调用Action 组件的对应方法启示:可以在一个Action中编写多个业务方法,在访问时,通过method 区别5.2.3.使用通配符简化路径和Action业务方法映射配置案例1: index.jsp 搭建请求访问Action 编写注意: 星的和占位符{1} {2} struts.xml{1} 对应name中第一个* 匹配的内容--->方法名称演示 2 颗星使用index.jsp 引入多个模块struts.xml 配置可以简化多个模块配置引入2颗星第一颗表示类名第二颗表示方法名称修改请求地址index.jsp测试!通配符完成!5.2.4.动态方法调用动态方法调用,效果类似通配符玩法,无需配置method 属性举例:在新版本struts2 中动态方法调用,默认是关闭的演示动态方法调用:编写:index.jsp注意请求资源地址的路径写法: ! 编写ProductAction配置struts.xml 完成配置最后开启动态方法调用配置查看默认的default.properties默认是关闭的在自己的strut.xml 开启测试完成!5.3.Action访问Servlet 相关API5.3.1.Action与ServletAPI 解耦合方式调用Servlet API doGet(HttpServletRequest, HttpServletReponse)--- Servlet 依赖request和response (代码中直接依赖---- 耦合)Struts2 设计思想与Servlet API 解耦合,编写Action 中不再直接依赖Servlet 任何APIStruts2 提供ActionContext 类(Action 上下文)上下文:与容器相关,获取容器相关对象、信息---- 工具类提供大量间接操作Servlet API (request、response、session、application)方法5.3.2.Action 直接操作Servlet API方式一:接口注入Servlet APIindex.jsp编写入口2:struts.xml 引入其他配置文件信息主文件: struts.xml模块化文件: myservlet.xml注意子文件不能和其他文件包名冲突3: 采用指定接口注入获取对应servlet api 对象。
Struts2课堂笔记2
一:Struts2标签库
2. Generic Tag
二:OGNL
值栈的含义正如它的名字所表示的那样——对象所组成的栈。
OGNL的全称是Object
Graph Navigational Language(对象图导航语言),提供了访问值栈中对象的统一方式。
它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
几个概念
1. ActionContext: ActionContext是Action上下文,可以得到request session application
一次Action调用都会创建一个ActionContext
调用:ActionContext context = ActionContext.getContext()
2. ValueStack: 是值栈存放表单中的值
由OGNL框架实现, 可以把它简单的看作一个List
3. Stack Object:放入stack中的对象,一般是action。
Stack Context stack上下文也是用来存值的
Stack Context(map):stack上下文,它包含一些列对象,包括request/session/attr/application map等。
马士兵Struts2学习笔记
1noitcAnigoL A COI�者三后 .4 器容于赖依�者三后 .3 )种这用只( COI�者三前 .2 器容于赖依�者三前 .1 :用引的txetnoCtelvreS ,noisseSpttH ,tseuqeRtelvreSpttH 型类实真,noitacilppa,noisses,tseuqer型类paM得取 …点重 ) stnemelEbeWsseccA_0021_2sturtS( 素元面页问访 .21
>tluser/<psj.sseccus_dda_resu/>tluser<
>noitca/<
>egakcap/<
用调态动IMD dohteMnoitcA .5
>a/<psj.xedni>"psj.xedni"=ferh a< >daeh/< … ………
ecroFXevoL yb 71:15:0 6-7-0102 记笔课听 2sturtS_兵士马堂学尚
象对 troppuSnoitcA 行执则,””=ssalc 有没
ecroFXevoL yb 71:15:0 6-7-0102 记笔课听 2sturtS_兵士马堂学尚
> "xedni"=eman noitca<
3
{ )(dda gnirtS cilbup ;resu resU etavirp
noitca应对 >a/<户用加添>"8=ega.resu&a=eman.resu?dda!resu/resu"=ferh a<数参收接ledoM niamoD用使 )tupnImaraPledoMniamoD_0080_2sturtS( 数参收接型模域ledoMniamoD用
struts2学习笔记2
11.Result配置详解说明:在前面的许多案例中我们所用到的Action基本都继承自ActionSupport这个类,而在这个类中我们定义了五个字段:SUCCESS,NONE,ERROR,INPUT,LOGING。
我们可以直接返回这些字段值,这些字段值实质是被定义成:String SUCCESS=”success”这样的形式,所以我们只要在Result元素中用它们的小写即可。
<result>标准完整形式如下:<result name="success" type="dispatcher"><param name="location">/default.jsp</param></result>如果我们都采用默认的形式,最终可以简写成:<result>/default.jsp</result>探讨type类型:以上对type 类型作简要的说明,下面来看实例:当一个Action 处理后要返回的Result 是另一个Action 时,作如何配置,关键就是配置type 类型。
步骤一:建立两个Action:TestAction 、Test2Action步骤二:web.xml 配置省略。
struts.xml 主要配置内容如下:<struts ><package name ="resultTest" extends ="struts-default"><action name ="test" class ="com.asm.TestAction"><result name ="success" type ="chain"> <param name ="actionName">test2</param ></result></action><action name="test2" class="com.asm.Test2Action"><result name="success">/test2Suc.jsp</result></action></package></struts>说明:在名为“test”的action中,我们配置result元素的type类型值为chain,意为将继续把Action传递到下一个名为test2的Action中去,在test2.action中会把页面转向到test2Suc.jsp中去。
尚学堂-马士兵Struts2教学视频之Struts2 学习笔记
Struts2 学习笔记---wjt276 [二○一○年一月五日完]目录01 Struts2-Action (5)一、Struts作用: (5)二、搭建Struts2的运行环境: (5)三、Namespace (6)四、<package>标签 (6)五、Action (6)六、路径问题的说明 (8)七、Action的动态调用方法 (8)八、Action通配符(wildcard)的配置 (9)九、Action的属性接收参数 (10)1、在Action添加成员属性接受参数 (10)2、域模型(Domain Model) (10)3、ModelDriven接收参数 (11)十、Action属性接收参数中文问题 (12)十一、简单数据验证 (12)十二、访问Web元素 (14)一、方法一:ActionContext方式 (15)二、方式二:Ioc(控制反转)—推荐使用 (15)三、方式三:获取原类型 (16)四、方式四:获取原类型-控制反转 (17)十三、Struts2配置文件模块化包含(include) (17)十四、默认的Action (18)十五、Action总结 (18)02 Struts2-Result (19)一、Result类型 (type) (19)二、全局结果集(Globle Result) (20)三、动态的结果集(dynamic result) (21)四、带参数的结果集 (21)五、Result总结 (22)六、项目经理: (22)03 OGNL表达式语言 (23)04 Struts2-Tags (28)Struts2标签目录 (28)一、property标签 (28)二、set标签 (29)三、bean标签 (29)四、<include>标签-少使用 (29)五、If elseif else (30)六、Iterator标签 (31)七、Theme (31)05设计约定(编码规定) (32)06 项目开发顺序 (32)07 声明式异常处理 (33)08 国际化 (35)一、国际化资源文件 (35)二、Java国际化 (35)Struts学习笔记第3页共39页三、Struts2国际化 (35)1、Action级别 (35)2、Package级别 (36)3、Application级别 (36)四、资源文件中的参数处理 (37)五、国际化-动态语言切换 (37)09 自定义拦截器 (38)10 类型转换 (38)Struts2总结 (39)目录Action⏹简单数据校验Result常用配置文件OGNL & ValueStackTags---------------------Project⏹类型转换、上传与下载、interceptor、防止重复提交 MVC思想深入剖析源码解读其他话题01 Struts2-Action一、Struts作用:将请求与结果分开二、搭建Struts2的运行环境:1、建立Web项目;2、建立Struts2的配置文件(struts.xml);将Struts2的空项目中的配置文件(struts.xml)复制到项目的src目录下。
struts2学习笔记
struts2 的处理流程: 核心控制器(StrutsPrepareAndExecuteFilter)--->Interceptor--->action---->业务逻辑层--->dao 层
一.struts2 核心文件 struts.xml 的配置
<package name="struts2" namespace="" extends="struts-default"> <action name="sum" class="com.alex.FirstAction"> <result name="positive">/positive.jsp</result> <result name="negative">/negative.jsp</result> </action> <constant name="struts.action.extension" value="jun,lu"/> <!--指定需要 Struts 2 处理的请求后缀,多个之间用逗号分开--> <constant name="struts.enable.DynamicMethodInvocation" value="false"/> <!--关闭动态方法调用。--> <constant name="struts.custom.i18n.resources" value="message"/> </package> 说明:space 声明命名空间。这里和表单提交的要保持一致。例如: namespace="/mystruts" 那么在表单提交的时候应该<s:form action="mystruts/sum.action" > namespace="" 那么在表单提交的时候应该<s:form action="sum.action" > 2.<action name="sum" class="com.alex.FirstAction"> class 便是对应的 Action 类 name 对应 action 的唯一标识。和表单提交时保持一致。例如: name="yj" 那么在表单提交的时候应该<s:form action="yj" > 3.<result name="positive">/positive.jsp</result> 判断跳到哪一个页面,其中 name 是唯一标识。和"com.alex.FirstAction"的返回值进 行对比。相同就跳到相应的页面 4. <constant name="struts.custom.i18n.resources" value="message"/> 配置常量 资源文件--> 1.Action 范围:类名.properties (在国际化的时候,那么就应该是:类名_zh_CN.properties ) //配置一些类型转换错误信息和其他的信息 2.包范围:package.properties 需要放在包下面,只能被该包和子包访问 (在国际化的时候,那么就应该是:package_zh_CN.properties ) 3.全局范围:通过 struts.custom.i18n.resources 来定义全局资源文件,比如在 struts.xml 中配置: <constant name="struts.custom.i18n.resources" value="message"/> 那么全局资源文件就是 message.properties
struts2学习笔记
7. Struts1 的配置文件只需 struts-config.xml;Struts2 的配置文件有 struts.xml 和 struts.properties。struts.properties 中有两个 struts.devMode = fase 和 struts.configuration.xml.reload = true 很可爱,分别设置当前是开发还是生产模式,以及 struts.xml 改变后是否自动重新加载,免去了改配置手工重启应用的必须步骤。
Struts2 学习笔记(四)
1. 按这个顺序加载 Struts2 的常量,struts-default.xml、struts-plugin.xml、struts.xml、web.xml;后加载的会覆盖前面的同名常量。强烈不推荐在 web.xml 中配置 Struts2 常量。
2. Struts1 中有一种 Action 类型是 ForwardAction,而在 Struts2 中相应的配置方式是 <action name="Showcase"><result>/showcase.jsp</result></action>,Showcase.action 直接映射到 /showcase.jsp。
3. Struts1 的 Action 须继承抽象 Action 类,侵入了 Servlet API;而 Struts2 的 Action 可以实现 ActionSupport,或者只要一个纯净的 POJO 来充当,完全与 Servlet 绝缘。也因此带来测试性 Struts2 要比 Struts1 强,可把 Struts TestCase 扔到一旁去了。
struts2学习笔记2
Struts学习1.2一、类型转换a)可以继承DefaultTypeConverter或StrutsTypeConverter类,也可以直接实现TypeConverter接口b)直接实现TypeConverter接口(这里不对该方法进行着重理解)i.需要重写下面的方法convertValue(Map<String,Object> context, Object target, Member member, StringpropertyName, Object value, Class toType)c)继承DefaultTypeConverter类i.需要重写下面的方法convertValue(Map<String,Object> context, Object value, Class toType) ii.该方法的返回值就是Action类中的属性的值iii.参数value---String[]要转化的值,该值是字符串类型的数组,strus2底层用request.getParameterValues("属性名")iv.参数toType要转化的数据类型,这里是java.util.Date.class类型d)实现思路i.在上面的方法中判断value是否为空,并且length是否大于0,如果两个条件都满足,如果两者有一个不满足就返回nullii.再判断toType是否为空,如果为空则返回null,如果不为空,则要判断一下是否是我们要转换的类型(toType!=java.util.Date.class)如果不是,则返回nulliii.如果上面两个值都不为空,并且length也大于0,则开始判断value是否是String[](value instanceof String[])如果这个条件为true,我们再执行iv.遍历value字符串数组,开始我们的转换v.最后需要编写一个properties资源文件,该文件放置到和当前Action同一个包下,内容是:Key Value要转换的目标类型当前转换器所在的完整类路径二、文件上传a)首先我们知道Struts2中是利用apache上传组件来完成的文件上传功能,Struts2对该组件又进行了一次封装,所以用起来更加灵活,方便,简单b)主要的三个字段(提供getter和setter方法):i.[File Name]:File类型,通常是HTML页面中input的name属性的值,保存上传的临时目录下的文件---------File - the actual Fileii.[File Name]ContentType:String类型,必须是HTML页面中input的name属性的值+ContentType,保存了上传文件的类型---------String - the content type ofthe fileiii.[File Name]FileName:String类型,通常是HTML页面中的input的name属性的值+FileName,保存了上传文件的真实名称---------String - the actual name ofthe file uploaded (not the HTML name)c)有了以上的三个段,我们可以用ServletContext对象获取上传文件保存的目录i.ServletContext realPath =ServletActionContext.getServletContext().getRealPath("/upload");ii.通常apache上传组件中的IO包里的FileUtils工具类,利用该类下的copyFile()方法,我们可以将临时文件复制到实际目录下iii.copyFile(File srcFile, File destFile)该方法有两个参数,参数一:源文件,我们这里是三个主要字段的第一个FileName;参数二:该参数要一个File对象,我们可以这样写(new File(realPath ,[File Name]FileName))里面的第一个参数是要保存文件的目录,我们通过ServletContext获取到的,第二个参数是三个主要字段的第三个(真实的文件名称)d)最后上传成功后,再将保存的临时文件夹下的临时文件删除掉i.代码:[File Name].delete();e)配置Struts.xmli.在Action中要配置两个结果:<result name="success">/upload/success.jsp</result><result name="input">/upload/error.jsp</result> ii.其中第一行,表示程序运行成功时,转到success.jsp;第二行表示程序运行失败时,转到error.jspiii.更改临时文件的存放目录<constant name="struts.multipart.saveDir"value="D:/temp"></constant>iv.配置上传文件的总开关,这里的配置对当前web应用的所有的上传都有效,默认上传大小是2M<constant name="struts.multipart.maxSize"value="222097152"></constant>v.以上的配置是对全局生效的方式,以下来看一下对局部生效的方式:f)更改文件上传失败的提示:Key Valuestruts.messages.error.uploading 上传失败: {0}rge 文件太大: {0} "{1}" "{2}" {3}struts.messages.error.content.type.not.allowed 内容类型不允许: {0} "{1}" "{2}"{3}struts.messages.error.file.extension.not.allowed 扩展名不允许: {0} "{1}" "{2}" {3} 三、自定义拦截器a)要定义自定义拦截器,需要实现Interceptor接口,重写里面的三个方法,三个方法分别为:init()、intercept(ActionInvocation invocation)、destroy()这三个方法代表了拦截器的生命周期b)参数ActionInvocation: 代表一个给定动作的执行状态, 拦截器可以从该类的对象里获得与该动作相关联的Action对象和Result对象,在完成拦截器自己的任务之后,拦截器将调用ActionInvocation对象的invoke方法前进到Action处理流程的下一个环节 ActionInvocation:封装了程序运行上下文信息,[action result...]c)如:获取一些上下文的信息i.获取当前Action名称:invocation.getProxy().getActionName()ii.获取命名空间:invocation.getProxy().getNamespace()iii.获取当前方法:invocation.getProxy().getMethod()iv.获取代理对象:invocation.getProxy()d)在Struts.xml中配置拦截器i.在对应的包下申明一个<interceptors></interceptors>ii.在上面的<interceptors>标签内添加:<!--name属性:自定义拦截器的唯一名称--><interceptor name="limit" class="自定义拦截器完整类路径" /><!--name属性:自定义拦截器栈的唯一名称--><interceptor-stack name="limitStack"><!--name属性:把默认栈添加到自定义栈中--><interceptor-ref name="defaultStack"/><!--name属性:把自定义拦截器添加到自定义栈中--><interceptor-ref name="limit"/></interceptor-stack>iii.在<interceptors>标签后添加引用:<default-interceptor-ref name="limitStack"/>四、表单验证a)代码方式进行表单验证i.要利用Struts2中的内部机制来完成表单验证,需要在当前访问的Action类中重写validate()方法ii.在该方法中对需要验证的字段进行判断,如果不符合条件,则使用this关键字,调用addFieldError()方法,该方法有两个参数,第一个添加进去的字段名,用于在JSP或其它地方取值,第二个参数要一个字符串类型的提示语。
struts2课堂笔记(第一天)
八、 基于注解的struts2 开发
知识结构(原理及流程------>所有配置文件----->重点配置文件(struts.xml)----------->常量配置(还有Action)------>
Action类的编写------>action中方法调用-------->动态方法调用--------->ServletAPI获取三种方法
今天所学:
一、框架概述
二、Struts2开发快速入门
三、struts2 运行流程分析
四、 struts2 常见配置(配置文件加载顺序,struts.xml常用配置,常量配置)
五、 Action的访问(Action的三种编写方法,详细配置Action , 动态方法调用)
六、在Action中使用Servlet API
四、 struts2 常见配置
学习路径
1)、 struts.xml常量配置(配置文件顺序)、Action访问(Servlet API)、结果集 (使用Struts2 编写简单案例)
2)、 请求数据
3)、 响应页面生成
1、 struts2 配置文件的加载顺序
struts2 配置文件 由核心控制器加载 StrutsPrepareAndExecuteFilter (预处理init(),执行过滤)
init_DefaultProperties(); // [1] ---------- org/apache/struts2/default.properties
init_TraditionalXmlConfigurations(); // [2] --- struts-default.xml,struts-plugin.xml,struts.xml
struts2学习笔记
<result name="fail">fail.jsp</result>
</action>
</package>
</struts>
2.6 部署、运行项目
第三章 访问Servlet API
HttpServletRequest/HttpSession/HttpContext
struts2获取的Servlet API的三个对象都是Map
3.1 与Servlet API 解耦访问
com.opensymphony.xwork2.ActionContext
通过ActionContext类获取Servlet API 对象
构造3个Map对象替代这三种对象
3.1.1 public Object get();方法
ActionContext ac=ActionContext.getContext();
Map request=(Map)ac.get("request");
2.1.2 public Map getSession();
private String username="";
private String password="";
public String execute(){
if(){
return "success";
}else{
return "fail";
尚学堂科技 马士兵 Struts 学习小结 v
2)必须勾选“Copy projects into workspace”
3) 唯一可能出现的问题:拷贝项目的 JRE System Library 的存储路径,重新 Configure Build Path 即可 建立第 3 个 Struts2 小项目:Struts2_0300_Action 1、关于 Action 的详述 1)<action> 如果不包含 class 属性,则会自动默认调用
/Struts2_0100_Introduction/WebRoot/WEB-INF/lib 目录 3. 修改 web.xml 文件如下(从 struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\web.xml 拷贝 的):
4. 修改 struts.xml 文件如下:
%> <head> <!-- 设置base标签,当前页面的所有超链接前面都会自动加上basePath --> <base href="<%=basePath%>" /> </head> <body> <a href="index.jsp">index.jsp</a> </body>
建立第 5 个 Struts2 小项目:Struts2_0500_ActionMethod 1、可以为 Action 指定 method 属性,而 class 属性的类 UserAction 中只有一个 add ()方法
建立第 1 个 Struts2 小项目:Struts2_0100_Introduction 1. 拷贝 struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\classes\struts.xml 至项目的源文件夹
Struts2笔记
struts21,struts2框架引入到web项目中1.把struts2相关jar包引入到项目中2.把struts2的配置文件直接放到src下面,名字要叫做struts.xml.(运行时配置文件会被框架自动读取).注意:如果struts.xml文件中不能自动提示标签,把相应的dtd文件配置上去.3.在web.xml文件中配置struts2框架的过滤器.这个过滤器的作用:拦截struts2框架中的action.注意:如果不配置这个filter,struts2框架就不能够工作.第一种filter的配置:struts2框架的2.0版本只能使用的方式<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>第二种filter配置:struts2框架的2.0版本以上使用的方式同时2.0版本以上的也可以使用第一种方式.这个过滤器类是2.0版本以上新增的类.<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-cla ss></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>2.struts2框架中的Actionstruts2框架底层还是封装了Servlet的相关内容而实现出来的.只不过struts2框架除了servlet的功能以外还扩展出了很多其他的功能,同时还大大简化了以前在servlet中繁琐的操作.在struts2框架中有一种类就是用代替以前我们在web项目中所使用到的servlet,那么这种类,在struts2框架中被称为Action.所以Action其实也是一种java类,比servlet功能更加强大,同时还比servlet中的操作简单3.为什么Action有比servlet强大的功能和简洁的操作因为我们在web.xml文件中配置了struts2框架中专门的过滤器,用作拦截访问action的请求,拦截住之后,就可以给Action添加很多丰富的功能了.4.如何写一个strtus2框架中的Action三种方式:1,只需要在类中有一个固定的方法:public String execute(){return "...";}不需要实现或者继承任何接口或父类2,实现指定的一个接口:com.opensymphony.xwork2.Action(这个接口中只有一个抽象方法execute()同时还有5个String类型的静态属性:ERROR SUCCESS INPUT NONE LOGIN)3,继承一个指定的父类:com.opensymphony.xwork2.ActionSupport(注意:这种是我们之后一直使用的方式。
struts2学习笔记
1.15、23__Struts2_模块包含2.<struts>3. <constant name="struts.devMode" value="true" />4. <include file="login.xml" />5.</struts>6.可以将别的写好的配置文件直接包含到struts得配置文件中,方便多人开发避免不必要的配置文件冲突.7.login.xml8.<?xml version="1.0" encoding="UTF-8" ?>9.<!DOCTYPE struts PUBLIC10. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"11. "/dtds/struts-2.0.dtd">12.13.<struts>14. <package name="login" extends="struts-default" namespace="/login">15. <action name="login*" class="er.action.LoginAction{1}">16. <result>/user_login_success.jsp</result>17. </action>18. </package>19.</struts>20.21.16、24__Struts2_默认Action22.<package name="default" namespace="/" extends="struts-default">23. <!-- 当配置文件中没有用户要访问的Aciton的时候,会调用<default-action-ref 所定义的Action --处理错误页面-->24. <default-action-ref name="index"></default-action-ref>25. <action name="index">26. <result>/default.jsp</result>27. </action>28. </package>29.30.17、27__Struts2_结果类型_result_type_131. ResultType的最常用的几种配置:(四种配置分别代表了四种不同的跳转方式)32. <package name="resultTypes" namespace="/r" extends="struts-default">33. <action name="r1">34. <!--type不写默认的为dispatcher:用服务器跳转跳转到结果页面--只能跳转到页面,不能跳转到Action -->35. <result type="dispatcher">/r1.jsp</result>36. </action>37.38. <action name="r2">39. <!--客户端跳转的方式跳转到结果页面只能跳转到页面,不能跳转到Action -->40. <result type="redirect">/r2.jsp</result>41. </action>42.43. <action name="r3">44. <!--服务器跳转的方式跳转到Action -->45. <result type="chain">r1</result>46. </action>47.48. <action name="r4">49. <!--客户端跳转的方式跳转到Action -->50. <result type="redirectAction">r2</result>51. </action>52.<!--当要跳转的Action在别的包下的时候应该这样写-->53. <action name="r5">54. <result type="china">55. <parma name="actionName">dashboard</param>56. <parma name="namespace">/sesure</param>57. </result>58. </action>59.60.18、30__Struts2_Global_Results_全局结果集61. <package name="user" namespace="/user" extends="struts-default">62. <!-- 配置全局的结果集:当返回的result没有配置的时候会执行全局结果集的配置-->63. <global-results>64. <result name="mainpage">/main.jsp</result>65. </global-results>66.67. <action name="index">68. <result>/index.jsp</result>69. </action>70. </package>71.<!--关键字extends的使用:我想在下面的这个配置包中使用上面那个包中的结果集,那么可以使用extends关键字继承上一个包72.<package name="admin" namespace="/admin" extends="user">73. <action name="admin" class="er.action.AdminAction">74. <result>/admin.jsp</result>75. </action>76. </package>77.78.17、31__Struts2_动态结果集_dynamic_result79.可以在strtus.xml文件中动态的指定返回的结果集。
Struts2课堂笔记
Struts2部分学习笔记讲师:梁建全liangjq@目录Day01 (5)一、前言 (5)1、为什么要学习Struts框架 (5)2、如何学习Struts框架 (5)二、MVC在JavaWeb程序的使用 (5)1、什么是MVC? (5)2、为什么使用MVC? (5)3、MVC在JavaWeb中的实现 (5)a、原ShoppingCart程序就是一个MVC结构实现 (5)b、ShoppingCart程序虽然基于MVC,但结构还有一些问题 (5)4、Struts2的主要工作流程 (5)三、Struts2框架的历史 (6)四、Struts2框架基本使用 (6)1、Struts2使用步骤 (6)a、下载发布包,将核心包导入web工程 (6)b、配置Struts2控制器,在src下添加struts.xml、Struts2控制器采用的是StrutsPrepareAndExecuteFilter组件实现。
(6)c、根据请求编写Action,DAO,Entity等组件 (6)2、HelloWord示例 (6)Day02 (7)一、Struts2使用基本规则 (7)1、web.xml配置 (7)2、Action编写规则 (7)3、struts.xml中的Action配置 (7)二、实现一个列表显示功能 (7)1、开发步骤 (7)三、OGNL表达式 (8)1、什么是OGNL (8)2、OGNL工作原理 (8)3、OGNL表达式语法 (8)Day03 (9)一、Struts2框架Action组件的核心应用 (9)1、Action组件基本原理 (9)2、如何在Action中使用request,session,application等对象 (9)3、Action属性注入 (10)4、如何利用一个Action处理多个请求 (10)Day04 (10)一、Result组件原理 (10)1、Result组件的作用 (10)2、Result组件实现规则 (10)3、Result组件的使用 (11)二、常用的几种Result组件 (11)1、JSP响应 (11)2、Action响应 (12)3、流响应 (12)4、JSON响应 (12)Day05 (13)一、Struts2标签 (13)1、通用标签 (13)2、表单标签 (13)二、拦截器组件 (13)1、拦截器组件规则add.action(表单数据)--->params (13)a、拦截器组件的作用(工作流程) (13)b、拦截器组件的使用规则 (14)2、掌握自定义拦截器的使用 (14)3、内置拦截器的使用 (15)Day01一、前言1、为什么要学习Struts框架Struts框架是MVC设计模式的实现,基于Struts开发可以简化开发难度,提高开发效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录01 Struts2-Action (5)一、Struts作用: (5)二、搭建Struts2的运行环境: (5)三、Namespace (6)四、<package>标签 (6)五、Action (6)六、路径问题的说明 (8)七、Action的动态调用方法 (8)八、Action通配符(wildcard)的配置 (9)九、Action的属性接收参数 (10)1、在Action添加成员属性接受参数 (10)2、域模型(Domain Model) (10)3、ModelDriven接收参数 (11)十、Action属性接收参数中文问题 (12)十一、简单数据验证 (12)十二、访问Web元素 (14)一、方法一:ActionContext方式 (15)二、方式二:Ioc(控制反转)—推荐使用 (15)三、方式三:获取原类型 (16)四、方式四:获取原类型-控制反转 (17)十三、Struts2配置文件模块化包含(include) (17)十四、默认的Action (18)十五、Action总结 (18)02 Struts2-Result (19)一、Result类型 (type) (19)二、全局结果集(Globle Result) (20)三、动态的结果集(dynamic result) (21)四、带参数的结果集 (21)五、Result总结 (22)六、项目经理: (22)03 OGNL表达式语言 (23)04 Struts2-Tags (28)Struts2标签目录 (28)一、property标签 (28)二、set标签 (29)三、bean标签 (29)四、<include>标签-少使用 (29)五、If elseif else (30)六、Iterator标签 (31)七、Theme (31)05设计约定(编码规定) (32)06 项目开发顺序 (32)07 声明式异常处理 (33)08 国际化 (35)一、国际化资源文件 (35)二、Java国际化 (35)三、Struts2国际化 (35)1、Action级别 (35)2、Package级别 (36)3、Application级别 (36)四、资源文件中的参数处理 (37)五、国际化-动态语言切换 (37)09 自定义拦截器 (38)10 类型转换 (38)Struts2总结 (39)目录➢Action⏹简单数据校验➢Result➢常用配置文件➢OGNL & ValueStack➢Tags➢---------------------Project⏹类型转换、上传与下载、interceptor、防止重复提交➢MVC思想深入剖析➢源码解读➢其他话题01 Struts2-Action一、Struts作用:将请求与结果分开二、搭建Struts2的运行环境:1、建立Web项目;2、建立Struts2的配置文件(struts.xml);将Struts2的空项目中的配置文件(struts.xml)复制到项目的src目录下。
配置如下:<!--struts.devMode : 是否设置为开发模式true:是开发模式,否则不是注:在开发模式下,修改Struts的配置文件后不需要重新启动Tomcat服务器即生效。
否则修改Struts配置文件后需要重新启动Tomcat服务器才生效。
--><constant name="struts.devMode"value="true"/><!--namespace :对应与项目名称后面的"/"(例如Struts2_0100_Introduction后面的"/") (localhost:8080/Struts2_0100_Introduction/)-->3、复制Struts2相应的jar包及第三方包。
将空项目中lib目录中的除junit和spring-test之外的所有文件复制到项目的WebRoot/WEB-INF/lib目录下4、修改对应的web.xml,建立struts2的filter(参考struts自带的项目),添加如下配置:三、NamespaceNamespace决定了action的访问路径,默认为“”,可以接收所有路径的action,如果没有找到相应的namespace时,则使用namespace为空的actionNamespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action、/xxx/index.action、或者/xxx/yyy/index.action.Namespace最好也用模块来进行命名。
namespace :对应与项目名称后面的"/"(例如Struts2_0100_Introduction后面的"/")(localhost:8080/Struts2_0100_Introduction/)四、<package>标签<package>是用来解决重名的问题,例如当系统的前台和后台都有一个action名叫hello,这时就需要用package 来区分。
前台<package name="front">后台<package name="back">struts2中的package与java的package是相同的作用的。
五、Action具体视图的返回可以由用户自己定义的Action来决定具体的手段是根据返回的字符串找到对应的配置项,来决定视图的容,有三种手段:<constant name="struts.devMode"value="true"/><package name="front"extends="struts-default"namespace="/"><action name="index"class=".bjsxt.struts2.front.action.IndexAction1"><result name="success">/ActionIntroduction.jsp</result></action></package>注:<action>标签中的class属性是表示action的对应的类(这个类是一个普通Java类),当访问这个action 时会创建这个类成为一个对象,然后执行这个对象中的execute方法()(execute方法返回类型为String)。
第一种:Action 普通Java类public class IndexAction1 {public String execute() {return"success";}}当<action>标签中class属性省略时,则默认执行com.opensymphony.xwork2.ActionSupport类中的execute方法,而这个方法返回一个字符串常量SUCCESS(常量值为:”success”).第二种:Action 实现com.opensymphony.xwork2.Action接口,这个接口中定义了一些常量和一个execute方法,我们重写execute()方法就可以了。
import .opensymphony.xwork2.Action;public class IndexAction2 implements Action {Overridepublic String execute() {//return "success";return this.SUCCESS;//SUCCESS常量值为:"success"}六、路径问题的说明struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
虽然可以用redirect方式解决,但redirect方式并非必要。
解决办法非常简单,统一使用绝对路径。
(在jsp中用request.getContextRoot方式来拿到webapp的路径)或者使用myeclipse经常用的,指定basePath还有另一种方式,就是在<head>标签中,指定<base>标签值,这样就使用统一绝对路径。
注:<base>标签:当前页面中所有连接都会在前面加上base地址。
七、Action的动态调用方法Action执行的时候并不一定要执行execute方法,我们可以指定Action执行哪个方法:1、方法一(通过methed属性指定执行方法):可以在配置文件中配置Action的时候用method=来指定执行哪个方法2、动态方法调用DMI(推荐)可以在url地址中动态指定action执行那个方法。
Url地址如下:八、Action通配符(wildcard)的配置当匹配的Action有两个以上时,则会按匹配精确度高的那个Action,当有个相同的匹配精确度时,则按先后顺序进行。
九、Action的属性接收参数Action中三种传递并接受参数:1、在Action添加成员属性接受参数例如请求的URL地址:其中传递了两个参数:name和age,其值分别为:a、8,此Action执行的是add()方法。
那我们只要在user这个Action对象中添加这两个成员属性并生成set、get方法。
2、域模型(Domain Model)就是利用对象域来进行传递和接受参数例如请求的URL地址:其中,访问的是namespace=”/user” action的name=”user” Action所执行的方法method=”add”利用对象域user来传递参数,为对象的属性赋值(=a user.age=8)注:需要一个对象user 并且这个对象需要有两个成员属性,且具有get、set方法。
然后在Action中添加一个User对象的成员属性。
并且有get、set方法,就可以了。
//Action类3、ModelDriven接收参数其:访问的是namespace=”/user” action的name=”user” Action所执行的方法method=”add”,其传入了两个参数:name=a,age=8。