Struts2框架笔记

## struts.xml配置信息
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
		return super.execute();
	}
}

注: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 = ActionContext.getContext();
		Map<String, Object> map = context.getParameters(); //key是表单输入项name属性值,value是输入的值
		
		Set<String> keys =  map.keySet();
		for (String key : keys) {
			//根据key得到value
			Object[] o =  (Object [])map.get(key); //数组形式,防止复选框
			System.out.println(Arrays.toString(o));
		}
		return NONE;
	}

2、使用ServletActionContext类

HttpServletRequest request = ServletActionContext.getRequest();
		request.setAttribute("req", "reqValue");

3、使用接口注入方式
实现ServletRequestAwae接口,在方法中直接获取request对象

在Action中操作域对象
域对象

request, session,ServletContext(不常用)

		//request域
		HttpServletRequest request = ServletActionContext.getRequest();
		request.setAttribute("req", "reqValue");
		
		//session域
		HttpSession session = request.getSession();
		session.setAttribute("sess", "sessValue");
		
		//ServletContext域
		 ServletContext context = ServletActionContext.getServletContext();
		 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表达式

功能:

在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 = ActionContext.getContext();
		//2 获取值栈对象
		ValueStack stack1 = context.getValueStack();
		
		ValueStack stack2 = context.getValueStack();
		
		//每个action对象里面都只有一个值栈对象
		System.out.println(stack1==stack2);
		return NONE;
	}
向值栈中放对象(三种方法)

(1)获取值栈对象,调用set方法(map对象)
ActionContext context = ActionContext.getContext();
ValueStack stack = context.getValueStack();
//
stack.set(“itcast”, “itcastitheima”);
//
(2)获取值栈对象,调用push方法(String对象)

	ActionContext context = ActionContext.getContext();
		ValueStack stack = context.getValueStack();
//		
		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="#request.req"/> --%>
1 在struts2标签中表单标签
(1)在struts2标签里面使用ognl表达式,如果直接在struts2表单标签里面使用ognl表达式不识别,只有%之后才会识别。
<s:textfield name="username" value="%{#request.req}"></s:textfield>

Struts2拦截器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值