您的位置:首页 > 编程语言 > Java开发

【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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javaEE java Struts2