struts2笔记

合集下载

struts2笔记

struts2笔记

第一讲: (4)Structs2的文件与myeclipse的Web工程的拷贝关系: (4)第二讲: (5)配置structs.xml文件: (5)调试工程: (6)如何在structs2启动开发模式: (7)第六讲: (7)如果解决更改了action名不能马上生效,需要重启服务器的问题: (7)如何解决查看jar包里的类,看到的是反编译后的内容而不是源码的问题: (8)如何配置jar包,以便可以查询javadoc: (9)如何解决没有提示的问题: (10)第九讲: (11)Structs2客户端请求访问的原理图: (11)Structs2好处: (11)第十讲: (11)Structs.xml中Namespace: (11)<package name=””>的作用: (12)<result name=”success”>: (12)<package>不写namespace: (12)复制粘贴工程时要注意的事项: (12)如何导入项目的流程: (13)如何重新配置JRE System Library(移除和载入): (14)第十一讲: (15)如何配置JSP文件里gb2312识别中文的问题: (15)Action有class属性;Action是个java类时的原理图: (15)第十二讲: (17)路径问题(JSP中如href=”的URL及action中namespace+name的那个方式): (17)JSP页面中获取structs2的标签<s:>: (18)第十三讲: (18)Action执行时并不一定要执行execute()方法,如何改变: (18)方法1(不推荐): (18)方法2(推荐使用): (18)第十四讲: (18)通配符配置(将配置量降到最低): (18)第十五讲: (19)用Action的属性接收参数(栈中会有,通过<s:property value=>取得): (19)第十六讲: (20)用DomainModel接收参数: (20)然而有时传递的参数和模型不匹配(如传递3个参数,模型只要2个)时: (21)举输入账户名、密码、确认密码这3个参数时,DomainModel只有2个参数,靠DTO传递的案例: (21)第十七讲: (22)用ModelDriven接收参数(MVC体现出V是JSP页面,M是那些model,C是action): (22)实现ModelDriven接收参数的原理图: (23)第十八讲: (23)Structs2参考文档位置: (23)Struct2解决中文问题(2.1.*和2.0的web.xml配置): (23)第十九讲: (24)简单数据验证的案例: (24)没有了request、response,怎么传递信息(addFieldError()): (24)怎么接收信息: (25)是否可以有传递多个addFieldError(可以): (26)第二十一讲: (27)Context是什么: (27)取得Map类型request,session,application,真实类型HttpServletRequest,HttpSession,ServletContext的引用;#request,session,application,attr;还有如何获取传递的参数(如form表单传递的): (27)第一种: (27)第二种(依赖注入;控制反转)(比较重要): (30)第三种: (31)第四种: (32)第二十三讲: (32)模块包含include: (32)默认action(DefaultAction): (32)第二十五讲: (33)Action总结: (33)第二十七讲: (33)Result的type类型: (33)Dispacher类型: (34)Redirect类型: (34)Chain类型(访问同一个包或别的包里的action): (34)redirectAction类型(跳转到另一个action): (35)第三十讲: (35)Global-Results(全局结果集;;当多个返回结果都是一个result时使用): (35)如何让别的package也用这个name=”user”的package的global-results: (36)第三十一讲: (36)Dynamic_result(动态结果集): (36)第三十二讲: (37)带参数的结果集(客户端需要跳转时传递:如何在不同值栈下,传递参数(type=redirect)): (37)值栈原理图: (37)传递失败的案例: (38)成功获取的案例: (39)第三十三讲: (39)Result总结: (39)第三十六讲: (40)什么是OGNL: (40)OGNL表达式访问值栈中普通属性、值栈中对象的普通属性: (40)第三十八讲: (42)OGNL表达式访问值栈中对象的普通属性(通过如.name访问): (42)第三十九讲: (43)OGNL表达式访问值栈中对象的普通方法: (43)OGNL表达式访问值栈中action的普通方法: (43)OGNL表达式访问静态方法、静态属性、Math类的静态方法: (43)OGNL表达式访问普通类的构造方法: (44)OGNL表达式访问集合: (44)第四十一讲: (46)OGNL表达式投影(过滤): (46)访问OGNL的stack从上往下,第0到位置到栈底的集合: (46)第四十四讲: (46)标签: (46)Property标签(如何只当普通字符串而不是OGNL表达式;如何给取不到的值设置默认值;设定HTML): (47)Set标签(设置值;设置范围;从request、ActionContext等取): (47)第四十六讲: (48)Bean标签,param(用于设置新的属性值): (48)第四十八讲: (48)Include标签(这个标签中value要当OGNL要%;%{}将文本属性解析为ognl): (48)$#%区别: (49)第五十讲: (49)If,elseif标签: (49)第五十一讲: (49)Iterator标签(遍历集合、遍历Map等): (49)Subset: (50)第五十二讲: (50)UL标签: (50)Theme主题: (50)设为simple(<s:fielderror/>会默认有<li>标签,使其带有。

