struts2自学笔记
- 格式:doc
- 大小:127.00 KB
- 文档页数:10
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环境1、jar包的导⼊主要是到解压其中的⼀个⼯程,得到⾥⾯lib下包含的jar包把这⾥的所有的jar包拷贝到项⽬的WEB-INF⽬录下的lib⽂件夹下⾯。
2、配置struts.xml⽂件注意:必须要放在src⽬录下,因为struts2源码就是这样设计的,只有在src⽬录下才读取得到。
每⼀个package都要extends=”struts-default”,namespace 是访问的路径Action中的name和 package中的namespace组成完整的访问路径3、配置web.xml<filter><filter-name>action2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>action2</filter-name><url-pattern>/*</url-pattern></filter-mapping>4、编写的Action类都要继承ActionSupport类或者implements Action接⼝默认action类访问的是⾥⾯的execute⽅法如果要访问特定的⽅法,可以这样:(1)在action 后⾯指定 method=“⽅法名”(2)使⽤通配符 <action name=”example_*” class=”com.XX.YY.ZZ” method=”{1}” />(3)使⽤动态表达式⽐如example!execute(不常⽤)5、接收表单提交的数据(1)属性驱动获取表单参数--在action类中定义与表单的input中 name ⼀样的属性(必须⼀样,否则注⼊不进去)同时还要⽣产属性对应的set ⽅法,因为 action类要调⽤set⽅法把表单中的参数注⼊到属性中(2)模型驱动获取表单参数--模型驱动⾸先action类要实现ModelDrivern,然后重写getModel⽅法--在action类中声明并创建接收表单参数的实体类(Student user = new Student())--原理分析:struts2调⽤action类的getModel⽅法,得到user对象,然后利⽤user对象⾥⾯的set属性的⽅法,设置user对象的属性值--注意,表单的参数name必须要跟Student的属性值⼀致,否则注⼊不进去。
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目录下。
struts21.struts简介:先导入struts-blank.war到eclipse中,这是一个空的工程,把它作为模板进行开发是不是用了struts就可以抛弃servlet? struts底层仍然是servlet,其实是用了一个Filter来进行分发(在web.xml中配置)。
2.strusts配置文件到底哪个请求分给给哪个类来处理,这个在struts.xml文件中进行配置<action name="hello" class="处理这个hello请求的类">3.处理类Action类的写法一、定义一个普通类,在其中定义一个public String execute()方法,在其中写上处理逻辑,这个方法会在对应的请求过来时自动回调。
二、除此之外还可以实现接口Action,但现在暂时没有必要三、继承ActionSupport,但现在暂时没有必要4.MVC的简介struts2中,XXXAction代表了C控制逻辑,xxx.jsp代表了V视图,另外还有模型Mstrut2完全可以不去理会HttpServletRequest和HttpServletResponse,让我们从这些繁杂的Servlet的api中解放出来。
如何取出请求中的参数呢?(原来是用req.getParameter("xxxx"))Struts中只需要将Action类的属性定义为和请求参数同名即可(框架会自动读取请求参数,并自动注入到同名的属性中去),我们只需要在execute方法中将属性的值(也就是参数的值)取出来用就可以了。
如何在Action中往后面的jsp传值呢?(原来是用req.setAttribute("xxx","xxxx"))struts只需要把要传给后面的值,放在Action类的属性中,需要定义getter方法;然后在后面的jsp中用el表达式就可以取出来了Action是MVC中的C,控制;Action中的那些接收参数的属性属于M,模型。
【讨厌的中文问题】一直以为对中文问题理解的比较透了,结果这几天一直遇到中文问题,今天的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>方案二:在加入参数的处理类中,先判断是否有该参数,如果有则修改,不是增加。
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文件中动态的指定返回的结果集。
矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。
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开发可以简化开发难度,提高开发效率。
Struts部分: (1)1)为什么要学习Struts框架 (2)2)为什么使用MVC? (2)3)MVC在JavaWeb中的实现 (2)*4) Struts2的主要工作流程 (2)3.Struts2框架的历史 (4)*4.Struts2框架基本使用 (4)1.Struts2使用基本规则 (5)Struts2标签+OGNL表达式 (6)2)OGNL工作原理 (6)4.OGNL在Struts2中的应用 (8)1)xwork对ognl进行扩展和改造 (8)*2)ValueStack对象(参考valuestack.jpg) (9)*3)在JSP中访问ValueStack数据方法 (9)a.使用Struts标签+OGNL表达式 (9)b.使用EL表达式 (9)1.Struts2框架Action组件的核心应用 (10)1)Action组件基本原理 (10)*3)Action属性注入 (11)*4)如何利用一个Action处理多个请求 (11)1.前期课程回顾 (11)1.Result组件原理 (12)1)Result组件的作用 (12)2)Result组件实现规则 (12)*2.常用的几种Result组件 (13)2)Action响应 (13)1.Struts2标签 (14)1)通用标签 (14)2)表单标签 (15)2.拦截器组件 (15)*2)掌握自定义拦截器的使用 (16)Struts部分:======================Day01=========================1)为什么要学习Struts框架Struts框架是MVC设计模式的实现,基于Struts开发可以简化开发难度,提高开发效率。
2)为什么使用MVC?MVC是一个非常优秀的设计思想,基于该思想架构程序,可以提高程序的结构灵活性,便于日后维护、扩展和升级。
3)MVC在JavaWeb中的实现Servlet,JSP,Filter,JDBCa.原ShoppingCart程序就是一个MVC结构实现View实现部分:采用JSP组件实现Model实现部分:采用DAO、Entity等组件实现Controller实现部分:采用ActionServlet组件实现b.ShoppingCart程序虽然基于MVC,但结构还有一些问题:当请求数量比较多时,需要在Servlet中编写大量的if...else分支语句,而且Servlet代码量非常多。
Struts2自学笔记 一,类型的转换 1,struts的标签放在struts的jar包下。MATE-INF -struts-tags.tld下的。定义了所有标签的机制。 2,导入标签<@ taglib prefix=”s(可自行定义)” uri=”/strusts-tags”> 当没有报错时,就说明正确了。 3, 这里当使用此标签是它地址默认为action,就不用去写action了,直接写名字就是了,不想form表单中的action要写成login.action。 文本框我们是用来表示的。 Username 是文本框的名字,客户端处理的参数值。 Label是文本框的名字。
相当于我们比较熟悉的username : 密码呢,用 提交 用
4,和基本的jsp页面相比,struts2标签是自动换行的。 5,action类继承ActionSupport类,实现了很多接口,验证,等很多功能都可以用了。 有validate方法(验证)等 6, 在struts2中我们可以自动验证错误,不像在struts1中我们还要在jsp页面手动的添加一个error标签才能完成。
《------------------局部类型转换-----------------》。 1, ognl是一种强大的表达式语言。 2, 我们继承ognl.DefaultTypeConverter,再重写convertValue(Map
context,Object values,Class toType)方法就能实现类型的转换了。 分别代表:Map (应用的上下文) Object(类型转换的值) Class(类型的转换,看你转换成什么类型 有两种,1。从字符串到我们自定义类型的转换 2。从自定义类型到String的转换。它觉定你的转换为什么) 3, Struts2为我们默认提供的转换标志。(com.opensymphony.xwork2 中的action接口) ActionSupport是实现了Action接口了的。所以要用直接继承ActionSupport就可以了。
SUCCESS(表示Action的操作是成功的),INPUT(验证没有成功),NONE(表示Action的操作是成功,但是不显示任何视图),LOGIN(Action没有执行成功,用户不能登录。)ERROR(表示错误)
4, property标签用于输出值栈中的对象的属性值,使用value属性来指定要输出的对象属性,如果没有指定value属性,那么默认输出栈顶对象。自动调用它的get方法
属性如下: 1. default: 可选,如果需要输出的属性值为null,则显示的default属性指定的
值 2. escape: 可选,指定是否escapeHTML代码 3. value: 可选,指定需要输出的属性值。如果没指定,默认输出ValueStack栈
顶的值 4. id: 可选,指定该元素的标识 5, 文件名字的定义: 转换的时候,在定义文件名字是要转换的属性action,要求 属性所在Action+(-conversion.properties),后面是固定的。该文件必须建在和Action是同一包下的。 其中内容包括:你要对哪个属性的进行转换,和用哪个类对它进行转换。 例子:就是对坐标的一个转换。 6, 流程 : input.jsp页面—>通过struts.xml找到相应的action类。在到point的set方法时,它通过我们配置的PointAction-conversion.properties自己找到我们为他执行转换的类的方法。这时就要选择PointConventer中的两个if语句看是执行那个语句。一个是从服务器到客户端if(String.class=toType),一个是从客户端到服务器if(Point.class=toType)。
《---------------------全局的类型转换-------------------》 1, 需要类型转换配置文件(名字是xwork-conversion.properties) 2,里面的内容是 : 等号左边是你要转换的对像所对应的类的全称。右边是表示我要用这个类去转换我的前面的这个类。
《--------------Struts2的校验------------》 1, 主要学习了用户的注册功能对用户的年龄,密码,用户名,出生日期,注册日期。并且要求的是出身日期不能大于我们的注册日期。年龄也有要求,必须在1到150之间。 2, 主要的实现过程是,我们的日期的判断前后的顺序是用Calender 中的before方法进行比较的。 Calendar ca = Calendar.getInstance(); ca.setTime(this.getDate()); Date d1= ca.getTime(); Calendar c1a = Calendar.getInstance(); c1a.setTime(birthday); Date d2= c1a.getTime(); if(d1.before(d2)){ this.addFieldError("birthday", "Birthday before date"); } ※ 如何让我们的错误信息在页面中显示出来呢,要用到struts2的标签。只有这样才能让我们的错误提示信息显示出来。
※ 现在客户有个要求:要求我们即便是输入错误的信息,返回让我们从新输入时,我原来的信息必须保留。这时应该怎么处理呢??? 解决办法:1)用er表达式即可完成。示例:value=”${requsetScope.age}”>。 2)可以用struts2的标签库。也可以实现此功能。不用写那么多的信息,因为标签库会自动为你保存内容。例子:这样它的功能和上面就是一样的了。 注意:struts标签显示的错误信息只能显示fielderror里面的信息。不能显示 Actionerror里面的信息。 如果想它显示只有在显示的页面加上(它只能显示Actionerror级别的错误信息);
《--------------------校验---------------》 4, 遇到内型转换错误时,不能进行转换,struts框架自动生成一条错误信息。并且将错误信息放到 addFiledError里面。那么如何克服内置的错误信息的避免,因为这样客户端是看不懂的。如何避免呢。 在struts.xml里面多加一个属性是为了替代它的内置错误信息 . 他们分别表示的意思为:name(国际化的资源文件名字 ),value(国际化资源文件),这里的message不用写.properties
《---------------全局类型转换验证--------------------》 Message.properties中写的内容如下: xwork.default.invalid.fieldvalue={0} error 表示哪个出错,就用哪个取代替。是动态的。这表示一个全局的
在我们的Struts.xml中的相应得配置为:
《---------------局部类型转换-验证-------------------》 1,当全局和局部并存时,局部会替代全局的。 2,要验证的Action的名字+properties 3,内容:invalid.filedvalue.属性名字(age)=…….(内容自定) invalid.fieldvalue.age=age conversion error liutao 当类型转换错误的时候才出现age conversion error liutao的错误的信息。 类型转换和输入校验的关系:先进行的是类型的转换,然后才是输入校验。校验是建立在类型转换的基础上的。内容和message是不一样的。
在我们的Struts.xml中的相应得配置为:
◆ 我们的类型转换 1 属性所在Action+(-conversion.properties)和xwork-conversion.properties是一对的,一个是全局的一个是局部的。 ◆ 我们的验证类型转换 2 message.properties和要验证的Action的名字+properties是一对的,一个是全局一个是局部的。