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没有像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 的处理流程: 核心控制器(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学习笔记
</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 开发
知识结构(原理及流程------>所有配置文件----->重点配置文件(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"
Struts2笔记
STRUTS(5天)一、MVC介绍:M:model---实现系统的业务逻辑,用javabean等来实现V:view---用于与用户的交互,通过用jsp或html展示C:controller--是M与V的桥梁,并且用于页面的跳转二、Struts2概述Struts1主要采用了servlet和jsp技术来实现,把servlet、jsp、标签库等技术整合到整个框架中;struts2是以webwork为核心开发的,更加类似于webwork框架,跟struts1相差甚远;2.1、struts2的核心包及目录介绍目录介绍:Lib:struts2的jar包;Docs:struts2的使用说明以及APISrc:源代码Apps:官方例子核心包:1、struts-core:核心包2、Xwork-core:XWork类库,Struts 2在其上构建3、commons-fileupload-....jar 文件上传组件4、commons-io-....jar,上传文件依赖的jar包5、ognl-2.7.3.jar :对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性6、reemarker-....jar :Struts 2的UI标签的模板使用FreeMarker编写7、Javassist:三、struts的配置3.1、wex.xml过滤器:StrutsPrepareAndExecuteFilter如果url-pattern是/*时候,所有的请求都可以通过;如果*.xxx的时候,所有扩展名为.xxx的请求可以通过;3.2、struts.xml在src下面创建struts.xml(必须)。
-----在核心包struts-core.jar下的struts-default.xml文件作用:当请求是login的时候,调用class对应类中的login方法;并返回结果<result>,通过返回的参数与result中的name属性相匹配;注意:1、在result中,name可以省略(name=”success”)2、action中class也可以省略,默认执行ActionSupport类3、package中extends必去直接或间接继承“struts-default”--struts-default.xml文件4、在struts2中默认执行execute方法;参数无,public,返回String 3.3、jsp代码3.4、action代码四、struts的详解4.1、<package name="" extends="" namespace=””></package> Name:包名,可以通过包名来直接或间接的继承Extends:直接或间接的继承struts-defaultNamespace:包的命名空间abstract:定义包为抽象的4.2、<action name="" class="" method=””></action>Name:请求参数Class:对应请求类,如果无此参数,默任调用ActionSupport Method:制定的执行方法,如果无此参数,这默认执行action中的excute方法4.3、<result name="">url</result>Type:4.4、全局result作用:1、把共同部分,放到global-results,减少代码的重写次数4.5、默认的Action配置默认的Action,当请求的Action不存在时,那么执行默认的Action在default-action-ref中的name与action的name是一直的。
struts2学习笔记
【讨厌的中文问题】一直以为对中文问题理解的比较透了,结果这几天一直遇到中文问题,今天的struts2.0上的特别讨厌,在get方式,url上包含中文,后台action一直无法处理。
原来不光是设置struts.i18n.encoding=UTF-8 的问题,还有设置tomcat的默认编码方式为utf-8。
在 server.xml中修改为:<Connectorport="8080"redirectPort="8443"minSpareThreads="25"connectionTimeout="20000"maxSpareThreads="75"maxThreads="150" URIEncoding="UTF-8"></Connector>另外今天使用struts2.0的url标签时,发现总是自动把当前请求的参数加到url标签中去,第二次在请求时,参数有重复。
例如<s:url id="formurl" action="customList" namespace="salemanager" ><s:param name="queryType" value="queryType"></s:param><s:param name="query" value="query"></s:param></s:url>第一次正常,然后加入请求中加入参数page,第二次处理,再加入参数page后,就有两个page参数。
解决办法由:方案一:增加属性: includeParams="none"<s:url id="formurl" action="customList" namespace="salemanager"includeParams="none" encode="false"><s:param name="queryType" value="queryType"></s:param><s:param name="query" value="query"></s:param></s:url>方案二:在加入参数的处理类中,先判断是否有该参数,如果有则修改,不是增加。
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 学习笔记---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目录下。
Java相关课程系列笔记之十三Struts2学习笔记(建议用WPS打开)
@Struts2学习笔记Java相关课程系列笔记之十三笔记内容说明Struts2(李翊老师主讲,占笔记内容100%);目录一、 Struts2概述 (1)为什么要用Struts (1)什么是MVC (1)JSP Model 1和JSP Model 2 (1)Struts2发展史 (2)衡量一个框架的标准 (2)Struts2使用步骤 (2)内容详解 (3)Struts2提供的方便之处 (4)案例:简单登录(使用Strust2) (4)案例:修改、案例使用户不能绕过前端控制器 (6)NetCTOSS项目:显示资费列表 (6)NetCTOSS项目:资费列表分页显示 (8)二、 OGNL技术 (8)什么是OGNL (8)OGNL基本语法 (8)OGNL表达式中加“#”和不加“#”的区别 (8)OGNL体系结构 (8)XWord框架对OGNL进行了改造 (9)ValueStack对象结构 (9)ValueStack结构演示 (9)Struts2标签的使用 (10)Struts2对EL表达式的支持 (10)案例:修改案例(使用Struts2标签和OGNL表达式) (10)三、 Action (11)Struts2的核心组件 (11)Struts2的工作流程 (11)在Action中访问Session和Application (11)NetCTOSS项目:用户登录 (12)Action属性注入 (13)案例:重构NetCTOSS资费列表分页显示(使用属性注入) (13)使用通配符配置Action (13)案例:通配符配置(资费增、改、查) (14)Struts2中Action的设计经验 (14)四、 Result (15)Result注册配置 (15)Result组件利用<result>元素的type属性指定result类型 (15)常见的Result组件类型 (15)NetCTOSS项目:资费删除 (15)NetCTOSS项目:基于StreamResult生成验证码 (16)NetCTOSS项目:基于JSONResult进行验证码检验 (17)NetCTOSS项目:添加资费模块中的验证资费名是否重复 (19)自定义一个Result (20)五、 Struts2标签 (21)A开头的标签 (21)B开头的标签 (21)C开头的标签 (21)D开头的标签 (21)E开头的标签 (21)F开头的标签 (21)G开头的标签 (21)H开头的标签 (21)I开头的标签 (21)L开头的标签 (21)M开头的标签 (21)O开头的标签 (21)P开头的标签 (21)R开头的标签 (21)S开头的标签 (21)T开头的标签 (21)U开头的标签 (21)所有标签都具备的属性 (21)案例:常用标签 (21)六、拦截器 (21)Struts2详细流程图 (21)拦截器的作用 (21)拦截器的常用方法 (21)自定义拦截器步骤 (21)Struts2内置的拦截器 (21)案例:拦截器入门 (22)拦截器栈 (24)fileUpload拦截器原理 (24)案例:使用fileUpload拦截器实现文件上传 (24)NetCTOSS项目:登录检查拦截器 (25)七、 Struts2中如何处理异常 (25)异常一般出现在何处 (25)如何配置异常 (25)八、 Struts2中如何实现国际化 (25)i18n (25)如何获得中文的Unicode编码 (25)浏览器如何决定用哪个资源文件 (25)资源文件的命名 (25)资源文件的分类 (25)实现国际化的步骤 (25)九、 NetCTOSS项目 (27)DAO优化、重构、封装!【重要】 (27)资费更新 (27)导航条 (27)十、项目经验 (29)主键用int还是Integer (29)“../”表示的意思 (29)导入静态页面,样式、JS失效问题 (29)<s:hidden>和<s:textarea>标签 (29)四种情形下的绝对路径写法 (29)URL和URI (29)和 (29)一、Struts2概述为什么要用Struts1)JSP用HTML与Java代码混用的方式开发,把表现与业务逻辑代码混合在一起给前期开发与后期维护带来巨大的复杂度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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文件夹下即可。
Struts.xml的配置1.package的属性与配置(1)package的使用说明:类似于Java程序里的package,主要用于区分同名的action。
在真正的项目开发中package通常来区分不同的模块。
例如:<package name="hello"namespace="/login"extends="struts-default">…</package>(2)name属性:用于区分不同的package,此属性不能省略不写。
(3)extends属性:用于继承其他的package,继承了某个package就包含了某个package里的所有配置,此属性可以省略不写,默认继承struts-default。
(4)namespace属性:表示浏览器访问的路径,此属性可以省略不写,默认为空,当此属性为空时,该package里的action可以匹配浏览的任何请求的action。
(5)abstract属性:此属性的值为false表示此package非抽象的,若为true表示此package为抽象的。
2.action的属性与配置(1)action的使用说明:action是配置在package里的,一个package可以配置多个action,每一个action都可以处理一种请求,通常一个action就是一个含有public String execute()方法的Java类,根据execute方法的不同的返回值来返回相应的页面给用户。
例如:<action name="hello"class="login.Hello" method="execute">…</action>(2)name属性:定义action的名称,也表示浏览器访问的路径。
(3)class属性:定义该action所对应的具体的Java类,其值是具体的Java类的路径。
(4)method属性:定义该action调用Java类的具体方法,调用的方法的返回类型必须是String类型,如果用户没有定义该属性,则默认调用execute方法。
(5)method动态方法调用(BMI)可以在浏览器地址栏里动态的指定调用action的那一个方法,如:http://localhost:8080/Struts2/hello/hello!add。
调用格式为:http://…/action名!方法名(6)使用通配符动态调用action及其方法并动态的返回页面例如:<package name="hello"namespace="/hello"extends="struts-default"><action name="hello_*"class=" com.lzw.HelloAction"method="{1}"><result name="hello">/hello_{1}.jsp</result></action><action name="*_*"class="com.lzw.{1}Action"method="{2}"><result>/{1}_{2}.jsp</result></action></package>第一个action所对应的Java类已确定是:com.lzw.HelloAction。
但是对于不同的请求会调用该Java类里的不同的方法,并返回不同的页面,如:http://…/hello/hello_add,会调用add()方法,并返回hello_add.jsp页面;若想调用execute()方法,就会返回hello_execute.jsp页面,对应的请求就是:http://…/hello/hello_execute。
第二个action所对应的Java类并未确定,此action更为灵活,会根据不同的请求调用不同的action(即:Java类)以及其不同的方法,并返回不同的页面。
如在浏览器的地址栏输入:http://…/hello/User_add,就会调用erAction类里的add()方法,并返回User_add.jsp页面。
注意:在项目开发的时候一定要谨记“约定优于配置”原则,要约定好各个文件、方法以及类的起名规则!!!(7)请求向action传递参数例如:action里含有两个属性name与age,并且含有相应的get与set方法,则请求:http://…/hello/hello_add?name=lizhiwei&age=12,会把“lizhiwei”与“12”通过set方法赋值给name与age。
当action里还有一个属性u而且这个属性不是基本类型,而是User类型(用户自定义类型),该类型里也含有name与age属性和相应的set与get方法,若要通过请求的方式给u对象赋值,则请求如下:http:// …/hello/hello_add?name=lizhiwei&age=12&=li&u.age=13,该请求会使得u的name属性值为li,age值为13。
注意:通过这种方法一定要定义好相应的set与get方法,否则无法传值!!!(8)action实现ModelDriven<T>接口,进行参数传递例如:当一个action里含有一个属性u而且这个属性不是基本类型,而是User类型(用户自定义类型),该类型里也含有name与age属性和相应的set与get方法,若要通过请求的方式给u对象赋值;由于action实现了ModelDriven<T>接口,就会重写getModel()方法,此时在action里就不需要写属性u的set与get方法,但是需要用new来创建u 对象(而不是Struts2自动创建)。
请求:http://…/hello/hello_add?name=li&age=13,会把u的name属性赋值为li,age属性赋值为13。
重写getModel()方法的代码如下:public User getModel(){return u;}(9)参数传递的乱码简单解决方式:在struts.xml配置如下代码:<constant name="struts.i18n.encoding"value="UTF-8"></constant>根据配置value的值来配置编码,但是请求方式应尽量使用post,避免使用get。
注意:此方式在某些Struts2版本中使用时并不能解决问题,是因为那些版本存在bug。
本次实验使用的是struts-2.3.14.1版本,能够成功解决乱码问题!(10)action的简单数据验证如果action需要对接收到的参数进行验证,而要把验证到的信息返回给页面显示,常用且简单的做法是让此action继承ActionSupport,并在方法里增加相应验证代码,例如:public String add(){if(name==null || "".equals(name)){this.addFieldError("name", "参数不能为空!");}return"hello";}其中的this.addFieldError("name", "参数不能为空!")就是向Value Stack Contents里添加错误信息(也可以向一个参数名添加多个错误信息),添加的信息可以在页面里取出来。