zoukankan      html  css  js  c++  java
  • struts2 学习笔记

    Action访问URL

    在struts.xml中配置的action,访问路径是http://ip:port/工程名/.../action名
    package节点的名称对url没有影响,只有namespace在存在同名action的情况下会有影响。因为struts寻找action的方式是首先按照action的url中,action名称之前的当做命名空间的名称来查找,如果没有就在默认命名空间中查找。所以,如果不存在相同的action时,随时都可以只写action的名称进行访问!

    执行路线

    配置文件

    修改配置文件位置

    在web.xml中配置
    <!-- structs2配置 -->
    <filter>
    <filter-name>struts2</filter-name>
    <filter-class>
    org.apache.struts2.dispatcher.FilterDispatcher
    </filter-class>
    <init-param>  
         <param-name>config</param-name>
         <param-value>resources/config/struts.xml</param-value>//当前相对位置是classes
    </init-param>
    </filter>

    程序 = 数据结构(构成元素)+算法(运行机理)

    struts-default.xml 和 default.properties 是框架级的配置文件。
    struts.xml 和 struts.properties 是应用级别的配置。它们的结构与框架级别的配置文件完全相同,但是其中定义的所有内容将覆盖框架级别的配置定义。
    struts 框架中的xml文件的配置元素定义是properties文件的配置元素的超集。==凡是能够在properties中定义的配置元素都可以在xml中找到对应的配置方式(constant)来代替,反之则不成立。

    struts2 中xml配置文件中bean(与spring中一样,管理bean)节点和constant节点用于指定运行时的参数,被称为容器配置元素。
    package节点被称为 事件映射关系。

    配置参考:

    <action name="syslogo" class="com.newland.bi.webservice.frame.childsys.LogoAction">
    <!--配置fi1eUpload的拦截器-->
    <interceptor-ref name="fileUpload">
    <!--配置允许上传的文件类型-->
    <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
    <!--配置允许上传的文件大小(K)-->
    <param name="maximumSize">2</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack"/>
    <param name="root_path">upload/sys/logo</param>
    <result name="success">upload_logo.jsp</result>
    <result name="input">upload_logo.jsp</result>
    <result name="fail">upload_logo.jsp</result>
    </action>


    配置说明:
    result外部的param可以对action中的属性赋值的,这是ioc注入。--LogoAction中的root_path 将被注入
    result内部的param一般用不到,是另外几种跳转方式时传递参数用的。

    在jsp页面中获取值栈

    <%
    ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");
    String ma = vs.findString("aa");


    值栈中有action,通过调试可以看到
    %>

    打印struts的日志

    在log4j的配置文件中添加:

    log4j.logger.org.apache.struts2=DEBUG
    log4j.logger.com.opensymphony.xwork2=DEBUG

    设计模式

    ThreadLocal模式

    与synchronized不同:synchronized是不同线程之间的数据共享,threadlocal是同一线程之间的不同时刻的数据共享(web中不同层次,表示层/业务逻辑层/持久层)
    与对象传递不同:虽然通过自定义对象也可以达到同样目的,但是需创建对象
    步骤:
    1、建立一个类,并在其中封装一个静态的threadlocal变量,使其成为一个数据共享环境。
    2、在类中实现访问静态threadlocal变量的静态方法;
    public class Counter {
    
    	// 1
    	private static ThreadLocal<Integer> counterContext = new ThreadLocal<Integer>() {
    		protected synchronized Integer initialValue() {
    			return 10;
    		}
    	};
    
    	public static Integer get() {
    		return counterContext.get();
    	}
    
    	public static void set(Integer value) {
    		counterContext.set(value);
    	}
    
    	// 自定义封装业务逻辑
    	public static Integer getNextCount() {
    		counterContext.set(counterContext.get() + 1);
    		return counterContext.get();
    	}
    }

    装饰模式:

    装饰模式可以通过继承来实现,不过比继承有更灵活的应用场景:、
    1、适合对默认目标实现中的多个接口进行排列组合调度
    2、适合对默认目标实现进行选择性扩展
    3、适合默认目标实现未知或者不易扩展的情况


    策略模式:(示例:有无折扣计算总价)




    构造者模式:

    适用于构建对象的构造过程十分复杂、构建对象的初始化对于其内部的对象有着强烈的逻辑依赖。

    责任链模式:

    击鼓传花

    OGNL

    Struts当接收到一个请求之后就会创建ActionContext、valueStack、action,并将action放入valueStack中
    OGNL:  struts2中用来取值,要配合struts标签使用
    EL: jsp中使用的,可以读取struts中valueStack(值栈)中的值
    在jsp中可以通过 ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack"); 获得,vs.findString("    ")获取值;

  • 相关阅读:
    P4294 [WC2008]游览计划(斯坦纳树)
    CF1056E Check Transcription(SA)
    CF1391D 505(状压dp+思维)
    CF56E Domino Principle(BIT+dp)
    P3402 可持久化并查集
    可持久化平衡树
    前端网页的懒加载
    多种认证、授权模型的比较
    CSS变量(自定义属性)实践指南
    SCSS提取和懒加载
  • 原文地址:https://www.cnblogs.com/vvch/p/4027599.html
Copyright © 2011-2022 走看看