Struts2学习笔记

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学习笔记(部分)

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学习笔记

struts2学习笔记
(2).Action类实现RequestAware,SessionAware,ApplicationAware这三个接口
(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学习笔记

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学习笔记

一、Struts2的一些优点:1、struts2没有像struts1一样跟servletAPI和struts1API有紧密的耦合2、struts2提供了拦截器,利用拦截器可以进行AOP编程,实现权限拦截等功能。

3、struts提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型,4、struts2提供支持多种表现层技术,如:JSP、freeMaker、velocity等。

5、struts2的输入校验可以对指定方法进行校验,解决了struts1长久之痛。

6、提供了全局范围、包范围和Action范围的国际化资源文件管理实现。

二、Struts2的开发环境搭建:1、寻找开发struts2应用以来的jar文件,至少需要的六个jar文件。

2、编写struts2的配置文件。

3、Struts2在web中的启动。

当filter被读取的时候就会启动配置文件三、struts2中配置的包介绍Struts-default中定义了struts中的一些核心功能,比如拦截器,用来实现文件上传,和数据验证。

四:Action名称的所搜顺序:Htpp://localhost:8080/struts/test/helloword,在默认命名空间的情况下,或者是命名空间为空的情况下可以这样访问Htpp://localhost:8080/struts/test/path2/path1/helloword,五:Action中的各项默认值:如果没有给action配置class,会默认为actionsupport,如果没哟配置method方法,会默认配置action中excute方法,如果没有配置result,也会默认为success。

六:struts视图研究(result各种转发类型):七、Action属性注值当数据经常发生变化时就会采用此种方法八、指定需要struts2处理的请求后缀:默认使用的是.action后缀访问Action,其实可以通过struts.action.extension进行修改的。

struts2笔记

struts2笔记

Struts2笔记✧S truts.xml中的配置引用struts标签库<%@taglib prefix="s"uri="/struts-tags"%>Bean配置<bean class="" type="" name = "" scope="" static="" optional="">Type:bean的规范通常是某接口来体现;Scope: bean的作用域default、singleton、request、session、thread;Static:表明bean是否是静态注入,当指定了type属性时,该属性不应该指定为true Optional:指定bean是否是一个可选bean,可选属性。

常量配置<constant name="常量名" value="常量值">命名空间配置●当包制定了命名空间时action的路径为命名空间+action名称●如果在命名空间里找不到action系统会在默认的命名空间查找该action●配置跟命名空间namespace="/"包含配置<struts><include file="struts-shop.xml"></struts>Struts2会在struts.xml中配置多个struts配置文件拦截器配置●拦截器定义<intercepters><interceptor name="拦截器名" class="拦截器实现类"><interceptor-stack name="拦截栈名"><interceptor name="拦截器名" ><interceptor name="拦截器名" ></interceptor-stack></intercepters>●Action中使用拦截器<action name="" class=""><result name=""></result><interceptor name="拦截器名" ></action>Jsp页面中显示action属性(<s:property value="属性名称">)Action访问servletAPI●间接访问ActoinContext ac = ActionContext.getContext();●直接访问Action继承ServletActionContext可直接访问ServletAPI动态方法调用①<fomr action="action名称!方法名称.action" method="">②将指定方法名添加事件例:<input type="button" value="注册" onclick="regist()"/>③实现该方法function regist(){targetAction = document.form[0];targetAction .action = "action名称!方法名称.action";targetAction.submit();}④在action中实现该方法配置action中的method●使用通配符<action name="*_*" method ="{2}" class="{1}"><result name=""> /{2}.jsp</reuslt></action>●当请求中能匹配action的元素,则method=“第二个星号的内容”;class=“第一个星号的内容”结果页面为:第二个星号内容.jsp有完全符合URL请求的配置默认的Action(可显示连接视图)<defult-action-ref name="simpleViewResultAction"><action name="simpleViewResultAction" class=""><result name=""> </reuslt></action></defult-action-ref>Struts2支持多种处理结果类型(<result type="*"></result>)◆plintText类型处理结果(显示试图资源的源代码)<param name="location">/webcome.jsp</param><param name="charSet">/webcome.jsp</param> // 这只显示编码方式◆redirect类型处理结果(包括类型:redirectAction)请求参数、属性都会丢失◆动态结果使用通配符:*◆请求参数决定结果<result > ${参数名}.jsp</result>◆全局结果<global-result></global-result>所有的action都有效,现在本action搜索视图结果在搜全局结果。

struts2学习笔记

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学习笔记

struts2学习笔记
6. Struts2 使用了新的 OGNL 的表达式语言,可以访问值栈,在对集合和索引属性的支持上功能更强大。
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学习笔记

Struts2学习笔记
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
</package>
要访问other()方法,可以通过这样的URL访问:/test/helloworld_other.action
9.OGNL
Struts2将应用范围里的数据以及Action处理的数据都存储在一个区域里。在Struts2中叫做值栈,valueStack。
OGNL就是从值栈中取出自己数据,并在某些条件下进行数据过滤和计算的表达式语言。先入后出。
OGNL中如果搜索的数据不是值栈里存储的数据,而是其他对象,特别是Struts2的ActionContext中的对象,则在访问
这些对象的时候,前面要加上“#”。
价格小于50元的建材
<s:iterator value="materials.{?#this.mainbid<50}">
<s:property value="materialName" />建材的价格是<s:property value="materialValue" />元!
</result>
当多个action中都使用到了相同视图,这时我们应该把result定义为全局视图。struts1中提供了全局forward,struts2中也提供了相似功能:
<package ....>
<global-results>
<result name="message">/message.jsp</result>

struts2课堂笔记(第一天)

struts2课堂笔记(第一天)
七、 结果页面的配置(处理结果Result的详解)
八、 基于注解的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学习笔记

Struts2学习笔记

struts2学习笔记Struts2 框架第一天今天重点内容: 1、什么是Struts2框架?框架特性分析 2、 struts2 快速入门(分析struts2 运行原理) 3、 struts2 常用配置 4、如何访问Struts2 Action (Servlet) 5、 Struts2 结果集使用(响应跳转/ajax) 1. Struts2 框架概述1.1. 什么是struts2Struts2 框架问题:什么是框架?为什么要学习框架?框架是一些已经写好代码,通常和具体业务无关(可以看成:软件的半成品)学习框架,提高开发效率,简化开发(应用框架,实现代码代码开发实现开发标准化) javaEE三层结构在web阶段 DAO模式符合JAVAEE三层结构的三层结构出自 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 1asm.* 3 jar 处理字节码信息 javassist.jar 1 代理相关 freemarker 1 jar 图形模板引擎开发strutrs2 基包导入web 工程!感谢您的阅读,祝您生活愉快。

struts2学习笔记

struts2学习笔记
<result name="success">success.jsp</result>
<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";

struts2学习笔记

struts2学习笔记
<s:doubleselect list="#foobar.keySet()"
doubleName="technology"
doubleList="#foobar[top]"
label="Technology" />
<result>/HelloWorld.jsp</result>
</action>
既可用action名调用该方法了
2)(比较常用)
访问Action时,在Action名后加上“!xxx”(xxx为方法名)。
9:Struts 2.0有两个配置文件,struts.xml和struts.properties都是放在WEB-INF/classes/下。
listKey="key"
listValue="value"
value='5'
/>
2):这里的key和value的值是一样的(checkboxlist or radio)
<s:checkboxlist
list="{'Red', 'Blue', 'Green'}"
name="favoriteColor"/>
value="{ 'Java', '.Net' }" />
<s:checkboxlist name="skills2"
label="Skills 2"

