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("    ")获取值;

 

posted @ 2012-12-22 21:26  skyding  阅读(144)  评论(0编辑  收藏  举报