【Java成长之路】--Struts2学习笔记
2017-01-18 10:57
495 查看
搭建环境
1.下载structs2.5.8jar包。首先去官方下载structs2.5.8的jar包。
然后打开刚才所解压的structs文件夹,找到其中的lib文件夹,里面存放了相关的jar包,在其中找到这些必须的包。
2,然后配置web.xml文件,如果没有该文件,在WebContent > WEB-INF下创建一个即可,然后写入以下内容。
3,然后在Java Resources > src 下新建一个名为:struts.xml文件,写入以下内容。
package配置
<-- package:包,struts2使用package来组织模块 name 属性:必须,用于其他包应用当前包 extends:当前包继承哪个包,通常是:struts-default namespace:可选,想要调用包里的action就必须把这个属性所定义的命名空间添加到有关的URI. --> <package name="helloStruts2" extends="struts-default" namespace="/zhl"> <!-- 配置一个action:一个struts2的请求就是一个action name:对应一个struts2的请求的名字,不包含扩展名 class:的默认值是com.opensymphony.xwork2.ActionSupport method:的默认值是:execute result:结果 --> <action name="product-input" class="com.opensymphony.xwork2.ActionSupport" method="execute"> <!-- result:结果,表示action方法执行后可能返回的一个结果,可以有多个 多个result用name来区分 name:标识一个result.和action方法的返回值对应。默认值是success type:表示结果的类型,默认值是:dispatcher(转发到结果) --> <result name="success" type="dispatcher">/WEB-INF/pages/input.jsp</result> </action> <action name="product-save" class="Entity.Product" method="save"> <result name="details">/WEB-INF/pages/details.jsp</result> </action> </package>
在Action中访问WEB资源
1,什么是web资源?httpServletRequest,HttpSession 。。。
2,如果访问?
1,和Servlet API 解耦的方式:只能访问有限的Servlet API 对象 >使用ActionContext >实现XxxAware 接口 2,和Servlet API 耦合的方式 : 可以访问更多的Servlet API 对象 >使用ServletActionContext >实现ServletXxxAware 接口
result
name:type:
dispatchaer(默认):转发
redirect:重定向
redirectAction:重定向一个action
chain:转发到一个action
通配符
<action name="UserAction-*" class="action.User" method="{1}"> <result name="{1}-success">/success.jsp</result> </action>
OGNL
值栈1,${name} 读取name时,实际上该属性值并不在request等域对象中,而是从值栈中获取的。
2,ValueStack:
可以从ActionContext中作曲值栈对象
值栈分为两个逻辑部分
mpa栈:实际上就是OgnlContext类型,是个Map,也是对ActionContext的引用,里面存着各种Map。requestMap,SessionMap,applicationMap,parametersMpa,attr。
对象栈:实际上是CompoundRoot类型,是一个使用ArrayList定义的栈。里面保存着各种和当前Action实例相关的对象。是一个数据结构意义上的栈
Struts2利用s:property标签和OGNL表达式来读取值栈中的属性值
1,值栈中的属性值
对于对象栈:对象中某一个对象的属性值
Map栈:request,session,application的属性值或一个请求参数的值
2,读取对象栈只对象的属性
若想读取Object Stack里的某个对象的属性。可以使用 object。propertyName;
objectStace里的对象通过一个从0开始的下标来引用 [0].message;
异常处理:execption-mapping
exception-mapping : 配置当前Action 的声明式异常处理exception-mapping中有两个元素
exception:指定需要捕获的异常类型
result:指定响应结果
<action name="details" class="details"> <exception-mapping result="error" exception="java.lang.ArithmeticException"></exception-mapping> <result name="success">/details.jsp</result> <result name="error">/error.jsp</result> </action>
通用标签
property:用EL更方便s:url:动态的创建一个URL
<!--对于value值会自动的进行OGNL解析--> <s:url value="/testUrl" var="url2"> <s:param name="id" value="id"></s:param> </s:url> ${url2 } <!-- 取消自动OGNL解析 --> <s:url value="/testUrl" var="url2"> <s:param name="id" value="'id'"></s:param> </s:url> ${url2 } <!-- 构建一个请求action的地址 --> <s:url action="details" namespace="/" method="execute" var="url3"></s:url>s ${url3 }
s:set s:set 向page,rquest,session,application域对象中放入一个属性值
<s:set value="name" var="id" scope="request"></s:set> Name:${requestScope.name }
s:push 把一个标签开始后压入到值栈中,标签结束后,弹出值栈
<% Person person = new Person(); person.setName("zhl"); person.setAge(20); request.setAttribute("person", person); %> <br> <s:push value="#request.person"> ${name}</s:push>
if else
<s:if test="age>1000"> I7 </s:if> <s:elseif test="age>800"> I5 </s:elseif> <s:else> I3 </s:else>
s:iterator 遍历
<% List<Person> list=new ArrayList(); list.add(new Person("zhl",1)); list.add(new Person("zhl",2)); list.add(new Person("zhl",3)); request.setAttribute("list", list); %> <s:iterator value="#request.list"> ${name } - ${age }<br> </s:iterator>
s:date 可以对Date进行排版
s:date 可以对Date进行排版 <s:date name="#session.date" format="yyyy-MM-dd hh:mm:ss" var="date2"/> date:${date2 }
s:sort 可以对集合中的元素进行排序
<% PersonComparator pc = new PersonComparator(); request.setAttribute("comparator", pc); %> <s:sort comparator="#request.comparator" source="#request.list" var="list2"> <s:iterator value="#attr.list2"> ${name } - ${age }<br> </s:iterator> </s:sort>
s:a
可以使用%{}把属性包起来,强制进行OGNL解析 <s:a href="getPerson.action?name=%{name}"></s:a>
表单标签
<% List<city> citys = new ArrayList(); citys.add(new city(1001, "aa")); citys.add(new city(1002, "bb")); citys.add(new city(1003, "cc")); request.setAttribute("citys", citys); %> <br> <!-- 可以表单回显:把栈顶对象开始匹配属性,并把匹配的属性值赋到对应的label中 --> <s:form action="save.action"> <s:hidden name="userId"></s:hidden> <s:textfield name="userName" label="UserName"></s:textfield> <s:password name="password" label="PassWord" showPassword="true"></s:password> <s:textarea name="desc" label="Desc"></s:textarea> <s:checkbox name="married" label="married"></s:checkbox> <s:radio name="radio" list="#{'1':'java','2':'android'}" label="radio"></s:radio> <s:checkboxlist name="checkList" list="#request.citys" listKey="cityId" listValue="cityName" label="checkList"></s:checkboxlist> <s:select name="select" headerKey="0" list="{1,2,3,4,5,6,7,8,9,10}" headerValue="请选择..." label="select"> <s:optgroup label="0-10" list="#{0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9}"></s:optgroup> </s:select> <s:submit></s:submit> </s:form>
相关文章推荐
- Java学习笔记-struts2基础(1)
- java 从零开始,学习笔记之基础入门<Struts2_实战演练(上)>(三十八)
- 0000007_JAVA学习之路_JAVA程序员成长之路
- Java学习笔记 Struts2拦截器实现权限登录
- java三大框架学习之路---Struts2_HelloWorld
- [原创]java WEB学习笔记56:Struts2学习之路---Struts 版本的 登录 demo
- Java与Flex学习笔记(11)----关于Struts2拦截Flex请求的问题
- Java.Web学习笔记 Struts2
- Java学习笔记-Struts2工作机制
- [原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射
- java学习之路---正则表达式---学习笔记
- Java学习笔记-struts2基础(1)
- java学习之路-分享笔记20150327
- [原创]java WEB学习笔记54:Struts2学习之路---概述,环境的搭建
- 传智播客JAVA培训struts2学习笔记
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Struts2_实战演练(上)>(三十八)
- java 从零开始,学习笔记之基础入门<Struts2_实战演练(中)>(三十九)
- java痛苦学习之路[四]---关于struts2-convention-plugin使用
- [原创]java WEB学习笔记54:Struts2学习之路--- 编写Struts2 的第一个程序,HelloWord,简述 package ,action,result
- 传智播客JAVA培训struts2学习笔记一