Struts2笔记

Struts2笔记

 

第一节:概述

1.      简介:

l  Struts2是自webwork框架发展而来,与Struts1无关,只为借助Struts1的名气;

l  Sturts2所用到的基本技术:动态代理 + 反射 + 过滤器;

l  Struts2主要是针对jsp/servlet的技术,Hibernate是针对DAO的技术。

 

2.      注意点:

l  使用Struts2标签时,eclipse需要配插件,所以建议用MyEclipse开发;

l  前端表单提交的数据统一为小写字母,大写后端不识别,原因未知;

l  每个action类中不要忘记 get() 和 set() 方法,不然Struts2访问不到属性;

l  对action类而言:进入时总动获取表单值,离开时自动加入作用域;

l  用多少jar包,导多少jar包,全部导入可能存在问题;

l  注意配置web.xml文档时的权限管理。

 

3.      使用流程:

l  下载:在apache官网下载;

l  新建项目,导入相应的jar包,可参见example项目struts-blank.war;

l  配置web.xml文档。

l  在src下新建struts.xml配置文件,并配置相应参数,action为对应类,name值与请求一致,返回值为result。

l  可以新建action类,进行开发了。

 

 

 

第二节:Action详解

1.      Action的使用方法(三种):普通类+ 实现Action接口 + 继承ActionSupport类

l  普通类:简单,但是不能用某些Struts的其他功能;

l  实现Action接口:直接使用其中的常量,如:SUCCESSFUL,NONE,INPUT等。

l  继承ActionSupport类:最常用。

2.      调用Action内部的方法(除了execute()方法之外):

l  访问时,主要访问的url是:Action名 + ” ! ” + 其他方法名;即可调用改Action内其他方法。

l  原理:类似与之前表单隐藏域,Struts2框架截去” ! ”前后的字符串,前为Action,后为该Action内的方法。

 

 

第三节:封装表单的方式:  (Model-Driven和 Property-Driven)

1.      比较:Property-Driven适合7个一下的表单,简单;而Model-Driven适合于大量表单提交的时候。

注意:要使用” ! ”来进行动态方法调用,必须在struts.xml配置文件中设置一条contant标签:<constant name="struts.enable.DynamicMethodInvocation" value="true" />这样之后才可以用,不然不可以用。详见我的csdn博客。
 

2.      Property-Driven:Action内定义属性,表单域名称和属性名相同,(类型不用管,Struts2会帮我们自动转),提交时如下提交:” Action名!method名” 即可完成。

 

3.      Model-Driven:用一个javabean接收前端传来的参数,实现model效果。实现步骤:

<1>. 建一个javabean,比如User类,其中属性名和表单域名称一致;

<2>. 负责处理的Action实现ModelDriven<User>接口,填入javabean的泛型;

<3>. 实现ModelDriven接口中的getModel()方法,返回一个接收到的的javabean。即可。注意:不要忘了在Action中new 该javabean,例如 User user = new User();还要有getUser()和setUser()方法。

 

 

第四讲、配置文件详解(struts.xml):

1.      <package>包:作用是划分代码,便于管理。此包不同于java类中的包,此包可以被继承,继承之后自动拥有父包的内容。所有包均继承自” struts-default ”包。

l  namespace命名空间:是package的一个属性,作用是指定页面的url,”/”表示根目录。

l  extends: 指定继承自哪个包,默认为” struts-default ”。

2.      <action>:把前端访问页面和后端处理类对应起来,属性有name,class

3.      <result>结果页面: 有一下属性

l  name:对应action返回值,默认为”success”;

l  type:dispatcherà转发;chainà跳到另一个action;freemarkerà显示页面为freemaker;redirectà重定向;streamà向浏览器发送InputStream对象,通常用来处理下载或返回Ajax;默认为dispatcher;

l  path:路径,等同于<result>标签中间的路径

4.      <global-results>: 全局的result,即整个包中的所有action都共享配在其中的所有result页面。

5.      <contant>配置信息:详见另一篇文档或查看我的csdn。

6.      多配置文件:

多人开发项目时,需要协作,不能用同一个struts.xml文件。我们通过<include>来指定多个配置文件。通常按人或模块来划分,通常按模块来划分,在模块下面继续划分。

注意SSH三大框架都可以实现Annotation机制,从而不需要配置xml文件(例如:struts2.xml),但是为了便于管理,建议:strutsxml文件,Hibernatespring配置注解@

 

 