Struts2笔记

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笔记总结

struts2笔记总结

Struts2学习问题●Day 01:Struts基本一、Struts2开发基本包(如果是Struts2.2,需要单独下载javassist.jar)xwork-core-2.1.6.jarognl-2.7.3.jarfreemarker-2.3.15.jarcommons-fileupload-1.2.1.jarstruts2-core-2.1.8.jarcommons-logging-1.0.4.jar二、Struts2配置struts-default.xml:默认配置,用于定义Struts2框架提供的Result组件、Interceptor组件。

default.properties:默认配置,用于定义Struts2框架的一些属性struts.xml:开发自定义,用于定义开发者编写的Result组件、Interceptor 组件、Action组件struts.properties:开发自定义,用于覆盖default.properties中的默认配置struts-plugin.xml:整合插件的配置文件注:要注意文件的路径。

两个默认配置文件的位置:struts-default.xml在struts-core-2.1.6.jar包里;default.properties文件在core.jar里的org.apache.struts包里。

自定义的文件放在src目录里。

✓struts-default.xml →定义如下:一系列bean一个package,名字为struts-default,包含很多预定义的Result组件、Interceptor组件。

✓要修改.do还是.action,到default.properties文件里找到相应文件,复制到自定义文件里,写上新值。

如下:struts.action.extension=do三、Action相关配置a)理解package元素的namespace属性的功能注:用命名空间来区别可能出现的相同的action。

