JAVAEE框架学习——Struts2——介绍、搭建、配置

Struts2介绍

Struts2是一种基于MVC模式的轻量级Web框架。本质上相当于一个Servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

Struts2优势

  • 自动封装参数
  • 参数校验
  • 结果的处理 转发 重定向
  • 国际化
  • 显示等待页面
  • 防止重复提交


    JAVAEE框架学习——Struts2——介绍、搭建、配置_第1张图片
    Struts2优势

WEB层框架基于的前端控制器模式

在传统的开发中,有一次请求就会对应一个Servlet。这样会导致出现很多的Servlet。而Struts2将所有请求都先经过一个前端控制器,在前端控制器中实现框架的部分功能。具体的操作交到具体的Action中。


JAVAEE框架学习——Struts2——介绍、搭建、配置_第2张图片
传统开发方式
JAVAEE框架学习——Struts2——介绍、搭建、配置_第3张图片
前端控制器模型

快速入门

下载Struts2开发包

  • Struts2的官网 https://struts.apache.org/
    JAVAEE框架学习——Struts2——介绍、搭建、配置_第4张图片
    官网

解压开发包

  • 解压后的目录结构如下:


    JAVAEE框架学习——Struts2——介绍、搭建、配置_第5张图片
    解压后的目录
  • apps:该文件夹用于存放官方提供的Struts2示例程序。
  • docs:该文件夹用于存放官方提供的Struts2文档
  • lib:该文件夹用于存放Struts2的核心类库。以及Struts2的第三方插件类库

创建一个web工程引入相应jar包

可以参考apps下的一些示例代码,其中struts2-blank.war是struts2的空工程,我们可以查看它的lib目录


JAVAEE框架学习——Struts2——介绍、搭建、配置_第6张图片
基本开发包

这些就是基本的开发包了,具体含义如下:


JAVAEE框架学习——Struts2——介绍、搭建、配置_第7张图片
基本开发包解释

创建一个页面:放置一个链接

首先需要在WebContent下创建一个目录demo1,在demo1下创建一个新的jsp 在jsp中编写

创建Action

/**
 * @Auther: wxblack-mac
 * @Date: 2018/5/23 16:49
 * @Description: Struts2 Action类
 */
public class HelloAction {
    
    public String hello() {
        System.out.println("hello world");
        return "success";
    }
}

编写配置文件 struts.xml

引入dtd约束文件







将struts2配置到web.xml中

