struts2笔记全.docx

上传人:b****8 文档编号:28357011 上传时间:2023-07-10 格式:DOCX 页数:31 大小:1.47MB
下载 相关 举报
struts2笔记全.docx_第1页
第1页 / 共31页
struts2笔记全.docx_第2页
第2页 / 共31页
struts2笔记全.docx_第3页
第3页 / 共31页
struts2笔记全.docx_第4页
第4页 / 共31页
struts2笔记全.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

struts2笔记全.docx

《struts2笔记全.docx》由会员分享,可在线阅读,更多相关《struts2笔记全.docx(31页珍藏版)》请在冰豆网上搜索。

struts2笔记全.docx

struts2笔记全

方法二:

适合多个表单需要完成不同的功能时使用

方法三:

适合一个表单多个提交按钮,每个按钮对应一个方法

struts2工作在表现层actionjsp页面

hibernate工作在dao层,简化数据的增删改查

spring用来整合其他框架,用来简化事务的管理

框架(framework)的目的:

为了提高开发效率,减少重复代码

=====================================day1====================================

1.MVC模式,struts2是实现了MVC模式的一个框架

Model模型=>数据以及操作数据的逻辑,

对应着entity(实体类部分)指数据

对应着service(业务逻辑部分)

View视图=>数据的展现方式

jsp页面,用来展现数据

Controller控制器=>连接了模型和视图

职责:

接收请求参数

调用模型

将结果(模型的数据部分)存入作用域

转发(或重定向)到视图

struts2:

能够实现通用的类型转换操作

能够统一执行汉字字符的转码

执行参数的验证

...

MVC的优点:

分离了模型和视图,让代码各司其职,耦合度降低,可维护性提高

2.struts2的使用步骤

目录结构

apps下是示例代码

docs下是文档

libstruts提供的jar包,以及它依赖的第三方jar包

src是源代码

2.1添加jar包

struts2.3.16需要添加13个jar包

ognl-3.0.6.jar提供了OGNL表达式的功能

struts2-core-2.3.16.jarstruts2核心包

xwork-core-2.3.16.jar

struts1(mvc框架)

webwork(mvc框架)xwork

struts2=>从struts1以及webwork发展而来,结合了两个框架的优点

2.2控制器部分

1)前控制器(已提供)

控制所有请求,进入前控制器,再由前控制器将请求进行分发处理

在web.xml进行配置:

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

2)后控制器(指Action类)

可以继承ActionSupport(action支持类)

必须有无参构造方法

action方法的返回值必须是String,名字任意,无参

3)配置action类

配置文件的路径:

src

配置文件的名字:

struts.xml

DTD是一种xml定义文件

定义了xml中有哪些标签

标签中有哪些属性

标签之间的父子关系

--用来分类管理action

name="唯一值"

extends="struts-default"继承struts的默认配置,固定值

namespace="/路径"命名空间访问action时路径的一个组成部分

-->

--

name="action的路径"不能加/

class="包名.类名"

method="要执行的方法名",若方法名为execute,可以不写(默认)

-->

--http:

//ip地址:

端口号/项目名/namespace/action的name-->

--http:

//localhost:

8989/struts2/day1/hello-->

2.3视图部分

--配置视图

name="视图名"在action标签内要唯一

jsp的路径/开头的路径,叫绝对路径,/就是指WebRoot

内部默认使用了forward转发方式跳转到了jsp

-->

/1.jsp

/2.jsp

action方法的返回值代表视图的名字

2.4如何接收请求参数

方法1:

(传统方法)

(工具类,struts提供)

HttpServletRequestrequest=ServletActionContext.getRequest();

request.getParameter("参数名");

ServletActionContext.getResponse();//获得响应

ServletActionContext.getServletContext();//获取application作用域

方法2:

(推荐使用)

只要将请求参数名字与action的属性名相对应,

那么,struts就会将参数值赋值给action的属性

请求参数中,struts支持常见类型的类型转换,如:

String,Double(double),Integer(int),....

