【Java成长之路】--Struts2学习笔记

来源:互联网 发布:mccall软件质量模型 编辑:程序博客网 时间:2024/05/16 12:36

搭建环境

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>
1 0
原创粉丝点击