由于Struts2是基于filter,所以需要配置Struts2的核心过滤器

  
    
        struts2
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    
    
        struts2
        /*
    

Struts2框架架构演示

JAVAEE框架学习——Struts2——介绍、搭建、配置_第8张图片
访问过程

JAVAEE框架学习——Struts2——介绍、搭建、配置_第9张图片
架构图.png

JAVAEE框架学习——Struts2——介绍、搭建、配置_第10张图片
AOP思想

核心配置详解

Struts2 核心配置 Struts.xml


    
    
        
        
            
            /hello.jsp
        
    

Struts2常量配置

Struts默认常量配置位置

JAVAEE框架学习——Struts2——介绍、搭建、配置_第11张图片
默认常量配置

修改Struts2常量配置

第一种 在struts.xml文件中使用 标签 开发中常用

struts.xml

第二种 在src下创建strtus.properties文件

struts.properties

struts.properties

第三种 在项目的web.xml中

JAVAEE框架学习——Struts2——介绍、搭建、配置_第12张图片
web.xml

以上的顺序 也是配置文件的加载顺序 后加载的会覆盖先加载的

常量配置

基本常量配置


    
    
    
    

    
    
  • 通常 Struts2框架按如下搜索顺序加载Struts2常量:
    • struts-default.xml 该文件保存在struts2-core-2.5.14.jar文件中
    • struts-plugin.xml Struts2等插件中
    • struts.xml web应用默认的Struts2配置文件
    • struts.properties Struts2默认的配置文件
    • web.xml 该文件是Web应用的配置文件
      如果在多个文件中配置了同一个Struts2常量,则后一个文件中配置的常量会覆盖前面文件中配置的常量值

配置进阶

Struts2动态方法调用

动态方法调用指的是:
我们在配置struts.xml需要配置method属性 代表调用的方法,如果调用的方法过多则会出现复杂且冗余的method配置,这样显然是不合理的。Struts2提供了动态的方法调用,可以让我们在调用方法时 指定方法的名称 调用对应的方法。这样可以大大简化我们的配置

方式一:
  • 需要开启动态方法调用
  
    
  • 不需要配置method属性
  
        
            /hello.jsp
        
    
  • 在调用时 通过 !方法名 来指定方法的调用
http://localhost:8080/ss/dynamic/Demo1Action!add
> 表示调用Demo1Action中的add方法

这种方式有一个弊端:由于地址路径的特殊,对SEO优化不友好

方式二:
  • 通配符方式 动态方法调用

        
        
            /hello.jsp
        
    

http://localhost:8080/ss/dynamic/Demo1Action_find 这个地址中 *代表"find" 相当于配置了 method="find"

使用PreResultListener

PreResultListener是一个监听器接口,可以在Action完成控制处理之后,系统转入实际的物理视图之间被回调
Struts2应用可由Action、拦截器添加PreResultListener监听器,添加PreResultListener监听器通过ActionInvocation的addPreResultListener()方法完成。一旦为Action添加了PreResultListener监听器,该监听器就可以在应用转入实际物理视图之前回调该监听器的beforeResult()方法

  • 一旦为拦截器添加了PreResultListener监听器,该监听器会对该拦截器所拦截的所有Action都起作用
ActionInvocation invocation = ActionContext.getContext().getActionInvocation();
invocation.addPreResult(ActionInvocation invocation,String resultCode)
{
  .....处理逻辑
  invocation.getInvocationContext().put("extra",new Date());
}

Struts2默认配置

Struts2的很多配置都有默认值,在不配置的时候就以默认值来指定

 
        
        
        
            
            /hello.jsp
            
        

配置默认Action

当用户请求找不到对应的Action时,系统默认的Action即将处理用户请求
配置默认Action通过元素完成


      
      
      
          
       

配置默认Action使用元素即可,配置该元素时需要制定一个name属性,该name属性指向容器中另一个有效的Action,该Action将成为容器中默认的Action

配置Action默认处理类

在配置元素时可以不指定class属性,如果没有指定class属性则系统默认使用ActionSupport作为Action处理类

自定义Action默认处理类

配置默认Action处理类使用元素,配置该元素时只需要指定一个class属性,该属性指定的类就是Action的默认处理类

action类的详解

action的创建方式

方式一:直接创建一个类,可以是POJO(不用继承任何父类 也不需要实现任何接口)

这种方式并不好,使得Struts2框架的代码浸入性更低

方式二:实现一个接口Action

/**
 * Action的详解
 * @author wx-blackmac
 * @create 2018-05-23 22:34
 * bestwishes for you
 * good luck!
 * Action接口预置了一些字符串
 * SUCCESS
 * NONE
 * 
 **/
public class Demo3Action implements Action {

    /**
     * execute是提示Action方法规范
     * @return
     * @throws Exception
     */
    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
}

方式三:继承ActionSupport

ActionSupport帮我们实现了 Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable 这些接口 当我们使用这些接口时,不需要自己实现

/**
 * Action的详解
 * @author wx-blackmac
 * @create 2018-05-23 22:34
 * bestwishes for you
 * good luck!
 *
 **/
public class Demo3Action extends ActionSupport {

}

因为ActionSupport完全符合一个Action的要求,所以也可直接使用ActionSupport作为业务控制器,如果配置Action没有指定class属性(没有用户提供Action类),系统自动使用ActionSupport类作为Action处理类

配置异常处理

Struts2的异常处理我们一般希望如果出现异常1的时候系统转入视图资源1,如果出现异常2系统转入视图资源2。我们可以采用如下的方式

public class XxxAction
{
  public String execute(){
    try{
        ....
    }catch(异常1 e){
    return 结果1;
  }catch(异常2 e){
    return 结果2;
}

  }
}

但是,这样的方式会出现大量的try-catch块,完全手动处理异常,非常烦琐。
我们可以声明execute()抛出全部异常,将异常直接抛给Struts2框架。Struts2框架接收到Action抛出的异常之后,根据struts.xml配置异常映射。转入指定的视图


  







声明式异常捕捉

Struts2的异常处理机制是通过在struts.xml文件中配置元素完成的。

  • exception:此属性指定该异常映射所设置的异常类型
  • result:指定Action出现该异常时,系统返回Result属性值对应的逻辑视图名
异常映射分类
  • 局部异常映射
    元素作为元素的子元素配置
    局部异常映射进队该异常映射所在的Action内有效。
  • 全局异常映射
    元素作为元素的子元素配置
    全局异常映射对所有的Action都生效

如果局部异常映射和全局异常映射配置了同一个异常类型,在该Action内部局部异常映射会覆盖全局异常映射

你可能感兴趣的:(JAVAEE框架学习——Struts2——介绍、搭建、配置)