马士兵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学习笔记(部分)
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项目的构建与配置1.配置struts.xml(1)配置struts.xml可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的参考项目的struts.xml文件。
(2)主要的配置如下:<constant name="struts.devMode"value="true"/><package name="hello"namespace="/"extends="struts-default"><action name="hello"><result>/hello.jsp</result></action></package><constant name="struts.devMode"value="true"/> value="true"表示是开发模式,当修改了配置时服务器会自动加载修改后的配置,不需要中期服务器,方便开发。
(3)namespace="/"与浏览器的访问地址有关,namespace的默认值为空。
(4)<action name="hello"><result>/hello.jsp</result></action> action的name值与浏览器的访问地址有关,当地址是“http://…/hello”时,浏览器就会返回result中的hello.jsp 的页面。
2.配置web.xml(1)配置web.xml也可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的参考项目的web.xml文件(2)主要配置如下:<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的jar包(1)复制下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的参考项目的WEB-INF\lib文件夹下的所有的jar包到我们自己项目的WEB-INF\lib文件夹下即可。
struts2课堂笔录_详细版1
常用的MVC框架目前常用的MVC框架,除了Struts 2的两个前身外,还有一些非常流行的MVC框架,这些框架都提供了较好的层次分隔能力。
在实现良好的MVC 分隔的基础上,还提供一些辅助类库,帮助应用的开发。
目前常用的MVC框架还有如下一些。
1.JSF准确地说,JSF是一个标准,而不是一个产品。
目前,JSF已经有两个实现产品可供选择,包含Sun的参考实现和Apache的MyFaces。
大部分的时候,我们所说的JSF都是指Sun的参考实现。
目前,JSF是作为JEE 5.0的一个组成部分,与JEE 5.0一起发布。
JSF的行为方法在POJO中实现,JSF的Managed Bean无需继承任何特别的类。
因此,无需在表单和模型对象之间实现多余的控制器层。
JSF中没有控制器对象,控制器行为通过模型对象实现。
当然,JSF也允许生成独立的控制器对象。
在Struts 1中,Form Bean包含数据,Action Bean包含业务逻辑,二者无法融合在一起。
在JSF中,既可以将二者分开,也可以合并在一个对象中,提供更多灵活的选择。
JSF的事件框架可以细化到表单中每个字段。
JSF依然是基于JSP/Servlet的,仍然是JSP/Servlet 架构,因而学习曲线相对简单。
在实际使用过程中,JSF也会存在一些不足:—作为新兴的MVC框架,用户相对较少,相关资源也不是非常丰富。
—JSF并不是一个完全组件化的框架,它依然是基于JSP/Servlet架构的。
—JSF的成熟度还有待进一步提高。
2.TapestryTapestry并不是一种单纯的MVC框架,它更像MVC框架和模板技术的结合,它不仅包含了前端的MVC框架,还包含了一种视图层的模板技术,使用Tapestry完全可以与Servlet/JSP API分离,是一种非常优秀的设计。
通过使用Tapestry,开发者完全不需要使用JSP技术,用户只需要使用Tapestry提供的模板技术即可,Tapestry实现了视图逻辑和业务逻辑的彻底分离。
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没有像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课堂笔记1
一:框架是一组用于解决特定问题的类和接口的集合,通俗的讲,就是某种应用的半成品,供开发者完成自己的系统,在日常的开发过程中使用成熟的框架,就相当于让别人完成一些基础性的工作,框架一般是成熟的,稳定的,扩展性良好随着Web开发技术的日益成熟,在Web领略出现了一些成熟的优秀的框架,开发者可以直接使用它们,例如:Struts2就是一个开源的,基于MVC的优秀Web应用框架二:struts2简介:Struts 2是Struts的下一代产品,是在struts 和WebWork的技术基础上进行了合并的全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2只有很小的变化。
三:struts2执行流程一个请求在Struts2框架中的处理大概分为以下几个步骤1) 客户端初始化一个指向Servlet容器(例如Tomcat)的请求2) 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)3) 接着StrutsPrepareAndExecuteFilter被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action。
4) 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。
5) ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类。
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学习笔记
</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学习笔记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学习笔记
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学习笔记
<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学习笔记
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"
尚学堂科技 马士兵 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学习笔记
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学习笔记-3
Struts学习1.3一、值栈a)struts2中的action是多实例的,每次请求都会创建一个Action的实例b)值栈是存放在request中的一个对象,ValueStack类是值栈的描述类。
c)获取值栈的方法:i.ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack")d)值栈存放对象的方法:i.vs.set("msg","提示信息");e)值栈分为对象栈和Map栈,对象栈的运行原理为:执行时,先把值放置到Map集合中,在把Map集合放置到List[对象栈]集合中二、Ognl表达式的用法a)“ # ”号的用法i.使用ognl表达式获取request、session、application中的值:1.<s:property value="#ername" />2.<s:property value="#ername" />3.<s:property value="#ername" />4.<s:property value="#application['username']" />5.<s:property value="#parameters.cid[0]" />6.<s:property value="#ername" />ii.使用上面的标签解释:1.从Request域中获取username的值-->${ername}2.从Session域中获取username的值-->${ername}3.从Application域中获取username的值-->${ername}4.上面第四个方法等同于第三个方法,只是表现形式不一样罢了5.request.getParameterValues("cid")[0]获取Request提交的所有名称为“cid”的参数,得到的是一个数组,使用[0]取得第0号角标的值6.#ername相当于${username}从四个作用域中依次找名称为username的属性iii.构造Map集合1.<s:radio name="sex" list="#{'male':'男','female':'女'}"></s:radio>b)“ # ”号的用法i.“ % ”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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用
>"snoitca/"=ecapseman "tluafed-sturts"=sdnetxe "snoitca"=eman egakcap<
则原的"置配于优定约"守遵要定一�过不 低最到降量置配将�符配通用使
Байду номын сангаас
符配通
.6
>"noitcAresU.noitca.resu.2sturts.txsjb.moc"=ssalc "resu"=eman noitca< >noitca/< >tluser/<psj.sseccus_dda_resu/>tluser< >"dda"=dohtem "noitcAresU.noitca.resu.2sturts.txsjb.moc"=ssalc "ddAresu"=eman noitca< >"resu/"=ecapseman "tluafed-sturts"=sdnetxe "resu"=eman egakcap< 用使荐推不以所�noitca的多太生产会者前 >a/<户用加添>"dda!resu/resu/>% txetnoc=%<"=ferh a< >a/<户用加添>"ddAresu/resu/>% txetnoc=%<"=ferh a< �荐推� �IMD 用调法方态动�定指态动中址地lru在以可也法方个哪行执定指来=dohtem用候时的noitcA置配中件文置配在以可 法方etucexe行执要定一不并候时的行执noitcA
�者或 >a/<psj.xedni>"psj.xedni>%htaPesab =%<"=ferh a<
>%
;"/"+htap+)(troPrevreSteg.tseuqer+":"+)(emaNrevreSteg.tseuqer+"//:"+)(emehcSteg.tseuqer = htaPesab gnirtS ;)(htaPtxetnoCteg.tseuqer = htap gnirtS%<
>tluser/<psj.sseccus_}2{_}1{/>tluser<
>-- psj.sseccus_}0{ --!<
>"}1{"=dohtem "noitcAtnedutS.noitca.2sturts.txsjb.moc"=ssalc "*tnedutS"=eman noitca<
>tluser/<psj.sseccus_}1{tnedutS/>tluser<
noitca 认默 �
)noitca.xxx 到转会都�子样
>iva.2_7_dlroWolleH_2sturtS_2sturtS_兵士马堂学尚_90< )gpj.)LMU(制机行运本基 2sturtS :考参(果
素元 bew 问访中 noitca � 验校据数单简 � 决解题问码乱 � 符配通 � �式方种 3�入输户用收接 � 法方义定自的 noitcA 用调 � noitcA 的己自义定 � 用作的 sturts � 门入 noitcA � 置设径路 �
}
{ )resu resU(resUtes diov cilbup }
;resu = resu.siht
}
{ )(resUteg resU cilbup }
;resu nruter
ecroFXevoL yb 71:15:0 6-7-0102 记笔课听 2sturtS_兵士马堂学尚
;))(emaNteg.resu + "=eman"(nltnirp.tuo.metsyS
;))(egAteg.resu + "=ega"(nltnirp.tuo.metsyS
;SSECCUS nruter
5
境环noitcA :txetnoCnoitcA 境环:txetnoC
;)(noitacilppAteg.)(txetnoCteg.txetnoCnoitcA = noitacilppa paM etavirp 法方值取型类pam//;)"tseuqer"(teg.)(txetnoCteg.txetnoCnoitcA)paM( = tseuqer paM etavirp ;)(noisseSteg.)(txetnoCteg.txetnoCnoitcA = noisses paM etavirp
>/ ">%htaPesab=%<"=ferh esab<
4
} }
{ )(ledoMteg resU cilbup edirrevO@ }
;resu nruter
;))(emaNteg.resu + "=eman"(nltnirp.tuo.metsyS
;))(egAteg.resu + "=ega"(nltnirp.tuo.metsyS { )(dda gnirtS cilbup
)tupnImaraPrttAnoitcA_0070_2sturtS( 数参收接性属的noitcA用
>noitca/< >egakcap/<
.7
>"}2{"=dohtem "noitcA}1{.noitca.2sturts.txsjb.moc"=ssalc "*_*"=eman noitca< >noitca/<
{ troppuSnoitcA sdnetxe noitcAresU ssalc cilbup
.8
)找去中数参去动自�时 noitca 的写己自 wen�法方 tes teg 好写并�性属个两义定 中 nitcna 的写己自在�数参收接么怎( >a/<户用加添>"8=ega&a=eman?dda!resu/resu"=ferh a<数参收接性属noitca用使
>noitca/<
>"tnorf/"=ecapseman "tluafed-sturts"=sdnetxe "tnorf"=eman egakcap<
>"xedni"=eman noitca<
么什是径路管不(理处他给交都全 egakcap 的确精个一到找有没而 noitca.xxx 个一到找要只 则 ""=ecapseman 4 名命行进来块模用好最 ecapseman 3 .noitca.xedni/yyy/xxx/者或 �noitca.xedni/xxx/ �noitca.xedni/为径路问访 noitca 的应对�yyy/xxx/者或�xxx/者或�/为写以可 ecapseman 2 noitca 的径路有所收接以可�""为认默�径路问访的 noitca 了定决 ecapseman 1 ecapsemaN .2 结回返并 tluser 到找�-)"olleh"=eman noitca(noitca 到找>—)"/"=ecapseman(ecapseman 到找中 lmx.sturtS>—理处 ssalc-retlif 被�)址地 lru 有所滤过(retlif 到找>—置配件文 lmx.beW 取读�-理处序程 noitacilppA bew 的应对给交 求请应相把 tacmot>—tacmot 给传议协 ptth 过通求请的址地 lru>—址地 lru 入输器览浏端户客:制机行运 sturtS 2 开分图视和求请把�用作 sturtS 1 门入 noitcA .1