目录

 

1.Struts2框架的学习路线

2.Struts2的概述

2.1什么是Struts2

2.2常见的web层框架

2.3Web层框架基于前端控制器模型设计

3.Struts2的入门

3.1下载Struts2的开发环境

3.2解压Struts2开发包

3.3创建web项目,引入jar包

3.4创建一个JSP页面

3.5编写Action的类

3.6对Action进行配置

3.7配置前端控制器(核心过滤器web.xml中配置)

3.8改写Action中的方法的返回值

3.9改写struts.xml

3.10编写success.jsp

4.Struts2的执行流程

4.1Struts2的执行流程

5.Struts2的常见配置

5.1配置XML的提示

5.2Struts2的配置文件的加载顺序(了解)

5.2.1Struts2的配置文件加载顺序

5.2.2加载顺序

5.3Action的配置

5.3.1package相关配置

5.3.2action相关配置

5.4常量的配置

5.5分模块开发的配置

6.Action的访问

6.1Action的写法

6.1.1Action类是POJO的类

6.1.2Action类实现一个Action的接口

6.1.3Action类继承ActionSupport类

6.2Action的访问

6.2.1通过method设置

6.2.2通过通配符的方式进行配置(*****)

6.2.3动态方法访问


 

 

 

1.Struts2框架的学习路线
  1. 第一天:Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写
  2. 第二天:Struts2的数据的封装、结果页面配置
  3. 第三天:Struts2的值栈和OGNL表达式
  4. 第四天:Struts2的标签库

 

 

2.Struts2的概述

2.1什么是Struts2

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。Apache Struts 2 是一种流行的 Java模型 - 视图 - 控制器(MVC)框架,成功地结合了 WebWork和Struts1.x 两种 web 框架。

 

  1. Struts2是一个基于MVC设计模式的WEB层框架
    1. Struts2的内核相对于Struts1来讲已经发生巨大变化。

2.2常见的web层框架

  1. Struts2
  2. Struts1
  3. Webwork
  4. SpringMVC

2.3Web层框架基于前端控制器模型设计

Struts2第一天:Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写_Struts2

 

3.Struts2的入门

3.1下载Struts2的开发环境

下载地址:http://struts.apache.org/

3.2解压Struts2开发包

Struts2第一天:Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写_Java框架_02

  1. apps           :Struts2提供的应用,war文件:web项目打成war包。直接放入到tomcat可以允许。
  2. docs           :Struts2的开发文档和API
  3. lib                :Strtus2框架的开发的jar包
  4. src              :Struts2的源码

3.3创建web项目,引入jar包

  1. 引入jar包
    1. struts-blank项目lib文件夹下找jar包(struts-blank放到Tomcatwebapps解压)

 

Struts2第一天:Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写_JavaEE_03

 

3.4创建一个JSP页面

<body>

    <h1>Struts2入门</h1>

    <h3><a href="${pageContext.request.contextPath}/hello.action">Struts2入门</a></h3>

  </body>

 

3.5编写Action的类

/** 



* @Title: HelloAction.java



* @Package top.yangxianyang.demo1



* @Description: TODO(测试Strurs2)



* @author A18ccms A18ccms_gmail_com 



* @date 2018-11-24 下午2:54:02



* @version V1.0 



*/

package top.yangxianyang.demo1;



/**  

 *   

 * 项目名称:Struts2day01  

 * 类名称:HelloAction  

 * 类描述:测试Strurs2  

 * 创建人:yangyangyang  

 * 创建时间:2018-11-24 下午2:54:02  

 * 修改人:yangyangyang  

 * 修改时间:2018-11-24 下午2:54:02  

 * 修改备注:  

 * @version   

 *   

 */

public class HelloAction {

     /**

      * 提供一个方法:

      *  * 方法签名固定的

      *  共有的 返回值是String类型 方法名execute 在这个方法中不能传递参数。

      */

     public String execute(){

         System.out.println("HelloAction执行了...");

         return null;

     }

}

