Struts2框架笔记## l配置信息
package标签
A、name属性:
属性值与功能⽆关系
B、extends属性:
属性值固定,赋予package中的类action功能
extends = ”struts - default“
C、namespace属性
默认值为“/”,与action标签中name属性值构成访问路径
action标签
A、name属性
构成访问路径
package中不同action不可同名
B、class属性
action全路径(包名.类名)
C、method属性
action中默认执⾏execute()⽅法,通过method可以让action中多个⽅法执⾏result标签
A、name属性
与⽅法返回值⼀样
B、type属性
配置如何到路径中(转发或者重定向),默认转发。
转发(dispatcher)
重定向(redirect)
C、配置到其他的action当中
<result name = "success" type = "redirectAction">orders</result>
<result name = "success" type = "chain">orders</result>
分别对应重定向和转发“(chain存在缓存问题,⼀般不⽤)
orders为另⼀个action的name值”
<result name="success">/success.jsp</result>
action三种创建⽅式
1、创建普通类,不继承,不实现接⼝
2、创建类,实现Action接⼝
package action_e;
import com.opensymphony.xwork2.Action;
public class ModelAction implements Action {
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return null;
}
}
3、创建类,继承ActionSupport类(常⽤)
package action_e;
import com.opensymphony.xwork2.ActionSupport;
public class ModelAction extends ActionSupport{
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
ute();
}
}
注:ActionSupport本⾝实现了Action接⼝
***对Action中⽅法的访问⽅式
1、第⼀种⽅式
使⽤action标签的method属性,在这个属性⾥⾯写执⾏的⽅法
2、使⽤通配符⽅式实现
⽰例:
<!--    这⾥的“{1}”与通配符第⼀个“*”对应。同理,若是对应第⼆个通配符为“{2}”,以此类推 --> <action name="Book_*_Action" class="action_e.BookAction" method="{1}">
3、动态访问实现(⼀般不⽤)
Action获取表单提交数据
1、提交表单到action当中,action中⽆request对象,要先获取request对象action获取表单提交数据的主要三种⽅式
1、使⽤ActionContext类
A、创建ActionContext类对象
public String execute() throws Exception {
/* 第⼀种⽅式
* 第⼀步:获取ActionContext对象
*/
ActionContext context = Context();
Map<String, Object> map = Parameters(); //key是表单输⼊项name属性值,value是输⼊的值
Set<String> keys =  map.keySet();
for (String key : keys) {
//根据key得到value
Object[] o =  (Object [])(key); //数组形式,防⽌复选框
System.out.String(o));
}
return NONE;
}
2、使⽤ServletActionContext类
HttpServletRequest request = Request();
request.setAttribute("req", "reqValue");
3、使⽤接⼝注⼊⽅式
实现ServletRequestAwae接⼝,在⽅法中直接获取request对象
在Action中操作域对象
域对象
request, session,ServletContext(不常⽤)
//request域
HttpServletRequest request = Request();
request.setAttribute("req", "reqValue");
//session域
HttpSession session = Session();
session.setAttribute("sess", "sessValue");
//ServletContext域
ServletContext context = ServletContext();
context.setAttribute("context", "contextValue");
Struts2封装获取表单数据
属性封装
步骤:
A、在action成员变量位置定义变量
变量名称与表单输⼊项的name属性值⼀致
B、⽣成变量的get,set⽅法
****: 不能直接把数据封装到实体类对象中
模型驱动封装
(1)action实现接⼝ModelDriven
(2)实现接⼝中的getModel⽅法
把创建的对象返回
(3)在action中创建实体类对象
private User user = new user();
public User getModel(){
return user;
}
表达式封装
(1)声明实体类
(2)⽣成实体类变量的get和set⽅法
(3)修改表单输⼊项name属性值
如:user.password
ognl表达式
struts框架是干什么的功能:
在Struts2中操作值栈数据
⼀般ognl和Struts2标签⼀起使⽤
在jsp页⾯中引⼊标签库
<%@ taglib uri="/struts-tags" prefix="s"%>
eg1:
<!-- 使⽤ognl+struts2标签实现计算字符串长度
value属性值:ognl表达式
-->
<s:property value="'haha'.length()"/>
值栈
A、在struts2⾥⾯提供本⾝⼀种存储机制,类似于域对象,称为值栈,可以存值和取值
(1)在action⾥⾯把数据放到值栈⾥⾯,在页⾯中获取到值栈数据
B、servlet和action区别
(1)Servlet:默认在第⼀次访问时候创建,创建⼀次,单实例对象
(2)Action:访问时候创建,每次访问action时候,都会创建action对象,创建多次,多实例对象C、值栈存储位置
(1)每次访问action时候,都会创建action对象,
(2)在每个action对象⾥⾯都会有⼀个值栈对象(只有⼀个)
值栈内部结构
主要结构
root(list集合)**经常访问的内容
context(map集合)
获取值栈对象
(1)使⽤ActionContext类中的⽅法获取
public String execute() throws Exception {
// 1 获取ActionContext类对象
ActionContext context = Context();
//2 获取值栈对象
ValueStack stack1 = ValueStack();
ValueStack stack2 = ValueStack();
//每个action对象⾥⾯都只有⼀个值栈对象
System.out.println(stack1==stack2);
return NONE;
}
向值栈中放对象(三种⽅法)
(1)获取值栈对象,调⽤set⽅法(map对象)
ActionContext context = Context();
ValueStack stack = ValueStack();
//
stack.set(“itcast”, “itcastitheima”);
//
(2)获取值栈对象,调⽤push⽅法(String对象)
ActionContext context = Context();
ValueStack stack = ValueStack();
//
stack.set("itcast", "itcastitheima");
//
//
stack.push("abcd");
(3*最常⽤)再action中定义变量,⽣成变量的get⽅法
private String name;
public String getName() {
return name;
}
@Override
public String execute() throws Exception {
name = "  ";
//第三种⽅法可以减少空间浪费
从值栈中获取数据
1 使⽤struts2的标签+ognl表达式获取值栈数据
<s:property value=”ognl表达式”/>
获取对象的值:
<br/>
<s:property value="user.username"/>
<s:property value="user.password"/>
<s:property value="user.address"/>
OGNL的 ‘#’ 和 ‘%’ 的使⽤
<!-- 获取context⾥⾯数据,写ognl时候,⾸先添加符号
#context的key名称.域对象名称
-->
<%-- <s:property value="#q"/> --%>
1 在struts2标签中表单标签
(1)在struts2标签⾥⾯使⽤ognl表达式,如果直接在struts2表单标签⾥⾯使⽤ognl表达式不识别,只有%之后才会识别。<s:textfield name="username" value="%{#q}"></s:textfield>
Struts2

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。