struts2学习笔记

更新时间:2024-06-20 18:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Struts2 框架第一天

今天重点内容: 1、 什么是Struts2框架? 框架特性分析 2、 struts2 快速入门 (分析struts2 运行原理) 3、 struts2 常用配置 4、 如何访问Struts2 Action (Servlet) 5、 Struts2 结果集使用(响应跳转/ajax) 1. Struts2 框架概述

1.1. 什么是struts2

Struts2 框架 问题: 什么是框架? 为什么要学习框架 ? 框架是一些已经写好代码, 通常和具体业务无关 (可以看成:软件的半成品) 学习框架,提高开发效率,简化开发 (应用框架, 实现代码代码开发 实现开发标准化) javaEE三层结构 在web阶段 DAO模式符合JAVAEE三层结构的 三层结构 出自 JavaEE规范 (体系结构图 )

? 表现层

? 业务层

? 持久层/集成层

Struts2 是一个表现层框架 (简化表现层代码开发 ) 分层开发:代码结构更加清晰,为了更好维护和扩展

1.2. struts2 由来

由两个框架 优点合并后发展而来 (struts1 + webwork) 历史由来: Java兴起 98年 (最早进行java开发分方向 j2se 、j2ee、 j2me ) J2EE 企业级应用软件开发 2000 年左右出现struts1 (几乎所有开发人员 都在用 ) 随着互联网的发展struts1 设计慢慢开始存有缺陷和不足 Webwork框架的出现 该框架的设计思想比struts1 先进的多 ,例如:引入 拦截器机制、 ognl 表达式语言 Apache 推出struts2 框架, 特点: 开发流程类似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) 日志: 2 jar 字符串 lang 1

asm.* 3 jar 处理字节码信息 javassist.jar 1 代理相关 freemarker 1 jar 图形模板引擎 开发strutrs2 基包导入web 工程!

1.4. struts2入门理论

JavaEE设计模式 : 前端控制器模式过滤器模式访问 如图: 前段控制器 作用: 请求分发!通过struts.xml配置给指定Action struts前端控制器:

开发中将所有的重复的代码 提前到前端控制器去完成,在Action 中只要写不重复业务处理代码 ! 编写快速入门开发流程说明

2. Struts2快速入门案例

第一步: 在myeclipse 新建web project

选择javaee版本, 课程优先5.0 ------ myeclipse2014 servlet 版本2.5 采用 JDK6 编译器

第二步: 导入struts2 开发jar包

apps/struts2_blank.war/WEB-INF/lib/ 13个jar包

asm-* 字节码操作类库 (.class文件) commons-fileupload 文件上传 依赖 commons-io commons-lang3 对字符串、数据操作公共方法 commons-logging Java通用日志接口 , 依赖日志实现 log4j freemarker 模板引擎 (struts2标签库,依赖freemarker ) javassist 生成代理 ognl 表达式语言 (比EL强大很多倍) struts2-core 核心jar包 xwork-core struts2和webwork依赖命令模式框架 2: 配置web.xml

3:配置struts.xml 推荐 找到2.3.15.jar --> apps 目录:struts-blank自带struts.xml 文件导入!

编写程序

编写HelloAction (类似之前写的Servlet )

5 struts.xml 注册action 和 请求资源虚拟路径 映射!

访问 该action http://localhost/strut2_day01/hellAction

结果!!

运行流程分析图解:

3. 分析struts2运行原理

Struts2 核心控制器 StrutsPrepareAndExecuteFilter (准备 和 执行 ) -------- 前端控制器模式 查看系统执行默认一组拦截器 打开文档: struts2核心jar 内 struts-default.xml

系统执行 前端控制器 根据struts-default.xml 配置文件 配置默认 拦截器栈

执行一组拦截器 然后再执行目标Action -->execute 方法!

请求---执行一堆拦截器组件(业务功能)---- 具体Action Struts2 可以复用代码功能, 基于 Interceptor 实现的 问题: 执行了哪些拦截器 ?

小结原理:

1: 通过web.xml 配置前端控制器

2: 前端控制器执行一组拦截器 通过struts.xml 访问 具体action 执行业务方法 3: action execute 方法返回字符串 结果页面跳转! 拦截器组件执行顺序:参考 struts-core.jar 提供 struts-default.xml 配置文件

默认情况下, 访问每个Action ,defaultStack 都会执行 ! 每个拦截器都会被调用, 一些重复功能,由拦截器去实现的 !!!

问题: 是否是 struts2 开发 每一次请求 都会执行拦截器? 拦截器并不是每次都执行!! 看访问资源的!

1: 访问资源目标是一个Action 组件 必然会调用拦截器 然后执行action ' 2: 如果访问是jsp/html 静态资源 前端控制器不会调用默认拦截器栈的!