第五讲:ActionContext对象:

1.      在Struts2框架里,非常非常重要的对象;

2.      封装了所有Struts2的对象,包括所servlet里的所有对象;

3.      实质:ActionContext对象里包含一个context属性,此属性包含一堆属性,其中一个是table属性,此为一个map,这个名为table的map里封装了很多东西,如request,response,session等等。request里面又包含一个名叫OgnlValueStack的ValueStack(ValueStack是类似于List的一种类型)。这个OgnlValueStack中又包含一个action这个action和ActionContext是同一个对象(引用互指)。所以:我们可以操作ognlValueStack中的action来实现操作ActionContext对象,即通过操作OgnlValueStack中的action来操作Struts框架的所有属性。结构图如下:

4.      原理简介:前端的作用域对象被Struts2框架转化成map,后台返回时将map转化成作用域对象。其中Action和ActionContext对象会被转化为request对象。

5.      获取web容器信息:

l  获取session:             ac.getSession().put(“key” , “value”);

l  获取request:         ac.get(“ request ”);

l  获取Application:   ac.getApplication();

注意:getSession()等此类代码不要放在Action的构造函数里,因为此时ActionContext里的值也许还没设置,这是通过ActionContext取得的值有可能为null

6.      获取真正的Web容器信息:  (ServletActionContext)

HttpServletRequest req = ServletActionContext.getRequest();

ServletActionContext.getRequest().getSession();

ServletActionContext. getServletContext();

 

 

第六讲:OGNL语言:(对象图形导航语言)

1.      OGNL与EL相似,但比EL强大。

2.      List和Map的操作:   注意:map操作时,做到两点,不少引号不少#号。

List:<s:set  var=”list”  value=”{123 , ’year’ , ‘good’}”  scope=”request”></s:set>

Map:<s:set  var=”map”  value=”#{‘No01’:‘boy’ , ‘No02’:#request.list.get(0)}”></s:set>

*复杂操作如下:

<s:set  var=”list” value=”{‘abc’, 123, true}” scope=”session”></s:set>

<s:set  var=”m” value=”#{‘first’ : #session.list}”scope=”request” ></s:set>

取出一个map里的list<s:property  value=”#session.(#request.m.first).get(0)”  />

结果为:字符串‘abc’

3.      集合元素中的查找------in 和 not in:

<s: property value=” ‘a’ in {‘a’, ‘b’, ‘c’} ” />

<s: property value=” ‘a’ in #request.list />

4.      过滤/投影:    即在集合中过滤,得到一个子集,这个叫过滤或投影。

?  à 符合选择逻辑的所有元素

^  à 符合选择逻辑的第一个元素

$  à 符合选择逻辑的最后一个元素

#this  à表示集合中的当前元素

<s:set var="ss" value="#request.user.{?#this.pwd.equals('456')}"scope="request">

</s:set>

<s:iterator value="#request.ss"var="temp">

   <s:property value="#temp.uname"/>

</s:iterator>

5.      其他操作:      (调对象的方法,调对象静态方法,获取方法返回值等)

l  调用普通方法 à 直接掉

l  <1>调用静态方法à 在struts.xml配置文件中配置<constant name=”struts.ognl.allowStaticMethodAccess” value=”true”/>

<2> @class@method(args)  //调用类的方法  e.g @java.lang.String@toString();

<3>@@表示调用java.util.Math包中的类,e.g:@@max(3, 5);

<4>返回值:只需要在调用方法的<s: set>里设置var即可得到。

注意:调用时一定要写类的完整报名。

 

 

第七讲:Struts标签

1. Struts标签现在不支持EL,只能用OGNL。

2. Struts标签共分四大类:数据标签 + 控制标签 + 表单标签 + 非表单标签。

3. 常用标签:

Property输出变量的值:

(通过OGNL可以有很多种操作,略过)

Set设置变量值:

<s:set  var=”aa” value=”{‘a’, ‘c’, ‘b’, ‘4’, ‘c’}”scope=”request” ></s:set>

action用于执行Action:

<s:action  name=’’login’></s:action>

有以下常用属性:

name à 只要提交到后台处理的action;

           namespace à 命名空间;注意:强烈建议加上

           executeResult à true 或 false,是否将执行结果包含在本页面。

action标签还可以包含子标签:<s:param name=””>value</s:param>

date输出日期:

<s:date  name=”#request.d”  format=”yyyy-MM-dd”  nice=”true” />

其中nice属性为:将时间表示成XX ago,即XX年前,此时format不起作用。

include包含其他页面:

作用和<jsp: include>一样。<s:include value=”1.jsp”></s:include>

param用于传参:

用于传参。略过

if/ifelse/else流程控制语句:

和JSTL一样,而且用法比JSTL更简单,因为更像java代码。示例代码如下:

<h1>--------------</h1>

        <%

           request.setAttribute(

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在现有省、市港口信息化系统进行有效整合基础上,借鉴新 一代的感知-传输-应用技术体系,实现对码头、船舶、货物、重 大危险源、危险货物装卸过程、航管航运等管理要素的全面感知、 有效传输和按需定制服务,为行政管理人员和相关单位及人员提 供高效的管理辅助,并为公众提供便捷、实时的水运信息服务。 建立信息整合、交换和共享机制,建立健全信息化管理支撑 体系,以及相关标准规范和安全保障体系;按照“绿色循环低碳” 交通的要求,搭建高效、弹性、高可扩展性的基于虚拟技术的信 息基础设施,支撑信息平台低成本运行,实现电子政务建设和服务模式的转变。 实现以感知港口、感知船舶、感知货物为手段,以港航智能 分析、科学决策、高效服务为目的和核心理念,构建“智慧港口”的发展体系。 结合“智慧港口”相关业务工作特点及信息化现状的实际情况,本项目具体建设目标为: 一张图(即GIS 地理信息服务平台) 在建设岸线、港口、港区、码头、泊位等港口主要基础资源图层上,建设GIS 地理信息服务平台,在此基础上依次接入和叠加规划建设、经营、安全、航管等相关业务应用专题数据,并叠 加动态数据,如 AIS/GPS/移动平台数据,逐步建成航运管理处 "一张图"。系统支持扩展框架,方便未来更多应用资源的逐步整合。 现场执法监管系统 基于港口(航管)执法基地建设规划,依托统一的执法区域 管理和数字化监控平台,通过加强对辖区内的监控,结合移动平 台,形成完整的多维路径和信息追踪,真正做到问题能发现、事态能控制、突发问题能解决。 运行监测和辅助决策系统 对区域港口与航运业务日常所需填报及监测的数据经过科 学归纳及分析,采用统一平台,消除重复的填报数据,进行企业 输入和自动录入,并进行系统智能判断,避免填入错误的数据, 输入的数据经过智能组合,自动生成各业务部门所需的数据报 表,包括字段、格式,都可以根据需要进行定制,同时满足扩展 性需要,当有新的业务监测数据表需要产生时,系统将分析新的 需求,将所需字段融合进入日常监测和决策辅助平台的统一平台中,并生成新的所需业务数据监测及决策表。 综合指挥调度系统 建设以港航应急指挥中心为枢纽,以各级管理部门和经营港 口企业为节点,快速调度、信息共享的通信网络,满足应急处置中所需要的信息采集、指挥调度和过程监控等通信保障任务。 设计思路 根据项目的建设目标和“智慧港口”信息化平台的总体框架、 设计思路、建设内容及保障措施,围绕业务协同、信息共享,充 分考虑各航运(港政)管理处内部管理的需求,平台采用“全面 整合、重点补充、突出共享、逐步完善”策略,加强重点区域或 运输通道交通基础设施、运载装备、运行环境的监测监控,完善 运行协调、应急处置通信手段,促进跨区域、跨部门信息共享和业务协同。 以“统筹协调、综合监管”为目标,以提供综合、动态、实 时、准确、实用的安全畅通和应急数据共享为核心,围绕“保畅通、抓安全、促应急"等实际需求来建设智慧港口信息化平台。 系统充分整合和利用航运管理处现有相关信息资源,以地理 信息技术、网络视频技术、互联网技术、移动通信技术、云计算 技术为支撑,结合航运管理处专网与行业数据交换平台,构建航 运管理处与各部门之间智慧、畅通、安全、高效、绿色低碳的智 慧港口信息化平台。 系统充分考虑航运管理处安全法规及安全职责今后的变化 与发展趋势,应用目前主流的、成熟的应用技术,内联外引,优势互补,使系统建设具备良好的开放性、扩展性、可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值