Struts2笔记

Struts2笔记

〇、前言做好笔记。

Struts2内容比较多,比较杂。

多做实验,证明结论,增加印像。

一、Struts2概述1、是什么?Struts2是一个M(模型---域--范围模型)V(View视图)C(控制器)框架(模型2)。

框架都是一个半成品。

提高开发效率。

Struts1是一个MVC框架,非常流行。

有很大的缺点。

此时一个webwork的框架设计超前,名气不是很大。

Struts1+webworkd=struts2。

用的是struts1的名字,但是与sruts1没啥关系,struts2的核心是webwork框架。

2、能干什么?web开发主要干的工作:获取请求参数封装到JavaBean验证和转换调用业务代码存数据转向某个页面展示结果表现层的开发技术。

(背景色为蓝色区域)二、搭建struts2的开发环境1、下载地址:2、解压后的目录结构:a)apps:框架本身提供一些案例(学习)b)docs:框架本身提供的文档(指南和API)。

不保证100%正确c)lib:框架需要的jar包及第三方的jar包(不要全拷贝)d)src:源码搭建步骤:a、新建一个JavaWeb工程b、拷贝struts2运行所需的必要jar包。

(方便办法:struts2发行包\apps\struts-blank.war,拷贝其中的lib下的所有jar)struts2-core-2.3.1.1.jar:Struts 2框架的核心类库xwork-core-2.3.1.1.jar:Command模式框架,WebWork和Struts2都基于xworkognl-3.0.3.jar:对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性reemarker-2.3.18.jar:Struts 2的UI标签的模板使用FreeMarker编写commons-logging-1.1.x.jar:ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。