java.util.Date

如果只有年月日:

年-月-日

如果有年月日和时分秒:

年-月-日T时:

分:

还可以支持实体类型的赋值,如User对象

支持List集合类型

2.5如何将结果存入作用域,并在页面显示

方法1:

(传统)

仍然利用request对象,将变量存入作用域

HttpServletRequestrequest=ServletActionContext.getRequest();

request.setAttribute("list",list);

方法2:

(推荐)

可以认为:

action里的属性,同时被存储在了request作用域中

例如:

action有一个list属性,到了页面上用${requestScope.list}来获取此属性值

注意:

action的属性两个作用:

一是用来接收请求参数

二是将结果存储至request作用域

2.6struts中对于post请求中解码,默认字符集为UTF-8

如果页面采用了GBK编码,需要在struts.xml中添加:

如果是get请求中出现了中文乱码:

要修改tomcat/conf/server.xml

作业:

使用struts实现登录功能

====================================day2========================================

1.向其他作用域存值

方法1:

(传统)

HttpServletRequestrequest=ServletActionContext.getRequest();

HttpSessionsession=request.getSession();

session.setAttribute("变量名",值);

ServletContextapplication=ServletActionContext.getServletContext();

application.setAttribute("变量名",值);

方法2:

利用了SessionMap,ApplicationMap

Mapsession=ActionContext.getContext().getSession();

session.put("name","张三");//相当于session.setAttribute("name","张三");

session.get//相当于session.getAttribute("key");

session.remove//相当于session.removeAttribute("key");

是SessionMap这个实现提供的,不是map接口中定义了

session.invalidate//session.invalidate();使session立刻失效

Mapapplication=ActionContext.getContext().getApplication();

application.put("变量名",值);

2.值栈【重点】ValueStack

是struts2独有的,用来在action和页面之间进行传值的一种作用域

分为两部分:

Root根

Context上下文

2.1Root它的数据结构上是一个栈结构

类似于List,符合后进先出

ValueStackvs=ActionContext.getContext().getValueStack();

vs.push(对象);//将对象放入valueStack的Root

vs.peek();//获取栈顶对象,但不移除

vs.pop();//获取栈顶对象,并移除

页面上使用的标签【重点】

property/>//获取整个栈顶对象

propertyvalue="属性名"/>//获取栈中对象的属性,会依次查找栈中每个对象的属性

debug/>用来调试的标签,能够显示值栈的结构

结论:

即使不主动调用push方法,struts也会将当前访问的action对象放入栈中

因此,也可以使用

propertyvalue="属性名"/>来显示action对象的属性值

下面的两种方法,都可以用来显示action中的属性值:

【重点】

propertyvalue="属性名"/>

${requestScope.属性名}

这里struts对原始的request对象做了包装,改写了getAttribute方法

页面上用的requestScope已经是struts包装后的request对象了

//key=username

publicObjectgetAttribute(Stringkey){

Objectvalue=原始request.getAttribute(key);

if(value!

=null){//有,直接返回

returnvalue;

}

//如果原始的request中没有,到值栈中找

ValueStackvs=ActionContext.getContext().getValueStack();

returnvs.findValue(key);//在root找此属性

}

ValueStack的作用范围:

仅限于一次请求,跟request作用域一样

Action的作用范围:

一次请求,每次请求来了后都会创建新的action对象

2.2Context部分

它的数据结构是一个map,已经有一些预定义的键值对了:

keyvalue

requestRequestMap

keyvalue

sessionSessionMap

keyvalue

applicationApplicationMap

keyvalue

存值:

ValueStackvs=ActionContext.getContext().getValueStack();

vs.getContext().put("key",value);

还可以间接存入sessionMap,或applicationMap

取值:

propertyvalue="#key"/>

propertyvalue="#session.key"/>

加了#表示要从context中找,没加#表示从root中找

3.struts中的常见标签

propertyvalue=""/>用来显示值

加了#表示要从context中找,没加#表示从root中找

