struts基础学习
来源:互联网 发布:诺基亚运行python 编辑:程序博客网 时间:2024/06/06 14:21
1.struts1.x于struts2.x区别
2.struts2基础学习
2.1 配置文件
<constant name="struts.i18n.encoding" value="gbk" />
<pre name="code" class="html"> <constant name="struts.devMode" value="true" />
<package name="action" namespace="/action" extends="struts-default"><action name="action" class="com.struts.action.Action"><result name="success">/pagestruts/Action.jsp</result></action><action name="actionimpl" class="com.struts.action.ActionExtends"><result name="success">/pagestruts/Action.jsp</result></action><action name="actionextends" class="com.struts.action.ActionImpl"><result name="success">/pagestruts/Action.jsp</result></action></package>c) 配置命名空间(namespace)(通过不同的命名空间划分不同的功能模块,利于多人协作开发时保持相互之间的独立性,提高开发效率)
<package name="wildcard" namespace="/wildcard" extends="struts-default"><action name="*_*" class="com.struts.wildcard.{1}Action" method="{2}"><result>/pagestruts/{1}_{2}.jsp</result></action></package>d) 配置Action(将url、Action类、展示页面三者绑定)
type值
使用说明
chain
用来处理Action链,将一个action的执行与另外一个配置好的action串连起来。用第一个action的getter方法和第二个action的setter方法来完成action之间属性的复制。服务器端跳转到action
dispatcher
用来转向JSP页面,这是默认的结果类型,如果在action配置中没有配置其他的结果类型,它就会被使用。服务器端跳转到视图
freemaker
处理FreeMarker模板
httpheader
控制特殊HTTP行为的结果类型
redirect
重定向到一个URL。客户端跳转到视图
redirectAction
重定向到一个Action。客户端跳转到Action
stream
向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据
velocity
处理Velocity模板
xslt
处理XML/XLST模板
plainText
显示原始文件内容,例如文件源代码
global result配置:<package name="test" namespace="/globalResult" extends="struts-default"> <global-results> <span style="white-space:pre"></span><result name="mainpage">/main.jsp</result> <span style="white-space:pre"></span></global-results> </package>e) include 多配置文件配置
<include file="XXXXX.xml" />
2.2 Action
package com.struts.action;public class Action {public final String SUCCESS = "success";public String execute(){return SUCCESS;}}
package com.struts.action;import com.opensymphony.xwork2.Action;public class ActionImpl implements Action{public String execute() throws Exception {return SUCCESS;}}
package com.struts.action;import com.opensymphony.xwork2.ActionSupport;public class ActionExtends extends ActionSupport{private static final long serialVersionUID = 8545758502007427546L;@Overridepublic String execute() throws Exception {return SUCCESS;}}action的动态调用 访问方式为actionname!methodname
2.3 struts标签
<li>property: <s:property value="username"/> </li><li>property 取值为字符串: <s:property value="'username'"/> </li><li>property 设定默认值: <s:property value="admin" default="管理员"/> </li><li>property 设定HTML: <s:property value="'<hr/>'" escape="false"/> </li>2.3.2 set 设置变量值
<pre name="code" class="html"> <li>set 设定adminName值(默认为request 和 ActionContext): <s:set var="adminName" value="username" /></li><li>set 从request取值: <s:property value="#request.adminName" /></li><li>set 从ActionContext取值: <s:property value="#adminName" /></li><s:debug></s:debug><%--<li>set 设定范围: <s:set name="adminPassword" value="password" scope="page"/></li><li>set 从相应范围取值: <%=pageContext.getAttribute("adminPassword") %></li>--%><li>set 设定var,范围为ActionContext: <s:set var="adminPassword" value="password" scope="session"/></li><li>set 使用#取值: <s:property value="#adminPassword"/> </li><li>set 从相应范围取值: <s:property value="#session.adminPassword"/> </li>2.3.3 action 执行Action
<s:action var="a" name="testOgnl" namespace="/" executeResult="true" ignoreContextParams="false" > <s:param name="uname">老高</s:param> </s:action>2.3.4 include 包含其他资源执行结果
<li>include _include1.html 包含静态英文文件,说明%用法<s:set var="incPage" value="%{'/_include1.html'}" /><s:include value="%{#incPage}"></s:include></li>2.3.5 if elseif else 流程控制标签
<%request.setAttribute("random",new Random().nextInt(100)); %> <s:if test="#request.random>=80"> <b>优秀!</b> </s:if> <s:elseif test="#request.random>=60"> <b>一般!</b> </s:elseif><s:else><b>不合格!</b></s:else>2.3.5 date 输出日期
<% request.setAttribute("d",new Date(23432432L)); %> <s:date name="#request.d" format="yyyy-MM-dd" nice="true" /> <!-- 增加nice,format属性不起作用 --> <hr/> <s:date name="#request.d" format="yyyy-MM-dd" var="c"/> <!-- 使用var,时间不会打印出,而是保存在c变量中! -->2.3.6 iterator 循环迭代标签
1. value 将要迭代的集合,使用OGNL表示
2. var 指向集合中正被迭代的对象
3. begin 如果指定,迭代器从begin指定的索引开始
4. end 如果指定,迭代器到end指定的索引结束(包含end索引指向的对象)
5. step 如果指定,迭代器每次递增的增量。如果不指定,默认是1
6. status 用来表示迭代器状态的变量。他有如下的方法:int getIndex()返回当前迭代的索引值
boolean isEven()当前迭代的索引值是否偶数
boolean isFirst()当前迭代的索引值是否第一个元素
boolean isLast()当前迭代的索引值是否最后一个元素
boolean isOdd()当前迭代的索引值是否奇数
<body> <s:set var="s" value="{00,11,22,33,44,55,66,77,88,99}" ></s:set> <table width="200px" border="1"> <s:iterator value="#request.s" var="temp" begin="0" end="7" step="1" status="idx"> <s:if test="#idx.odd"><tr bgcolor="gray"><td><s:property value="#idx.index"/>---<s:property value="#temp" /></td></tr> </s:if> <s:else><tr><td><s:property value="#idx.index"/>---<s:property value="#temp" /></td></tr> </s:else> </s:iterator> </table> </body>2.3.7 textfield 文本域 | textarea 多行文本域 | file 文件域 | checkbox | checkboxlist 复选框 | radio 单选按钮 | selet下拉框 等参见开发文档
2.4 ognl
<body> <s:set var="list" value="{'a','b','c'}" scope="request"></s:set><p><s:property value="#request.list.get(2)" /></p> </body>
<body> <% request.setAttribute("a","123456"); %> <s:set var="m" value="#{'name':'老高','pwd':#request.a}" scope="request"></s:set><p><s:property value="#request.m.name" /></p><p><s:property value="#request.m.pwd" /></p> </body>
<body> <s:set var="s" value="{'a','b','c'}" scope="request"></s:set> <s:set var="m" value="#{'name':'老高','pwd':'123456'}" scope="request"></s:set><p><s:property value="'a' in {'a','b','c'}" /></p><p><s:property value="'a' not in #request.s" /></p><p><s:property value="'name' in #request.m.keys" /></p><p><s:property value="'老高' in #request.m.values" /></p> </body>2.4.3 过滤/投影(我们把过滤集合中的元素产生一个子集合,叫做投影)
<html> <head> <title>测试OGNL</title> </head> <body> <% User u1 = new User("张三","123456"); User u3 = new User("王五","123456"); User u5 = new User("高淇","654321"); User u6 = new User("马士兵","654321"); List list = new ArrayList(); list.add(u1); list.add(u3); list.add(u5); list.add(u6); request.setAttribute("s",list); %> <s:set var="s1" value="#request.s.{?#this.pwd=='654321'}" scope="request" ></s:set> <s:iterator value="#request.s1" var="temp" > <p><s:property value="#temp.uname" /></p> </s:iterator> </body></html>2.4.4 OGNL其他技术
• 调用对象普通方法 直接调用即可:<s:property value="#request.t5.test1()" />
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
- struts学习基础准备工作
- struts基础学习
- Struts基础学习一
- Struts框架学习基础
- Struts学习笔记--(一)Struts基础
- Struts学习笔记--(二)Struts基础
- 传智播客学习之Struts基础
- Struts学习(一)基础
- Struts基础学习-文件上传与下载
- Hibernate及Struts框架基础学习(一)
- 【struts基础】Struts2的值栈学习
- struts基础
- Struts基础
- Struts基础
- Struts基础
- Struts基础
- struts基础
- Struts基础
- hibernate查询方式中load和get的使用
- 转自《程序员你伤不起》--总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
- Eclipse中XSD文件缓存
- 百练-2746-OnlineJudge-约瑟夫问题.一(栈,数组模拟)
- awk的printf用法
- struts基础学习
- Java内存溢出
- 为ScrolloView加手势实现上下左右移动效果
- 谈谈我的看法之索引中的B树和B+树
- CodeIgniter Database
- 质因数分解
- Linux那些事儿之我是EHCI(2) 套路
- hdu 1171 Big Event in HDU (多重背包)
- MyEclipse Debug测试