struts2笔记

struts2笔记

.Struts2课件1Mvc与servlet1.1 Servlet的优点1、是mvc的基础,其他的框架比如struts1,struts2,webwork都是从servlet基础上发展过来的。

所以掌握servlet是掌握mvc的关键。

2、Servlet把最底层的api暴漏给程序员,使程序员更能清楚的了解mvc的各个特点。

3、程序员可以对servlet进行封装。

Struts2就是从servlet中封装以后得到的结果。

1.2 Servlet的缺点1、每写一个servlet在web.xml中都要做相应的配置。

如果有多很servlet,会导致web.xml内容过于繁多。

2、这样的结构不利于分组开发。

3、在servlet中,doGet方法和doPost方法有HttpServletRequest和HttpServletResponse参数。

这两个参数与容器相关,如果想在servlet中作单元测试,则必须初始化这两个参数。

4、如果一个servlet中有很多个方法,则必须采用传递参数的形式,分解到每一个方法中。

2重构servlet针对servlet以上的特点,我们可以对servlet进行重构,使其开发起来更简单。

更容易,更适合团队协作。

重构的目标:1、只写一个serlvet或者过滤器,我们这里选择过滤器。

2、不用再写任何的servlet,这样在web.xml中写的代码就很少了。

3、原来需要写serlvet,现在改写action。

4、在action中把HttpServletRequest参数和HttpServletResponse参数传递过去。

5、在过滤器中通过java的反射机制调用action。

6、详细过程参照cn.itcast.action包中的内容3Struts2介绍1、struts2是apache组织发明的开源框架。

是struts的第二代产品。

2、struts2是在struts和webwork基础上整合的全新的框架。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. Struts 2编程流程 (2)2. ognl.jar(表达式) (3)3. 标签 (4)4. struts2中使用json ,jquery(不用考虑浏览器的兼容问题,中文问题等) (5)5. 异常处理 (5)6. 用struts2实现分页查询 (6)7. result扩展 (6)8.拦截器 interceptor (6)9.客户端表单验证(与struts无关) (6)10. 国际化 (7)11. 服务器端证 (7)12. 防止表单重复提交 (8)13. 获得 session reques pagecontext application (8)Mvc模式Mvc模式在web开发中的应用 m:modle代表业务数据和业务逻辑(Entity,DAO)v: view用户界面(展示数据,接收用户的输入信息)jsp c: controller 控制流程(action)。

struts2是一个实现了mvc模式的框架1.Struts 2编程流程1)获取Struts2发行包struts2-core-2.1.8.1.jar ;xwork-core-2.1.6.jar;ognl-2.7.3.jar;freemarker-2.3.15.jar;commons-fileupload-1.2.1.jar2) 配置前端控制器(Filter)写在web.xml中<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern> // /*对所有访问都实行控制</filter-mapping>3)编写Struts2的配置文件默认文件名:struts.xml,置于类路径下,用 Eclipse IDE编写时,可以在src文件夹中编辑该文件在书写struts.xml时需把下面代码拷贝到文件前面。

获得该代码的路径为:strtus2-core-x.x.x.jar-->struts-default.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 name="自定义" extends="struts-default" namespace="/自定义">//namespace:命名空间属性以"/"开始访问package里面的action时前面都要加上namespace;name:唯一的名称用来标识一个package ;extends 表示该package继承的包一般要继承Struts2自己定义的包struts-default<action name="使用name.action访问action(action中只定义了name属性....struts2默认获得一个返回值 ="success"不定义类执行方法是为了实现不直接把jsp展示给用户,而是利用action的转发实现:用户访问.action时其实是一个jsp)" class="包名..类名"method="class中的某个方法名(不写method ,默认调用class中的exectue()方法,需在class中写exectue()方法)"> action还可以使用通配符(了解)<action name="*-*-*" class="xxx.{1}Action" method="{2}" ><result name="xxxx">/WEB-INF/jsp/{3}.jsp<result name="自定义(该值应该跟action中method方法的返回值一样)"type="redirect(转发);默认值为:dispatcher(重定向)">地址(.jsp/.action)</result>//result的功能是:当action执行完了之后,把valueStack中的数据以某种方式向浏览器输出<param name="被赋值的属性名">属性值</param></action></package></struts> 影响程序效率的因数:数据库,io,网络就这3个其他的影响较小Action(javaBean)的属性的功能有2种:用来接收View的提交,把数据带到view。

