1)访问Web元素
取得Map类型request,session,application,真实类型 HttpServletRequest, HttpSession, ServletContext的引用:
1. 前三者:依赖于容器
2. 前三者:IOC (只用这种)
3. 后三者:依赖于容器
4. 后三者:IOC
方法一:ActionContext方式
一般在Action类的构造方法、或execute()方法中获取。
private Map request;
private Map session;
private Map application;
public LoginAction1() {
request = (Map)ActionContext.getContext().get("request");
session = ActionContext.getContext().getSession();
application = ActionContext.getContext().getApplication();
}
方式二:Ioc(控制反转)—推荐使用
public class LoginAction2 extends ActionSupport implements
RequestAware,SessionAware, ApplicationAware {
private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;
........
}
方式三:获取原类型
private HttpServletRequest request;
private HttpSession session;
private ServletContext application;
public LoginAction3() {
request = ServletActionContext.getRequest();
session = request.getSession();
application = session.getServletContext();
}
方式四:获取原类型-控制反转
public class LoginAction4 extends ActionSupport implements
ServletRequestAware {
private HttpServletRequest request;
private HttpSession session;
private ServletContext application;
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
this.session = request.getSession();
this.application = session.getServletContext();
}
2)Struts2配置文件模块化包含(include)
<include file="login.xml" />
3)默认的Action
当用户访问的namespace下一个不存在的Action,则会将使用默认的Action。
使用<default-action-ref name=”name”>标签 其中 name属性指向下面已经定义的Action名称了。
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index"></default-action-ref>
<action name="index">
<result>/default.jsp</result>
</action>
</package>
</struts>
当前访问namespace=”/”下不存在的Action时,则返回自动转到访问/default.jsp页面。
Struts2-Result
1)Result类型 (type)
1、 dispatcher
运用服务器跳转 jsp forward
不可以是Action,只可以跳转到视图
2、 redirect
客户端跳转(重定向)-url发生变化
不可以是Action,只可以跳转到视图
3、 chain
跳转到Action (forward action)
可以动用到Action
在访问Action时,Action前面不要加”/”
4、 redirectAction
客户端跳转到Action――-url发生变化
5、 freemarker
6、 httpheader
发送一个http头
7、 stream
下载
8、 velocity
9、 xslt
10、 plaintext
返回页面的源码
11、 titles
把页面分成几块,每个页面都可以动态的指定
<struts>
<constant name="struts.devMode" value="true" />
<package name="resultTypes" namespace="/r" extends="struts-default">
<action name="r1">
<result type="dispatcher">/r1.jsp</result>
</action>
<action name="r2">
<result type="redirect">/r2.jsp</result>
</action>
<action name="r3">
<result type="chain">r1</result>
</action>
<action name="r4">
<result type="redirectAction">r2</result>
</action>
</package>
</struts>
注:当访问不同的namespace下的Action时,则使用如下方式:
<result type="chain">
<param name="actionName">dashboard</param>//Action名称
<param name="namespace">/secure</param>//namespace值
</result>
2)全局结果集(Globle Result)
当有多个Action使用同一个结果集时,则可以使用全局结果集(Globle Result),如下:
<global-results>
<result name="mainpage">/main.jsp</result>
</global-results>
3)动态的结果集(dynamic result)
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" namespace="/user" extends="struts-default">
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>${r}</result>
</action>
</package>
</struts>
注:${}:作用是用于在配置文件中从Value stack(值栈)中取值。注意这个成员属性必需具有
注:此处的${}不是el表达式。
public class UserAction extends ActionSupport {
private int type;
private String r;
public String getR() {
return r;
}
public void setR(String r) {
this.r = r;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@Override
public String execute() throws Exception {
if(type == 1) r="/user_success.jsp";
else if (type == 2) r="/user_error.jsp";
return "success";
}
}
4)带参数的结果集
也就是向结果集传参数
服务器forward共享一个值栈(Value stack)
客户端跳转则不共享
例如:
<package name="user" namespace="/user" extends="struts-default">
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result type="redirect">/user_success.jsp?t=${type}</result>
</action>
</package>
UserAction类:
public class UserAction extends ActionSupport {
private int type;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@Override
public String execute() throws Exception {
return "success";
}
}
因为当执行Action后,已经将Action的成员属性写入了值堆栈了,因此可以在配置文件中使用${type}取出type的值。
但是只有Action才具有值堆栈的。Jsp是没有什么值堆栈的。因为当result重新定向到/user_success.jsp?t=${type}后,是不能从值堆栈中取出t的值。但是有ActionContext的,所以可以从中取出t的值。JSP代码如下:
<body>
User Success!
from valuestack: <s:property value="t"/><br/>
from actioncontext: <s:property value="#parameters.t"/>
<s:debug></s:debug>
</body>
注:<s:property value="t"/>取不到值,
因为jsp不是一个Action没有值堆栈。
<s:property value="#parameters.t"/>可以取出t的值,因为#方式是从ActionContext中取属性值。
ActionContext堆栈中具有parameters这个属性是用于存储传入的参数。所以可以取出。
分享到:
相关推荐
struts2学习测试代码,struts2学习测试代码2struts2学习测试代码,struts2学习测试代码
这是学习struts2时记得重点笔记,包括了一些原理,ognl语句的编写,以及如何设置拦截器等等一些基本知识,起到复习和巩固的作用
struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换
Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...
本人在网上收集的struts2 的学习资料,包括:struts2权威指南、struts2标签简单说明、struts2中文教程。
struts2学习笔记,非本人所写,但有学习的价值,总结的很好,分享一个!
Struts2学习笔记,介绍了struts2的基础部分
struts2学习笔记总结
STRUTS2站点,STRUTS2学习实例8
STRUTS2学习文档,如果你想花最少的时间来获取对struts2 的最大了解程度,则它将是你最好 的选择.
struts2学习心得,总结了struts2的常用方法,经验
struts2 将要进行自定义类型转换的点数据从1个增加到3个 struts3 进行全局的类型转换 struts4 使用Struts2中内部类中的方法进行自定义类型转换,用到的类StrutsTypeConverter struts5 增加集合类型,使用范型 ...
Struts2是一套非常优秀的Java WEB应用框架,实现优雅、功能强大、使用简洁。目前已有大量的企业项目采用Struts2来...学习完本视频,你会真正理解Struts2相对于Struts1的优雅和简洁,并使你具备开发Struts2项目的能力。
struts2学习测struts2学习测试代码试代码
struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别...
STRUTS2学习文档.pdf 对Struts2的一些配置文件进行了详细的说明。 Struts2―表单验证validate(html)对validate的type属性校验类型以及param 做了详细的解释说明。 struts2和struts的比较 让你更清楚的知道struts2...
struts 2完全学习手册
struts2学习系列文章,包括1 action访问,2 配置,3 获取servlet容器等
struts2学习ppt