3.6对Action进行配置

  1. 在src下创建(提供)名称叫做struts.xml的配置文件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

     "http://struts.apache.org/dtds/struts-2.3.dtd">



<struts>

   <!-- Struts2为了管理Action的配置,通过包进行管理 -->

   <!-- 配置Struts2的包 -->

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

          <!--  配置Action -->

          <action name="hello" class="top.yangxianyang.demo1.HelloAction">

         

          </action>

    </package>



   

</struts>

3.7配置前端控制器(核心过滤器web.xml中配置)

 

<!-- 配置Struts2的核心过滤器 -->

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

3.8改写Action中的方法的返回值


 

/**

      * 提供一个方法:

      *  * 方法签名固定的

      *  共有的 返回值是String类型 方法名execute 在这个方法中不能传递参数。

      */

     public String execute(){

         System.out.println("HelloAction执行了...");

         return "success";

     }

3.9改写struts.xml

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

          <!--  配置Action -->

          <action name="hello" class="top.yangxianyang.demo1.HelloAction">

                   <!-- 配置页面的跳转 -->

                   <result name="success">/demo1/success.jsp</result>

          </action>

    </package>

 

3.10编写success.jsp

 

<body>

<h1>跳转成功页面!!!</h1>

</body>

 

4.Struts2的执行流程

4.1Struts2的执行流程

Struts2第一天:Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写_xml_04

当用户访问某一个Action的时候,先经过核心过滤器,在核心过滤器中执行一组拦截器(这组拦截器实现部分功能),执行目标Action,根据Action的返回值,进行页面跳转。

 

5.Struts2的常见配置

5.1配置XML的提示

Struts2第一天:Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写_JavaEE_05

5.2Struts2的配置文件的加载顺序(了解)

5.2.1Struts2的配置文件加载顺序

Struts2第一天:Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写_xml_06

  1. init_DefaultProperties()                               ----加载default.properties
  2. init_TraditionalXmlConfigurations();         ----加载struts-default.xml、struts-plugin.xml、struts.xml
  3. init_LegacyStrutsProperties();                    ----加载struts.properties
  4. init_CustomConfigurationProviders();  ----加载配置提供类
  5. init_FilterInitParameters() ; // [6]              ----加载web.xml中过滤器初始化参数
  6. init_AliasStandardObjects() ; // [7]            ----加载Bean对象

5.2.2加载顺序

  1. default.properties
  2. struts-default.xml
  3. struts-plugin.xml
  4. struts.xml
  5. struts.properties
  6. web.xml
    1. 注意:后配置的常量的值会覆盖先配置的常量的值。

5.3Action的配置

5.3.1package相关配置

  1. package标签称为包,这个包与Java中的包的概念不一致。包为了更好管理action的配置。
  2. package标签的属性
    1. name                 :包的名称,只要在一个项目中不重名即可。
    2. extends             :继承哪个包,通常值为struts-default。
    3. namespace      :名称空间,与<action>标签中的name属性共同决定访问路径。
      1. 名称空间有三种写法:
        1. 带名称的名称空间                   :namespace=”/aaa”
        2. 根名称空间                       :namespance=”/”
        3. 默认名称空间                            :namespace=””
    4. abstract            :抽象的,是否允许其他包继承。

5.3.2action相关配置

  1. action标签配置Action类。
  2. action标签的属性
    1. name                 :与namespace共同决定访问路径
    2. class                            :Action类的全路径
    3. method             :执行Action中的哪个方法的方法名,默认值execute
    4. converter                   :用于设置类型转换器

5.4常量的配置

