SSH-Struts第三弹:传智播客视频教程第一天上午的笔记
一、 框架概述
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 – the Object Graph Navigation Language),IoC(Inversion of Control反转控制)容器等
二、struts2快速入门
1、 下载开发包
最新版本 2.3.14.2
课程 以 struts2 2.3.7 讲解
2、 目录结构
apps : struts2官方demo
docs : 文档
lib : jar包
src : 源码
3、 导入jar包到开发工程
只需要导入 apps/struts2-blank.war 中所有jar包 ---- 11 个jar包
4、 编写页面
hello.jsp 请求页面
<a href="${pageContext.request.contextPath }/hello.action">访问struts2入门</a>
success.jsp 结果页面
5、在web.xml 配置struts2 前端控制器 (Filter)
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
6、执行struts2过滤器后,读取struts2配置文件,将请求分发
在src下创建struts.xml
<package name="default" namespace="/" extends="struts-default">
<!-- <a href="${pageContext.request.contextPath }/hello.action">访问struts2入门</a> -->
<!-- 将请求 分发给一个Action -->
<!-- action的name 就是hello.action 去掉扩展名 -->
<action name="hello" class="cn.itcast.struts2.demo1.HelloAction"></action>
</package>
7、执行目标Action中execute方法
8、在Action的execute方法中返回 字符串,在struts.xml中配置字符串与页面对应关系
<result name="executesuccess">/demo1/success.jsp</result> 完成结果页面跳转
===========================================================================================================================
三、struts2 运行流程分析
1、 运行流程
请求 ---- StrutsPrepareAndExecuteFilter 核心控制器(预处理 执行过滤) ----- Interceptors 拦截器(实现代码功能 ) ----- Action 的execute --- 结果页面 Result
* 拦截器 在 struts-default.xml定义
* 执行拦截器 是 defaultStack 中引用拦截器
---- 通过源代码级别断点调试,证明拦截器是执行
2、 配置struts.xml 提示问题
如果安装Aptana编辑器 ,请不要用Aptana自带xml编辑器 编写struts2配置文件
struts.xml提示来自于 DTD约束,
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
如果可以上网,自动缓存dtd,提供提示功能
如果不能上网,也可以配置本地DTD提示
*** 导入DTD时,应该和配置DTD版本一致
3、 关联struts2源码
关联 zip包
4、 Config Brower 插件使用
提供在浏览器中查看 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访问(Servlet API)、结果集 (使用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)必须要为<action>元素 配置<package>元素 (struts2 围绕package进行Action的相关配置 )
配置package 三个常用属性
<package name="default" namespace="/" extends="struts-default">
name 包名称,在struts2的配置文件文件中 包名不能重复 ,name并不是真正包名,只是为了管理Action
namespace 和 <action>的name属性,决定 Action的访问路径 (以/开始 )
extends 继承哪个包,通常开发中继承 struts-default 包 (struts-default包在 struts-default.xml定义 )
* 继承struts-default包后,可以使用 包中定义拦截器和结果类型
2)Action的通过<action>元素配置
<action name="hello" class="cn.itcast.struts2.demo1.HelloAction">
<action>的name 和 <package>的namespace属性 共同决定 Action的访问路径 !!!!!!!!
例如 :
<package name="default" namespace="/user" extends="struts-default">
<action name="hello" class="cn.itcast.struts2.demo1.HelloAction">
访问路径 /user/hello.action
3) <action> 元素配置默认值
<package> 的namespace 默认值 /
<action> 的class 默认值 ActionSupport 类
<result> 的 name 默认值 success
3、 默认Action 和 Action的默认处理类
1) 默认Action , 解决客户端访问Action不存在的问题 ,客户端访问Action, Action找不到,默认Action 就会执行
<default-action-ref name="action元素的name" />
2) 默认处理类 ,客户端访问Action,已经找到匹配<action>元素,但是<action>元素没有class属性,执行默认处理类
<default-class-ref class="完成类名" />
* 在struts-default.xml 配置默认处理类 ActionSupport
4、 struts2 常量配置 (键值对 properties)
1) struts2 默认常量 在 default.properties 中配置
2) 开发者自定义常量
struts.xml (要求)
格式 : <constant name="struts.devMode" value="true" />
struts.properties (要求)
格式 : struts.devMode = true
web.xml
格式 :
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.devMode</param-name>
<param-value>true</param-value>
</init-param>
</filter>
3) 常用常量
<constant name="struts.i18n.encoding" value="UTF-8"/> ----- 相当于request.setCharacterEncoding("UTF-8"); 解决post请求乱码
<constant name="struts.action.extension" value="action"/> --- 访问struts2框架Action访问路径 扩展名 (要求)
* struts.action.extension=action,, 默认以.action结尾扩展名 和 不写扩展名 都会分发给 Action
<constant name="struts.serve.static.browserCache" value="false"/> false不缓存,true浏览器会缓存静态内容,产品环境设置true、开发环境设置false
<constant name="struts.devMode" value="true" /> 提供详细报错页面,修改struts.xml后不需要重启服务器 (要求)
5、 struts2 配置文件分离
通过 <include file="struts-part1.xml"/> 将struts2 配置文件 拆分
上午小结 :
1、 struts2 快速环境搭建 (入门案例)
2、 理解struts2 运行流程图
3、 配置文件加载顺序
4、 Action配置 (Action的访问路径 = 包名称空间 + Action的Name 组成)
5、 常量配置
转载于:https://www.cnblogs.com/Candies/p/3627321.html
SSH-Struts第三弹:传智播客视频教程第一天上午的笔记相关推荐
- 关于传智播客视频教程的解压方法
关于传智播客视频教程的解压方法 问题: 通过传智播客的迅雷种子下载回来的文件如下图所示: 注意:(文件的后缀名都是XX.ZIP.00X)这些文件不 ...
- 传智播客 mysql视频_MySQL数据库传智播客视频教程【43集】
教程名称:MySQL数据库传智播客视频教程[43集] 教程目录:[一品资源网]传智播客PHP培训_PHP视频教程 Mysql 第01讲 介绍与安装 [一品资源网]传智播客PHP培训_PHP视频教程 M ...
- ssh中c3p0连接mysql_JSP+SSH+Mysql+C3P0实现的传智播客网上商城
项目简介 本系统是传智播客授课时的开发案例,基于JSP+SSH+Mysql的简单网上商城.在当代开发中,SSH的使用已经逐渐被SSM取代,但不代表我们不需要学习SSH,该系统简单,但功能齐全可以作为S ...
- 传智播客软件测试第一期_播客:冒险如何推动一位软件工程师的职业发展
传智播客软件测试第一期 On this week's episode of the freeCodeCamp podcast, Abbey chats with developer and weare ...
- 传智播客c/c++公开课学习笔记--Linux网络流媒体服务器的核心代码揭秘
Xinetd 从守护进程的概念可以看出,对于系统所要通过的每一种服务,都必须运行一个监听某个端口连接所发生的守护进程, 这通常意味着资源浪费. 为了解决这个问题,Linux引进了"网络守护进 ...
- 传智播客100万现金奖励优秀校友
传智播客培训出来的很多同学就业起薪达到了7k8k左右,其中不乏未毕业的大学生和年龄不满20岁的高中生,曾经有一点社会工作经历的人从传智播客一毕业就拿到9k甚至1万以上的人也不少见.传智播客的老师们遥想 ...
- 《那些对传智播客的恶意攻击》第一篇:穿越神人zuoyi3748
传智播客已经六岁了,由于我们高度重视教学质量,传智播客这六年间取得了飞速发展.由于传智播客的飞速发展使得同行业的某些教学质量差的培训机构感受到了压力,因此他们妄图通过散播恶意谣言诋毁传智播客. 六年间 ...
- 【传智播客】Libevent学习笔记(三):事件循环
目录 00. 目录 01. event_base_loop函数 02. event_base_dispatch函数 03. event_base_loopexit函数 04. event_base_l ...
- 传智播客 React 入门 三天课程
传智播客 React 入门 三天课程 第一天 理论和配置 虚拟DOM和DIFF算法 React 的核心是虚拟DOM和DIFF算法.DIFF 算法确保虚拟DOM高效运行(从上到下分别是 tree-dif ...
最新文章
- 测试人员如何赢得开发人员的尊重
- NodeList 和 HTMLCollection
- [Linux]搜索文件是否包含指定内容并返回文件名
- 分布式领域架构师要掌握的技术
- Andy's First Dictionary
- 单片机预备知识(电平、进制转换、字节、数据类型)
- HDOJ1496 Equations【Hash】
- java project整合spring和hibernate
- thinkphp引入PHPExcel类---thinkPHP类库扩展-----引入没有采用命名空间的类库
- C++ Primer Plus 读书笔记(第8、9章)
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_1_两种获取Stream流的方式...
- TableView数据源方法的执行顺序
- 踩过的坑:__file__、__package__和__name__
- python ocr识别身份证_如何使用Tesseract训练基于Python的OCR以使用不同的国家身份证?...
- Cartographer 源码解析1.1 —— 算法整体结构
- 【干货福利】67个拯救web开发者的工具、库和资源!——爱创课堂
- 【重识云原生】第六章容器6.4.2.3节——Pod使用(下)
- php网站 类设计,PHP网站开发与设计
- java本地缓存_java缓存——(五)LocalCache本地缓存分享
- windows游戏命令行
热门文章
- 张北将成规模150万台服务器的云计算产业基地
- Java数据库——CallableStatement接口
- bit,byte,汉字,KB,MB,GB,TB...
- Obj-C的hello,world 2
- 跟无闻学习GO Web 编程(四) -- bee 工具使用
- 金融科技创业公司Revolut增加对BCH和XRP支持
- 【团队】 冲刺一(4/10)
- 递归实现显示目标文件夹的所有文件和文件夹,并计算目标文件夹的大小
- Spring Boot 参考指南(使用NoSQL技术)
- CSS--使用display:inline-block;存在间隙问题解决