Struts2基础知识总结.docx
《Struts2基础知识总结.docx》由会员分享,可在线阅读,更多相关《Struts2基础知识总结.docx(15页珍藏版)》请在冰点文库上搜索。
Struts2基础知识总结
Day1
一、框架概述
1、三大框架:
是企业主流JavaEE开发的一套架构
Struts2+Spring+Hibernate
2、什么是框架?
为什么要学框架?
框架是实现部分功能的代码(半成品),使用框架简化企业级软件开发
学习框架,清楚的知道框架能做什么?
还有哪些工作需要自己编码实现?
3、什么是Struts2?
Struts2是一款优秀MVC框架
MVC:
是一种思想,是一种模式,将软件分为Model模型、View视图、Controller控制器
*MVC由来是web开发
JavaEE软件三层结构:
web层(表现层)、业务逻辑层、数据持久层(sun提供JavaEE开发规范)
=============JavaEE开发更强调三层结构,web层开发注重MVC
struts2就是web层开发框架,符合MVC模式
*struts1、webwork、jsf、SpringMVC都是MVC
4、Struts2和Struts1关系
没有关系,Struts2全新框架,引入WebWork很多技术和思想,Struts2保留Struts1类似开发流程
*Struts2内核webwork
Xwork提供了很多核心功能:
前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL–theObjectGraphNavigationLanguage),IoC(InversionofControl反转控制)容器等
二、struts2快速入门
1、下载开发包
最新版本2.3.14.2
课程以struts22.3.7讲解
2、目录结构
apps:
struts2官方demo
docs:
文档
lib:
jar包
src:
源码
3、导入jar包到开发工程
只需要导入apps/struts2-blank.war中所有jar包----11个jar包
4、编写页面
hello.jsp请求页面
访问struts2入门
success.jsp结果页面
5、在web.xml配置struts2前端控制器(Filter)
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
6、执行struts2过滤器后,读取struts2配置文件,将请求分发
在src下创建struts.xml
--访问struts2入门-->
--将请求分发给一个Action-->
--action的name就是hello.action去掉扩展名-->
7、执行目标Action中execute方法
8、在Action的execute方法中返回字符串,在struts.xml中配置字符串与页面对应关系
/demo1/success.jsp完成结果页面跳转
======================================================================
三、struts2运行流程分析
1、运行流程
请求----StrutsPrepareAndExecuteFilter核心控制器(预处理执行过滤)-----Interceptors拦截器(实现代码功能)-----Action的execute---结果页面Result
*拦截器在struts-default.xml定义
*执行拦截器是defaultStack中引用拦截器
----通过源代码级别断点调试,证明拦截器是执行
2、配置struts.xml提示问题
如果安装Aptana编辑器,请不要用Aptana自带xml编辑器编写struts2配置文件
struts.xml提示来自于DTD约束,
DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.3//EN"
"http:
//struts.apache.org/dtds/struts-2.3.dtd">
如果可以上网,自动缓存dtd,提供提示功能
如果不能上网,也可以配置本地DTD提示
***导入DTD时,应该和配置DTD版本一致
3、关联struts2源码
关联zip包
4、ConfigBrower插件使用
提供在浏览器中查看struts2配置加载情况
将解压struts2/lib/struts2-config-browser-plugin-2.3.7.jar复制WEB-INF/lib下
访问http:
//localhost:
8080/struts2_day1/config-browser/index.action查看struts2配置加载情况
四、struts2常见配置
学习路径
1)、struts.xml常量配置(配置文件顺序)、Action访问(ServletAPI)、结果集(使用Struts2编写简单案例)
2)、请求数据
3)、响应页面生成
1、struts2配置文件的加载顺序
struts2配置文件由核心控制器加载StrutsPrepareAndExecuteFilter(预处理,执行过滤)
init_DefaultProperties();//[1]----------org/apache/struts2/default.properties
init_TraditionalXmlConfigurations();//[2]---struts-default.xml,struts-plugin.xml,struts.xml
init_LegacyStrutsProperties();//[3]---自定义struts.properties
init_CustomConfigurationProviders();//[5]-----自定义配置提供
init_FilterInitParameters();//[6]-----web.xml
init_AliasStandardObjects();//[7]----Bean加载
结论:
default.properties该文件保存在struts2-core-2.3.7.jar中org.apache.struts2包里面(常量的默认值)
struts-default.xml该文件保存在struts2-core-2.3.7.jar(Bean、拦截器、结果类型)
struts-plugin(插件).xml该文件保存在struts-Xxx-2.3.7.jar(在插件包中存在,配置插件信息)
struts.xml该文件是web应用默认的struts配置文件(实际开发中,通常写struts.xml)***
struts.properties该文件是Struts的默认配置文件(配置常量)
web.xml该文件是Web应用的配置文件(配置常量)
*后加载文件中struts2常量会覆盖之前加载文件常量内容
2、struts.xml完成Action相关配置
1)必须要为元素配置元素(struts2围绕package进行Action的相关配置)
配置package三个常用属性
name包名称,在struts2的配置文件文件中包名不能重复,name并不是真正包名,只是为了管理Action
namespace和的name属性,决定Action的访问路径(以/开始)
extends继承哪个包,通常开发中继承struts-default包(struts-default包在struts-default.xml定义)
*继承struts-default包后,可以使用包中定义拦截器和结果类型
2)Action的通过元素配置
的name和的namespace属性共同决定Action的访问路径!
!
!
!
!
!
!
!
例如:
访问路径/user/hello.action
3)元素配置默认值
的namespace默认值/
的class默认值ActionSupport类
的name默认值success
3、默认Action和Action的默认处理类
1)默认Action,解决客户端访问Action不存在的问题,客户端访问Action,Action找不到,默认Action就会执行
2)默认处理类,客户端访问Action,已经找到匹配元素,但是元素没有class属性,执行默认处理类
*在struts-default.xml配置默认处理类ActionSupport
4、struts2常量配置(键值对properties)
1)struts2默认常量在default.properties中配置
2)开发者自定义常量
struts.xml(要求)
格式:
struts.properties(要求)
格式:
struts.devMode=true
web.xml
格式:
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts.devMode
true
3)常用常量
-----相当于request.setCharacterEncoding("UTF-8");解决post请求乱码
---访问struts2框架Action访问路径扩展名(要求)
*struts.action.extension=action,,默认以.action结尾扩展名和不写扩展名都会分发给Action
false不缓存,true浏览器会缓存静态内容,产品环境设置true、开发环境设置false
提供详细报错页面,修改struts.xml后不需要重启服务器(要求)
5、struts2配置文件分离
通过将struts2配置文件拆分
上午小结:
1、struts2快速环境搭建(入门案例)
2、理解struts2运行流程图
3、配置文件加载顺序
4、Action配置(Action的访问路径=包名称空间+Action的Name组成)
5、常量配置
5、Action的访问
HTTP请求提交Struts2StrutsPrepareAndExecuteFilter核心控制器------请求分发给不同Action
1、让请求能够访问Action-----Action书写方式三种
第一种Action可以是POJO((PlainOldJavaObjects)简单的Java对象)----不需要继承任何父类,实现任何接口
*struts2框架读取struts.xml获得完整Action类名
*obj=Class.forName("完整类名").newInstance();
*Methodm=Class.forName("完整类名").getMethod("execute");m.invoke(obj);通过反射执行execute方法
第二种编写Action实现Action接口
Action接口中,定义默认五种逻辑视图名称
publicstaticfinalStringSUCCESS="success";//数据处理成功(成功页面)
publicstaticfinalStringNONE="none";//页面不跳转returnnull;效果一样
publicstaticfinalStringERROR="error";//数据处理发送错误(错误页面)
publicstaticfinalStringINPUT="input";//用户输入数据有误,通常用于表单数据校验(输入页面)
publicstaticfinalStringLOGIN="login";//主要权限认证(登陆页面)
*五种逻辑视图,解决Action处理数据后,跳转页面
第三种编写Action继承ActionSupport(推荐)
在Action中使用表单校验、错误信息设置、读取国际化信息三个功能
2、Action中方法调用
1)在配置元素时,没有指定method属性,默认执行Action类中execute方法
2)在元素内部添加method属性,指定执行Action中哪个方法
执行RegistAction的regist方法
*将多个请求业务方法写入到一个Action类中
3)使用通配符*,简化struts.xml配置
添加客户
删除客户
struts.xml
---{1}就是第一个*匹配内容
3、动态方法调用(零配置路线)
访问Action中指定方法,不进行配置
1)在工程中使用动态方法调用,必须保证struts.enable.DynamicMethodInvocation=true常量值为true
2)在action的访问路径中使用"!
方法名"
页面
add.action">添加商品
配置
执行ProductAction中的add方法
六、在Action中使用ServletAPI
1、在Action中解耦合方式间接访问ServletAPI---------使用ActionContext对象
在struts2中ActionAPI已经与ServletAPI解耦合(没有依赖关系)
*ServletAPI常见操作:
表单提交请求参数获取,向request、session、application三个范围存取数据
actionContext=ActionContext.getContext();
1)actionContext.getParameters();获得所有请求参数Map集合
2)actionContext.put("company","传智播客");/actionContext.get("company")对request范围存取数据
3)actionContext.getSession();获得session数据Map,对Session范围存取数据
4)actionContext.getApplication();获得ServletContext数据Map,对应用访问存取数据
2、使用接口注入的方式,操作ServletAPI(耦合)
ServletContextAware:
注入ServletContext对象
ServletRequestAware:
注入request对象
ServletResponseAware:
注入response对象
*程序要使用哪个Servlet的对象,实现对应接口
3、在Action中直接通过ServletActionContext获得ServletAPI
ServletActionContext.getRequest():
获得request对象(session)
ServletActionContext.getResponse():
获得response对象
ServletActionContext.getServletContext():
获得ServletContext对象
*静态方法没有线程问题,ThreadLocal
=================================================================================================================================================
七、基于注解的struts2开发
1、约定struts2提供默认规则,实现零配置
1)导入jar包11个jar+struts2-convention-plugin-2.3.7.jar
2)在web.xml配置前端控制器
3)编写页面
4)插件中plugin配置文件
编写Action类,必须位于action,actions,struts,struts2四个包中
以Action结尾
****结果result页面存放位置
Action被扫描后,如何确定Action的访问路径的?
cn.itcast.struts2.HelloAction(HelloAction位于直接位于四个扫描包下,namespace是/,A