1、 下载开发包 

课程 以 struts2 3.15.1 讲解 

 

2、 目录结构 

apps : struts2官方demo  

docs :  文档

lib : jar

src : 源码 

 

3、 导入jar包到开发工程 

只需要导入 apps/struts2-blank.war 中所有jar包  ---- 13 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.wsjy.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 execuute --- 结果页面 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)、 响应页面生成

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 常量会覆盖之前加载文件 常量内容

Struts2Action配置

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包后,可以使用 包中定义拦截器和结果类型 

 2Action的通过<action>元素配置 

<action name="hello" class="cn.wsjy.struts2.demo1.HelloAction">

<action>name 和 <package>namespace属性 共同决定 Action的访问路径 !!!!!!!!

 

例如 :

 <package name="default" namespace="/user" extends="struts-default">

   <action name="hello" class="cn.wsjy.struts2.demo1.HelloAction">

 访问路径 /user/hello.action

 3) <action> 元素配置默认值 

    <package> namespace 默认值 “” 

<action> class 默认值 ActionSupport 类 

<result> 的 name 默认值 success

 

默认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

Struts2的常量配置

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后不需要重启服务器 (要求)

struts2 配置文件分离

通过 <include file="struts-part1.xml"/> struts2 配置文件 拆分

posted on 2017-02-21 16:37  马珂  阅读(228)  评论(0编辑  收藏  举报