定义的属性变量要与jsp中的name属性的值相同userAction{private String username;//定义以后要写set get方法}jsp中: <input name="username"/>userAction{private User user;}jsp中对应代码:<input name="user.id">//可以使用这种方法直接给action里面的属性user 赋值jsp中:使用标签+ognl表达式在获得数据并输出: <s:property value="name"/>2.ognl.jar(表达式)1 )在struts2里面使用ognl,先导入ognl.jar。

struts2扩展了ognl2)ognl的使用:获得属性:Root root = new Root(); root对象中的属性是8种基本类型和String时:Ognl.getValue("id",root);//id就是ognl'表达式;数组和list:Ognl.getValue("arry[1]",root);map: Ognl.getValue("map[’key‘]",root);基本运算Ongl.getValue("id+100",root); Ognl.getValue("id>50&&id<100",root);Ognl.getValue("'name:'+name",root); Ognl.getValue("arry[0]+','+arry[1]");调用方法Ognl.getValue("name.toUpperCase()");Ognl.getValue("map['three'].lastIndexOf(name)",root)//ognl表达式的值可以作为方法的调用者,也可以作为参数存在Ognl.getValue("@java.util.Arrays@toString(arry)",root)直接调用方法需要用@把类导入后面跟方法名投影:Dept dept = new Dept(); dept.setName("dept1"); dept.setEmpList(list);Ognl.getValue("EmpList[0].saraly",dept);Ognl.getValue("EmpList.{saraly}",root);EmpList.{saraly}该ognl表达式的值是一个ArrayList,过滤 Ognl.getValue("EmpList.{?#this.salary>=1200}.{name}",root); 先过滤在投影,意思是列出root对象的EmpList属性的salary属性大于等于1200的所有EmpList的name;返回结果也是一个Arraylistognl引擎会为每次请求创建一个valueStack valueStack中有2个存储数据的地方,通常叫centext, root。

Ognl.getValue("name",ctx,root);Ognl.getValue("#name",ctx,root);.属性名前面加上#表示从centext中取数据3.标签struts2的标签库支持ognl表达式,也支持el表达式1 )在jsp中加上taglib指令<%@taglib uri="/struts-tags" prefix="s">2 )常用标签:a.<s:property value="name"/> 通过指定的Ognl表达式,去当前的ValueStack中取数据,然后显示。

<s:property value="formatDate(emp.hireDate)"/>调用栈顶对象的formatDate方法,emp.hrieDate也是栈顶里面的值<s:property />当前栈顶 com.tarena.tts.action.TaglibAction@1233caf<s:property value="message" escape="false"/> message = "<h2>哈哈哈</h2>";escape="false"表示将<h2>以html形式输出;=“true”表示将<h2>以实体形式输出默认为trueb.<s:debug/> 查看当前的ValueStackc.<s:iterator value="userList"> <s:property value="id"/> <s:propertyvalue="name"/></s:iterator> 在valueStack中取出userlist对其进行遍历,通常配合<s:property>使用<s:iterator value="emplist" status="st"> status:(放在context里) 类型为IteratorStatus,由struts2创建并维护,用于拦截迭代的状态通过 getIndex(),getCount();等方法获得数据<s:property value="#st.count">在迭代的过程中取action中数据:<s:iterator value="[1].name" />[n].name:表示去掉栈顶开始下面的n个元素,将n位置上的元素作为栈顶。

相关文档
最新文档