在Struts2的框架中,提供了非常多的常量:(在default.properties

  1. struts.i18n.encoding=UTF-8                        ----Struts2中所有的post请求的中文乱码不用处理。
  2. struts.action.extension=action,,               ----Struts2请求的默认的扩展名。默认扩展名是.action或者什么都不写。

在Struts2中修改一些常量的值:

  1. 修改常量的值,可以有三个位置进行修正
    1. struts.xml中进行修改
<!-- 常量的修改 -->

    <constant name="struts.action.extension" value="action"></constant>

    1. struts.properties中进行修改
struts.action.extension=action,,
    1. web.xml中进行修改
<!-- 配置Struts2的核心过滤器 -->

     <filter>

         <filter-name>struts2</filter-name>

         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

         <!-- 修改常量 -->

          <!-- <init-param>

              <param-name>struts.action.extension</param-name>

              <param-value>xyz</param-value>

          </init-param> -->

     </filter>

5.5分模块开发的配置

include的配置

<include file="com/itheima/struts/demo1/struts_demo1.xml"/>  

<include file="com/itheima/struts/demo2/struts_demo2.xml"/>  

<include file="com/itheima/struts/demo3/struts_demo3.xml"/>  

    

 

6.Action的访问

6.1Action的写法

6.1.1Action类是POJO的类

package top.yangxianyang.demo2;

/**

 * Action的编写方式:Action类是一个POJO的类

 * @author yxy

 *

 */

public class ActionDemo1 {



     public String execute(){

         System.out.println("ActionDemo1执行了...");

         return null;

     }

}

6.1.2Action类实现一个Action的接口

package top.yangxianyang.demo2;



import com.opensymphony.xwork2.Action;



/**

 * Action的编写方式二:实现一个Action的接口

 * * 实现接口的这种方式:提供了五个常量(五个逻辑视图的名称)

 *       * SUCCESS :成功

 *       * ERROR       :失败

 *       * LOGIN       :登录出错页面跳转

 *       * INPUT       :表单校验的时候出错

 *       * NONE        :不跳转

 * @author yxy

 *

 */

public class ActionDemo2 implements Action{



     @Override

     public String execute() throws Exception {

         System.out.println("ActionDemo2执行了...");

         return NONE;

     }



}

6.1.3Action类继承ActionSupport类

 

package top.yangxianyang.demo2;



import com.opensymphony.xwork2.ActionSupport;



/**

 * Action的编写方式三:Action类继承ActionSupport类

 * * 推荐使用继承ActionSupport方式

 *       * ActionSupport中提供了数据校验、国际化等一系列操作的方法。

 * @author yxy

 *

 */

public class ActionDemo3 extends ActionSupport{



     @Override

     public String execute() throws Exception {

         System.out.println("ActionDemo3执行了...");

         return NONE;

     }

}

6.2Action的访问

6.2.1通过method设置

<!-- Struts2为了管理Action的配置,通过包进行管理。 -->

     <!-- 配置Struts2的包 ================ -->

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

         <action name="userFind" class="top.yangxianyang.demo3.UserAction" method="find"></action>

         <action name="userUpdate" class="top.yangxianyang.demo3.UserAction" method="update"></action>

         <action name="userDelete" class="top.yangxianyang.demo3.UserAction" method="delete"></action>

         <action name="userSave" class="top.yangxianyang.demo3.UserAction" method="save"></action>

6.2.2通过通配符的方式进行配置(*****)

Struts2第一天:Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写_struts_07

<!-- 通配符的方式 -->
<action name="product_*" class="top.yangxianyang.demo3.ProductAction" method="{1}"></action>

      

6.2.3动态方法访问

<!-- 动态方法访问的方式 -->

 <action name="customer" class="top.yangxianyang.demo3.CustomerAction"></action>
  1. 开启动态方法访问
<!-- 开启动态方法访问 -->

<constant name="struts.enable.DynamicMethodInvocation" value="true"/>

 

  1. 编写访问路径
<h3>通过动态方法访问的方式</h3>

<a href="${ pageContext.request.contextPath }/customer!find.action">查询客户</a><br/>

<a href="${ pageContext.request.contextPath }/customer!update.action">修改客户</a><br/>

<a href="${ pageContext.request.contextPath }/customer!delete.action">删除客户</a><br/>

<a href="${ pageContext.request.contextPath }/customer!save.action">保存客户</a><br/>

 

源码地址:

    复制这段内容后打开百度网盘手机App,操作更方便哦

  

Struts2第一天:Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写_JavaEE_08