struts2day01笔记Word文档格式.docx
《struts2day01笔记Word文档格式.docx》由会员分享,可在线阅读,更多相关《struts2day01笔记Word文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
开发流程类似struts1,内部结构类似webwork
(struts2和webwork源自xwork命令模式框架)
1.3.struts2开发包结构
使用框架,导入jar包
课程使用struts-2.3.15.3-all.zip版本学习
apps使用demo(方便后期快速导入jar包和配置文件)
开发中war重命名成zip包解压找到里面的13个核心jar包
doc文档(学习struts2的官方官方规范文档)
lib开发struts2需要的所有jar包
src源代码
开发struts2没必要导入lib下128个jar包(去struts2_blank.war下方找struts2最基本jar)
将war包改为zip扩展名,解压缩
回顾jar记忆:
核心struts2-core-3.15.3.jar+xwork-core+ognl(3)上传(2jar)日志:
2jar字符串lang1
asm.*3jar处理字节码信息javassist.jar1代理相关freemarker1jar图形模板引擎
开发strutrs2基包导入web工程!
1.4.struts2入门理论
JavaEE设计模式:
前端控制器模式过滤器模式访问如图:
前段控制器作用:
请求分发!
通过struts.xml配置给指定Action
struts前端控制器:
开发中将所有的重复的代码提前到前端控制器去完成,在Action中只要写不重复业务处理代码!
2.Struts2快速入门案例
第一步:
在myeclipse新建webproject
选择javaee版本,课程优先5.0------myeclipse2014servlet版本2.5
采用JDK6编译器
第二步:
导入struts2开发jar包
apps/struts2_blank.war/WEB-INF/lib/13个jar包
asm-*字节码操作类库(.class文件)
commons-fileupload文件上传依赖commons-io
commons-lang3对字符串、数据操作公共方法
commons-loggingJava通用日志接口,依赖日志实现log4j
freemarker模板引擎(struts2标签库,依赖freemarker)
javassist生成代理
ognl表达式语言(比EL强大很多倍)
struts2-core核心jar包
xwork-corestruts2和webwork依赖命令模式框架
2:
配置web.xml
3:
配置struts.xml推荐找到2.3.15.jar-->
apps目录:
struts-blank自带struts.xml文件导入!
编写程序
编写HelloAction(类似之前写的Servlet)
5struts.xml注册action和请求资源虚拟路径映射!
访问该actionhttp:
//localhost/strut2_day01/hellAction
结果!
!
运行流程分析图解:
3.分析struts2运行原理
Struts2核心控制器StrutsPrepareAndExecuteFilter(准备和执行)
--------前端控制器模式
请求---执行一堆拦截器组件(业务功能)----具体Action
Struts2可以复用代码功能,基于Interceptor实现的
执行了哪些拦截器?
小结原理:
1:
通过web.xml配置前端控制器
前端控制器执行一组拦截器通过struts.xml访问具体action执行业务方法
actionexecute方法返回字符串结果页面跳转!
拦截器组件执行顺序:
参考struts-core.jar提供struts-default.xml配置文件
默认情况下,访问每个Action,defaultStack都会执行!
每个拦截器都会被调用,一些重复功能,由拦截器去实现的!
!
3.1.配置struts.xmlDTD提示
struts.xml引入DTD约束(限制如何配置这个文件)
⏹如果电脑可以联网,自动从网上下载DTD,缓存提供提示
⏹如果电脑没有联网,在本地配置DTD文件位置,提供本地提示
struts-2.3.15.3\src\core\src\main\resources
文件struts.xml关闭重新打开有自动提示标签!
4.struts2常用配置
配置文件源码分析流程
4.1.框架配置文件
配置文件加载顺序
通过源码跟踪执行主要的配置文件哪些?
init容器启动的时候加载配置文件!
跟踪
dispatcher.init();
配置文件的加载顺序!
核心defalust.properties[1]struts-default.xmlstruts-plugins.xmlstruts.xml[2]struts.properies[3](修改框架默认配置信息)
⏹Struts2常量配置文件
⏹default.properties(框架执行加载配置信息)struts-corejar包org.apache.struts2包下
⏹
项目默认配置信息!
⏹Struts2框架内置核心配置文件struts-corejar包struts-default.xml拦截器结果集
(Bean元素、结果集类型、拦截器…)
在struts2框架体系中,package实现一些配置复用,编写子包继承struts-default
⏹Struts2框架插件配置文件位于每个插件包根目录struts-plugin.xml
扩展一些插件配置
用户自定义配置因为开发中往往需要更改框架默认配置信息参数
⏹在用户项目src目录struts.xml,推荐使用!
进行用户开发相关配置
⏹用户也可以添加properties修改框架默认加载信息!
⏹在用户项目src目录struts.properties,文件名不能修改!
⏹用户自己常量配置文件default.properties不推荐!
⏹在web.xml配置struts2常量(更不推荐)
规则:
后加载配置文件,配置内容,可以覆盖之前加载配置内容!
开发人员主要采用struts.xml或者struts.properties
struts.properties(只能配置常量)
struts.xml修改struts.xml添加标签<
constantname="
"
value="
>
<
/constant>
测试通过struts.xml或者自定义struts.properties修改框架加载的默认配置信息!
修改访问路径扩展名struts.action.extension=action,,改成自己的扩展名
4.2.详细分析Action相关映射配置
Struts2提供前端控制器,采用请求分发思想,将不同url请求,分配给不同Action进行处理,
需要在struts.xml配置请求路径和Action映射关系!
struts2package作用
Package可以用来管理Action,实现包内配置复用(通过包继承实现)
struts-default.xml定义一个package
包内定义大量结果集类型和拦截器
用户开发package通常继承struts-default包
name属性:
包名称,在struts容器具有唯一性(在开发中可以用模块名称作为包名)
namespace属性:
名称空间区分重复性
举例:
如果两个包存在同名Action,需要名称空间区分action访问路径
访问上面Action应用名称空间
http:
//localhost/struts2_day01/demo2/hello.action
4.3.struts2常量配置
在struts2六种配置文件中,都可以配置struts2常量,后加载配置文件常量可以对先加载配置文件进行覆盖!
常用常量分析
1、struts.i18n.encoding=UTF-8
相当于request.setCharacterEncoding(“utf-8”);
解决post请求乱码问题
Struts2开发时,无需关注post乱码问题
2、struts.action.extension=action,,
Action请求映射路径默认扩展名
//localhost:
8080/struts2_day1/hello也可以访问HelloAction
如果请求路径必须以.action结尾
3、struts.configuration.xml.reload=true
修改struts.xml配置后,无需重启服务器
当设置devMode=true激活xml自动重新加载
4、struts.ui.theme=xhtml
设置页面标签显示样式//struts-tag标签库
5、struts.objectFactory=struts
负责创建Action对象类
6、struts.enable.DynamicMethodInvocation=true//默认是false
访问Action支持动态方法调用访问action组件可以采用动态调用的方式进行.
配置文件分离,在大型项目中,因为如果使用一个配置文件,需要配置很多Action,不方便维护,struts.xml提供<
include>
标签,将配置分离出去
5.访问Action
5.1.Action三种书写格式
第一种写法,编写自定义Action类,实现Action接口
Action接口提供execute处理业务逻辑方法
实现Action接口!
struts.xml配置
访问:
Actionhttp:
//localhost/struts2_day01/helloAction
第二种写法:
编写自定义Action继承ActionSupport类(间接实现Action接口)
ActionSupport类的特点:
源码:
添加了更多的接口实现
ActionSupport提供更多功能(数据校验、国际化…)
编码:
struts.xml配置注册!
访问actionhttp:
//localhost/struts2_day01/helloAction2
第三种写法:
POJO写法domain--->
充当Action
struts.xml配置
POJO(PlainOldJavaObject)简单的Java对象,实际就是普通JavaBeans
小结:
5.2.关于Action的业务方法说明
1:
访问指定业务方法<
action标签添加method="
对应Action中指定方法名称"
配置struts.xml
//localhost/struts2_day01/loginAction
通过设置method属性,执行Action不同业务方法
设置method属性,指定调用Action组件的对应方法
启示:
可以在一个Action中编写多个业务方法,在访问时,通过method区别
5.2.1.使用通配符简化路径和Action业务方法映射配置
案例引入:
员工管理完成crud操作!
按照规则完成资源路径编写
编写员工管理业务方法Action
配置struts.xml配置通配符的写法!
注意:
*和{1}表示的意思!
案例2:
演示多颗星的业务引入商品管理user.jsp页面添加
添加商品管理ActionProductAction同包下
配置struts.xml完成对多个业务的操作员工管理和商品管理公用同一个struts.xml配置!
多颗星的表示意思和占位符{1}{2}
{1}对应name中第一个*匹配的内容
小节:
Action业务方法的访问:
明确访问指定的业务方法!
method属性固定
<
actionname="
registerAction"
class="
cn.itcast.struts2.login.UserAction"
method="
register"
/action>
2:
当一个action多个业务方法为了简化struts.xml配置引入通配符概念
方法{1}name属性值="
*"
*_Action"
cn.itcast.struts2.product.ProductAction"
{1}"
3:
业务模块较多也可以引入2颗星的编码
*-*第一颗星方法名称第二颗星一般访问的Action名称
*_*"
cn.itcast.struts2.login.{2}"
5.2.2.动态方法调用
动态方法调用,效果类似通配符玩法,无需配置method属性
举例:
在新版本struts2中动态方法调用,默认是关闭的
演示动态方法调用:
编写:
book.jsp
注意请求资源地址的路径写法:
!
编写BookAction
配置struts.xml完成配置
最后开启动态方法调用配置查看默认的default.properties
默认是关闭的在自己的strut.xml开启
测试完成!
5.3.Action访问Servlet相关API
5.3.1.Action与ServletAPI解耦合方式调用
ServletAPIdoGet(HttpServletRequest,HttpServletReponse)
---Servlet依赖request和response(代码中直接依赖----耦合)
Struts2设计思想与ServletAPI解耦合,编写Action中不再直接依赖Servlet任何API
Struts2提供ActionContext类(Action上下文)
上下文:
与容器相关,获取容器相关对象、信息----工具类
提供大量间接操作ServletAPI(request、response、session、application)方法
5.3.2.Action直接操作ServletAPI
方式一:
接口注入ServletAPI
通过接口注入获取request等对象!
方式二:
通过ServletActionContext类---直接获取ServletAPI
获取表单请求参数信息:
页面请求:
\3:
action获取表单数据
小结servletapi
action获取:
requestsessionresponseparamters等等对象
ActionContext.getSession()getParameters()
ServletActionContextrequestresponsepageContext.....
Struts2推荐优先ActionContext(解耦合方式)
6.result结果集类型的使用
视图:
决定结果页面跳转:
视图:
字符串查看Action接口源码
常量信息:
Action接SUCCESS成功视图
⏹NONE没有结果视图,用户自己生成响应数据
⏹ERROR错误视图
⏹INPUT输入视图(数据输入非法,要求用户重新输入)
⏹LOGIN登陆视图(如果用户未登陆,使用登陆视图)
⏹案例一动态方法调用演示结果集视图的跳转
案例二通配符:
改写customer.jsp页面
编写CustomerAction结果集字符串和方法名称同名
struts.xml配置多元化!
注意:
*的值等于={1}值!
⏹局部结果集:
action>
标签内部配置<
result>
元素,只对当前Action有效
⏹全局结果集:
对package内所有Action生效,使用<
global-results>
配置
配置<
元素时,name是逻辑视图名称,type是结果集类型
默认type:
dispatcher(请求转发)
其它结果集类型struts-default.xml中
⏹请求转发结果集dispatcher(默认值)同一次请求,采用request传递数据
dispatcher转发Action--->
jsp转发跳转携带数据要求数据转发目的地jsp
⏹重定向到某个jsp页面,type设置redirect
在登陆之后,重定向到主页面,发起一次新的请求,不能通过request传递参数
redirect重定向请求目的地:
jsp/actionrequest不能转发携带数据
⏹使用redirectAction重定向到一个action
共同特点:
不能携带数据
目的地:
只能是:
action不可以跳转到jsp页面
⏹chain完成数据由一个action转发到Action可以在action和action之间携带数据!
注意点:
不可以目的组件是jsp目的地是action
配置<
标签/不需要
struts.xml配置
知识点:
1、什么是框架?
为什么使用框架?
框架是一个已经完成的通用性代码封装.可以看做软件的半成品简化代码开发
2、三层结构?
web(struts2是一个web层的框架)servicedao
3、struts2是一个表现层框架,和struts1、webwork关系?
struts2是有struts1+webwork框架衍生而产生的
4、开发struts2应用,需要导入哪些jar包
13个基本jar可以在核心zip包中apps目录下blank.war解压而来
5、如何配置struts.xml配置文件提示
联网或者配置本机的xmlcatalog
6、struts2代码运行流程
客户端的请求由前端控制器经过处理然后分发请求到目标Action组件处理相关业务
7、struts2有哪些配置文件,加载顺序struts-default.propertiesstruts-default.xml
8、Action相关配置,访问Action路径(namespace+actionName)
9、如何修改默认配置文件加载的参数信息?
struts.xml添加标签<
10、常用常量配置devMode、Action扩展名配置、动态方法调用开启
11、Action三种书写方式常用:
xxxextendsActionSuppot
12、Action的方法调用(method属性使用,通配符使用,动态方法调用)
13、Action方法如何使用ServletAPI(间接和直接)
14、结果集类型(掌握:
dispatcher、redirect、redirectActionchain)
作业练习:
struts2+DbUtils框架登陆功能
用户名密码错误,重新登陆---INPUT
用户名密码正确,重定向主页---SUCCESS
获取表单的请求参数:
ServletActionContext-->
request
ServletActionContext.getRequest().getParameter(name)