拦截器只针对Action 有效!

3.1. 配置struts.xml DTD提示

struts.xml 引入DTD约束 (限制如何配置这个文件 )

? 如果电脑可以联网,自动从网上下载 DTD,缓存提供提示 ? 如果电脑没有联网,在本地配置DTD文件位置,提供本地提示 struts-2.3.15.3\\src\\core\\src\\main\\resources

文件struts.xml关闭 重新打开 有自动提示标签!

4. struts2 常用配置文件

了解前端控制器在容器启动的时候 执行哪些配置文件的加载! 配置文件源码分析流程: 分析 StrutsPreparedAndExecuteFilter

先加载 *.properties 然后再加载 *.xml 配置文件

properties:

配置框架启动一些基本配置信息 : 比如: 请求虚拟路径配置 乱码配置 ..... default.properties : 框架加载的默认配置信息

其次加载 xml 文件: 三个

struts-default.xml : 核心包下

struts-plugin.xml : struts 和第三方插件整合的时候 加载插件配置文件 举例: struts-json-plugin.jar

4.2. 小节配置文件

1: default.properties : 框架加载默认配置信息 如果用户需要修改 推荐: struts.xml 引入

struts-default.xml : 定义struts2 大量结果集以及拦截器配置和工厂Bean : 使用默认拦截器 和 结果集跳转 程序员在struts.xml 使用

3: struts-plugin.xml : 整合第三方插件: 如果需要使用第三方插件: 程序员在struts.xml

4: struts.xml : 定义用户自己的配置信息:

4.3. 详细分析Action相关映射配置

Struts2 提供前端控制器,采用请求分发思想,将不同url请求,分配给不同Action进行处理, 需要在struts.xml 配置 请求路径和Action 映射关系 ! 问题: struts2 package作用 Package可以用来管理Action, 实现包内配置复用 (通过包继承实现 ) struts-default.xml 定义一个package

用户开发package 通常继承 struts-default 包

包内定义大量结果集类型和拦截器

name属性: 包名称, 在struts容器具有唯一性 (在开发中可以用模块名称作为包名) namespace 属性: 名称空间 区分重复性 举例: 如果两个包存在同名Action ,需要名称空间区分 action访问路径

访问上面Action 应用名称空间 http://localhost/struts2_day01/demo2/hello.action

4.4. struts2 常量配置

在struts2 六种配置文件中,都可以配置struts2 常量, 后加载配置文件常量 可以对先加载配置文件进行覆盖 !

常用常量分析

1、 struts.i18n.encoding=UTF-8 相当于 request.setCharacterEncoding(“utf-8”); 解决post 请求乱码问题 Struts2开发时,无需关注post 乱码问题

2、 struts.action.extension=action,, Action请求映射路径 默认扩展名

问题: http://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 提供 标签,将配置分离出去

5. 访问Action

5.1. Action 三种书写格式

第一种 写法, 编写自定义Action类, 实现Action接口 Action 接口提供 execute 处理业务逻辑方法 1: 实现Action 接口!!

struts.xml配置

访问: Action http://localhost/struts2_day01/helloAction

第二种 写法: 编写自定义Action 继承 ActionSupport 类 (间接 实现Action接口)

ActionSupport 类的特点: 源码:

添加了更多的接口实现

ActionSupport 提供更多功能 (数据校验、 国际化 … )

编码 :

struts.xml 配置 注册!

注意DTD 约束 规范 逗号表示标签书写顺序!

访问 action http://localhost/struts2_day01/helloAction2

第三种 特殊写法: POJO plain old java object写法 domain--->充当Action 场景: 请求封装对象 本身就是 javaBean User --->== Action

提供一个execute 方法

struts.xml 配置

http://localhost:8099/struts2_day01/helloUser

POJO(Plain Old Java Object)简单的Java对象,实际就是普通JavaBeans 小结:

5.2. 关于Action的业务方法说明 5.2.1. 通配符的使用

1: 访问指定业务方法

配置 struts.xml 注意 每一个method属性值匹配Action具体的方法名称

问题: 如果目标Action 方法业务过多 struts.xml 引入多个action 标签 重复性很高!

如何简化struts.xml 配置??

解决方案: 2种简化: 1: 通配符 (重点) 2: 动态方法调用(掌握)

5.2.2. 通过设置method属性,执行Action不同业务方法

设置method属性,指定调用Action 组件的对应方法

启示: 可以在一个Action中编写多个业务方法,在访问时, 通过method 区别

5.2.3. 使用通配符 简化路径和Action业务方法映射配置

案例

1: index.jsp 搭建请求访问

Action 编写

注意 : 星的和 占位符 {1} {2} struts.xml

本文来源:https://www.bwwdw.com/article/d5m3.html

Top