一、 框架概述
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、 常量配置

SSH-Struts第三弹:传智播客视频教程第一天上午的笔记的更多相关文章

  1. JSP+SSH+Mysql+C3P0实现的传智播客网上商城

    项目简介 项目来源于:https://gitee.com/2121/shop 本系统是传智播客授课时的开发案例,基于JSP+SSH+Mysql的简单网上商城.在当代开发中,SSH的使用已经逐渐被SSM ...

  2. 传智播客c/c++公开课学习笔记--邮箱账户的破解与邮箱安全防控

    一.SMTP协议 SMTP(SimpleMail Transfer Protocol)即简单邮件传输协议. SMTP协议属于TCP/IP协议簇,通过SMTP协议所指定的server,就能够把E-mai ...

  3. 揭秘上海传智播客平均工资超过7k 其中一位知情人士

    大学毕业生人数破700万大关.如何破解"毕业即失业"中国式的大学困境? 2014年全国高校毕业生总数将达到727万人,比被称为"史上最难就业年"的2013年再添 ...

  4. 【传智播客】Libevent学习笔记(三):事件循环

    目录 00. 目录 01. event_base_loop函数 02. event_base_dispatch函数 03. event_base_loopexit函数 04. event_base_l ...

  5. 传智播客DotNet面试题

    技术类面试.笔试题汇总(整理者:杨中科,部分内容从互联网中整理而来) 注:标明*的问题属于选择性掌握的内容,能掌握更好,没掌握也没关系. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化 ...

  6. [转载]传智播客_SQL入门

    原文地址:传智播客_SQL入门作者:happylonger SQL * 数据定义语言 DDL * 数据操作语言 DML * 查询和更新指令构成了 SQL 的 DML 部分:  * SELECT - 从 ...

  7. 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)

    卷 backup 的文件夹 PATH 列表卷序列号为 00000025 D4A8:14B0J:.│  1.txt│  c语言经典案例效果图示.doc│  ├─1传智播客_尹成_C语言从菜鸟到高手_第一 ...

  8. 传智播客C语言视频第一季(有效下载期为10.1-10.7,10.8关闭)

     J:\传智播客_尹成_C语言从菜鸟到高手├─传智播客_尹成_C语言从菜鸟到高手_第一章C语言概述A│      第一讲1.1C语言第一阶段.mp4│      第二讲1.2c语言入门教程.mp4 ...

  9. 传智播客课程——Lucene搜索引擎

    Lucene不是一个现成的程序,类似文件搜索程序或web网络爬行器或是一个网站的搜索引擎.Lucene是一个软件库,一个开发工具包,而不是一个具有完整特征的搜索应用程序.它本身只关注文本的索引和搜索. ...

随机推荐

  1. SSL/TLS协议工作流程

    我看了CloudFlare的说明(这里和这里),突然意识到这是绝好的例子,可以用来说明SSL/TLS协议的运行机制.它配有插图,很容易看懂. 下面,我就用这些图片作为例子,配合我半年前写的<SS ...

  2. CookContainer 序列化保存

    using System;using System.Collections;using System.Globalization;using System.IO;using System.Net;us ...

  3. Win7 配置Apache+PHP+Mysql环境

    第一.安装并配置APACHE(安装到D:\phpapache\Apache2.2) 1.安装时默认安装,Network Domain, Server Name 我填写我的计算机名,Administra ...

  4. 数据库SQL语句学习--view

    1.新建一个view create view view_name as select * from table_name where... 2.删除一个view drop view view_name ...

  5. oracle表字段为汉字,依据拼音排序

    在order by后面使用NLSSORT函数转化汉字列,如下 select * from student order by NLSSORT(name,'NLS_SORT=SCHINESE_PINYIN ...

  6. JavaScript排序算法——快速排序

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Linux学习笔记(二)2015.4.14

    笔记2.1 Q:登陆命令  A:刚开始登陆的是安装Linux时设置的普通用户,如lin,输入su - root后,成为root用户 笔记2.2 Q:切换控制台  A:ctrl+alt+F1-F7可以切 ...

  8. Pixel & EM

    http://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html http://www.thomasphinney.com/2011/03/poi ...

  9. ecshop登录

    邮箱登录 a.找到function login(){} ,增加一个邮箱判断is_mail()  , b.如果通过,增读取出username , c.再通过默认的login功能 1.需要修改文件incl ...

  10. VisualStudio基本使用(1)-显示行号

    "工具"-"选项"-"文本编辑器"-"C/C++"-"常规",勾选"行号"复选框 ...