您的位置:首页 > 编程语言 > Java开发

struts2基础知识整理

2012-07-10 22:48 211 查看
1.解决用户直接访问jsp的问题:

将jsp页面放入WEB-INF下,应为WEB-INF目录中的内容不能直接访问。只能通过转发获得。

2.javabean中的属性和成员变量。

属性对应于javabean中getter/setter中的去掉get和set的单词的首字母小写的形式。成员变量是javabean中声明的私有变量。通常属性和成员变量同名。

3.EL表达式解析为java代码

${page.pageInfo} ===>out.println(page.getPageInfo());

EL表达式装换为java代码的时候使用的是getPageInfo方法。即使用的是javabean的属性,而不是成员变量.

4.EL表达式的作用

EL表达式将数据从四个范围(pageContext,request,session,application)中取出来显示或计算

EL表达式解决了html代码和java代码混杂的问题,让jsp页面不再有java代码。

5.Ognl的优点

可以方便的操作对象的属性,是页面更简洁。

支持运算符,比普通标记具有更强的功能

支持对象方法调用。

支持类静态方法的调用。

支持赋值操作和表达式串联。

访问OGNL上下文和ActionContext

可以操纵结合对象

6.OGNL表达式

访问OGNL上下文和ActionContext,#相当于ActionContext.getContext();

'%':在标记的属性为字符串时,计算OGNL表达式的值

'$':有两个主要用途,用于国际化和应用OGNL表达式。

7.OGNL使用

访问基本数据类型:id

访问字符串类型:name

访问数组和List:city[0]

访问map:map.key map["key"]

调用静态方法:@报名.类名@静态方法名();

调用普通方法:对象.方法名();

创建map,list:{1,2,3,4,5,6} map #{key1:value1,key2:value2}

关联属性

emps[1].name

投影:投影就是在已有的集合上创建新集合的过程

emps.{name} 获取emps集合中的所有对象的name属性

过滤:

emps.{?#this.salary>2000}获取emps集合中的对象中薪水大于2000的所有emp

在result中使用OGNL表达式

<result>

/WEB-INF/jsp/test.jsp?id=${user.userId}

</result>

8.OGNL引擎的基本结构

OGNL涉及的三个对象:OGNL引擎,root对象,context对象

9.ValueStack

xwork将ognl进行了扩展,struts2将这些扩展封装成一个新的对象:ValueStack。

10.valuestack核心概念

在struts2请求到来时,首先会创建一个ValueStack,然后将当前的action放入栈顶。

struts2会把ValueStack对象放入request中,属性为struts.valueStack,实例化的对象为(OgnlValueStack)

所以标记库会访问到ValueStack。

11.从ValueStack取值

<s:properties />默认从ValueStack栈顶取值,我们可以指定Value属性

12.struts如何支持EL表达式

struts通过StrutsRequestWrapper重写了getAttribute方法

13.我们使用struts的jsp页面中的request和response的类型(注意:request和response不是我们的HttpServletRequest和response)

org.apache.struts2.dispatcher.StrutsRequestWrapper,此类实现了HttpSevletRequest接口,并且有一个HttpServletRequest对象

org.apache.catalina.connector.ResponseFacade

14.struts2核心

每次请求都会创建一个action,因为每次请求都会创建一个action,所以不用担心线程安全问题。

Action对象将置于ValueStack的栈顶

15.在action中访问session和application

a.使用ActionContext访问session

ActionContext context=ActionContext.getContext();

Map session =context.getSession();

Map application=context.getApplication();

b.通过实现SessionAware接口

类似的还有ServletRequestAware

ServletResponseAware

ServletContextAware
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: