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

2020-09-08 11:28:07 浏览数 (1)

1.Struts2框架的学习路线

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

l 第二天:Struts2的数据的封装、结果页面配置

l 第三天:Struts2的值栈和OGNL表达式

l 第四天: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的体系结构差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。Apache Struts 2 是一种流行的 Java模型 - 视图 - 控制器(MVC)框架,成功地结合了 WebWork和Struts1.x 两种 web 框架。

l Struts2是一个基于MVC设计模式的WEB层框架

n Struts2的内核相对于Struts1来讲已经发生巨大变化。

2.2常见的web层框架

l Struts2

l Struts1

l Webwork

l SpringMVC

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

3.Struts2的入门

3.1下载Struts2的开发环境

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

3.2解压Struts2开发包

l apps :Struts2提供的应用,war文件:web项目打成war包。直接放入到tomcat可以允许。

l docs :Struts2的开发文档和API

l lib :Strtus2框架的开发的jar包

l src :Struts2的源码

3.3创建web项目,引入jar包

l 引入jar包

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

3.4创建一个JSP页面

代码语言:javascript复制
<body>
 <h1>Struts2入门</h1>
 <h3><a href="${pageContext.request.contextPath}/hello.action">Struts2入门</a></h3>
 </body>

3.5编写Action的类

代码语言:javascript复制
/**  
* @Title: HelloAction.java
* @Package top.yangxianyang.demo1
* @Description: TODO(测试Strurs2)
* @author A18ccmsA18ccms_gmail_com  
* @date 2018-11-24 下午2:54:02
* @version V1.0  
*/
packagetop.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进行配置

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

代码语言:javascript复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
 "-//ApacheSoftware 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中配置)

代码语言:javascript复制
<!-- 配置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中的方法的返回值

代码语言:javascript复制
/**
      * 提供一个方法:
      *  * 方法签名固定的
      *  共有的 返回值是String类型 方法名execute 在这个方法中不能传递参数。
      */
 public Stringexecute(){
         System.out.println("HelloAction执行了...");
 return"success";
     }

3.9改写struts.xml

代码语言:javascript复制
<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

代码语言:javascript复制
<body>
<h1>跳转成功页面!!!</h1>
</body>

4.Struts2的执行流程

4.1Struts2的执行流程

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

5.Struts2的常见配置

5.1配置XML的提示

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

5.2.1Struts2的配置文件加载顺序

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

5.2.2加载顺序

l default.properties l struts-default.xml l struts-plugin.xml l struts.xml l struts.properties l web.xml

n 注意:后配置的常量的值会覆盖先配置的常量的值。

5.3Action的配置

5.3.1package相关配置

l package标签称为包,这个包与Java中的包的概念不一致。包为了更好管理action的配置。

l package标签的属性

n name :包的名称,只要在一个项目中不重名即可。

n extends :继承哪个包,通常值为struts-default。

n namespace :名称空间,与<action>标签中的name属性共同决定访问路径。

u 名称空间有三种写法:

l 带名称的名称空间 :namespace=”/aaa”

l 根名称空间 :namespance=”/”

l 默认名称空间 :namespace=””

n abstract :抽象的,是否允许其他包继承。

5.3.2action相关配置

l action标签配置Action类。

l action标签的属性

n name :与namespace共同决定访问路径

n class :Action类的全路径

n method :执行Action中的哪个方法的方法名,默认值execute

n converter :用于设置类型转换器

5.4常量的配置

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

l struts.i18n.encoding=UTF-8 ----Struts2中所有的post请求的中文乱码不用处理。

l struts.action.extension=action,, ----Struts2请求的默认的扩展名。默认扩展名是.action或者什么都不写。

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

l 修改常量的值,可以有三个位置进行修正

n struts.xml中进行修改

代码语言:javascript复制
<!-- 常量的修改 -->
 <constant name="struts.action.extension"value="action"></constant>
n struts.properties中进行修改
struts.action.extension=action,,
n 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的配置

代码语言:javascript复制
<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的类

代码语言:javascript复制
package top.yangxianyang.demo2;
/**
 * Action的编写方式:Action类是一个POJO的类
 * @author yxy
 *
 */
publicclass ActionDemo1 {
 public Stringexecute(){
         System.out.println("ActionDemo1执行了...");
 returnnull;
     }
}

6.1.2Action类实现一个Action的接口

代码语言:javascript复制
package top.yangxianyang.demo2;
import com.opensymphony.xwork2.Action;
/**
 * Action的编写方式二:实现一个Action的接口
 * * 实现接口的这种方式:提供了五个常量(五个逻辑视图的名称)
 *       * SUCCESS :成功
 *       * ERROR       :失败
 *       * LOGIN       :登录出错页面跳转
 *       * INPUT       :表单校验的时候出错
 *       * NONE        :不跳转
 * @author yxy
 *
 */
publicclass ActionDemo2 implements Action{
 @Override
 public Stringexecute() throws Exception {
         System.out.println("ActionDemo2执行了...");
 returnNONE;
     }
}

6.1.3Action类继承ActionSupport类

代码语言:javascript复制
packagetop.yangxianyang.demo2;
import com.opensymphony.xwork2.ActionSupport;
/**
 * Action的编写方式三:Action类继承ActionSupport类
 * * 推荐使用继承ActionSupport方式
 *       * ActionSupport中提供了数据校验、国际化等一系列操作的方法。
 * @author yxy
 *
 */
publicclass ActionDemo3 extends ActionSupport{
 @Override
 public Stringexecute() throws Exception {
         System.out.println("ActionDemo3执行了...");
 returnNONE;
     }
}

6.2Action的访问

6.2.1通过method设置

代码语言:javascript复制
<!-- 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通过通配符的方式进行配置(*****)

代码语言:javascript复制
<!-- 通配符的方式 -->
 <action name="product_*"class="top.yangxianyang.demo3.ProductAction"method="{1}"></action>

6.2.3动态方法访问

代码语言:javascript复制
<!-- 动态方法访问的方式 -->
 <action name="customer"class="top.yangxianyang.demo3.CustomerAction"></action>
l 开启动态方法访问
<!-- 开启动态方法访问 -->
 <constant name="struts.enable.DynamicMethodInvocation"value="true"/>
l 编写访问路径
<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/>

源码地址:

链接: https://pan.baidu.com/s/1hyn9jUKba_Hw51a3RhLY1g提取码: wgug 复制这段内容后打开百度网盘手机App,操作更方便哦

0 人点赞