key属性名

3.1迭代标签

iterator>

3.2条件标签

if>

else>

elseif>

作业:

登录=》success.jsp

加一个超链接

1.查询当前用户的联系人,在页面使用struts的标签配合显示

nullnullnull

publicListfindContacts(Stringname,Stringqq,IntegercityId,

Stringusername,intpageNo,intpageSize);

username="联系人对应的用户名"

pageNo=1(页号)

pageSize=5(每页的记录数)

===============================day3======================================

1.视图的类型

用来控制action的跳转

跳转的目标

type="dispatcher"跳转的目标只能是jsp(默认值)底层使用了请求转发

type="redirect"跳转的目标可以是action也可以使jsp底层使用了重定向

type="redirectAction"跳转的目标只能是action底层使用了重定向

type="chain"跳转的目标只能是action底层使用了请求转发(不推荐)

1.1redirect

格式1:

(简化写法)

/homework/findContact

格式2:

(完整写法)

/homework/findContact

1.2redirectAction

--如果要重定向的action在同一个namespace下,可以省略

配置

-->

/homework

findContact

注意:

java.lang.OutOfMemoryError:

PermGenspace【内存耗尽错误】

只能重新启动tomcat服务器

所有的action有一个默认后缀".action",可加可不加

1.3chain

namespace的值

action的名字

2.掌握城市名字的显示

(利用了map集合)

注意:

严重:

IOExceptionwhileloading(加载)persisted(持久化)sessions:

java.io.EOFException

java.io.EOFException

3.掌握多条件组合查询的实现

a.sql语句的拼接

b.条件参数的传递

4.掌握条件查询,输入条件的回显(文本框、下拉列表)

5.分页

服务器端:

通过sql语句进行分页

oracle=>通过rownum配合子查询实现

select*from

(selecte.*,rownumrfrom

(select*from...500)e

whererownum<=pageSize*pageNo)

wherer>(pageNo-1)*pageSize

pageSizepageNo

每页10条,要查询第二页

11-20

5.1如何计算总页数

intcount=13;//总记录数

intpageSize=5;//每页记录数

方法1:

if(count%pageSize==0){

count/pageSize;//2

}else{

count/pageSize+1;//3

}

方法2:

(count-1)/pageSize+1

作业:

1.实现课堂的分页例题(必做)

2.在此基础上,上一页、下一页、第一页、最后一页

3.XX的分页实现

总共1000每页5条共有200页

12345678910第1页

12345678910第2页

....

234567891011第7页

3456789101112第8页

...

=================================day4=======================================

1.OGNL表达式EL表达式

对象图导航语言

User对象Root

username

address

city

street

postcode

propertyvalue="address.street"/>

iteratorvalue="">

iftest="1==obj"/>

request.setAttribute("user",user);

${user.address.street}

用途:

用来获取值栈作用域中的变量值

跟EL表达式的区别:

1)OGNL只能配合struts标签使用,不能单独使用

2)OGNL中可以调用对象的方法,EL只能调用get,set方法,不能调用其它方法

3)OGNL中可以创建对象

OGNL创建普通java对象:

new包名.类名()

OGNL创建map:

#{key1:

value1,key2:

value2...}

OGNL创建list:

{value1,value2,...}

2.struts中其它常用标签

1)日期标签

datename="ognl表达式"format="日期格式"/>

2)

action>

namespace="要执行action所在的命名空间"

name="要执行action的名称"

executeResult="true|false"是否要包含action执行的视图结果

var="变量名"会将加了var的action放入context作用域

用途:

a)起到include的作用,包含其他action结果

b)将重复的代码集中在同一个action,用

action>标签来引用它

include动态包含jsp,html,servlet

<%@include静态包含jsp,html

UserRoot

username

propertyvalue="username"/>本质上getUsername()

propertyvalue="getUsername()"/>

propertyvalue="address.street"/>

propertyvalue="getAddress().getStreet()"/>

3)跟表单相关的标签

form>

textfield>

password>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1