博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2 学习笔记
阅读量:5122 次
发布时间:2019-06-13

本文共 3040 字,大约阅读时间需要 10 分钟。

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
counterContext = new ThreadLocal
() { 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("    ")获取值;

 

转载于:https://www.cnblogs.com/vvch/archive/2012/12/22/4027599.html

你可能感兴趣的文章
Ugly Windows
查看>>
DataGridView的行的字体颜色变化
查看>>
Java再学习——关于ConcurrentHashMap
查看>>
如何处理Win10电脑黑屏后出现代码0xc0000225的错误?
查看>>
局域网内手机访问电脑网站注意几点
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Day19内容回顾
查看>>
第七次作业
查看>>
SpringBoot项目打包
查看>>
Linux操作系统 和 Windows操作系统 的区别
查看>>
《QQ欢乐斗地主》山寨版
查看>>
文件流的使用以及序列化和反序列化的方法使用
查看>>
Android-多线程AsyncTask
查看>>
第一个Spring冲刺周期团队进展报告
查看>>
红黑树 c++ 实现
查看>>
Android 获取网络链接类型
查看>>
linux中启动与终止lnmp的脚本
查看>>
gdb中信号的处理[转]
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如何在Access2007中使用日期类型查询数据
查看>>