zoukankan      html  css  js  c++  java
  • Struts2 (上)

    Struts2简介

    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的更新产品。

    常见web层的框架

    • Struts2
    • Struts1
    • Webwork
    • SpringMVC

    web框架特点

    基本前端控制器模型来设计

    • 浏览器发送的所有的请求,都需要经过前端控制器
    • 前端控制器再根据具体的请求所要实现的功能,分发到不同的action来处理
    • 所有的分发操作都是框架自动帮你完成的
    • 我们只需要关心数据怎么样处理。封装,接收这些都不用管
    • 其余的操作都是前端控制器来帮你完成

    前端控制器

    • 所有的请求都要处理
    • 是通过过滤器来实现的
    • 过滤器当中会有接收数据,封装数据,把所有的东西都帮你处理好,最后到action当中就可以直接使用了

    Struts2基本使用

    1.下载strusts框架

    https://struts.apache.org/

    2.目录结构

    • apps
      • Struts2提供的应用,war文件:web项目打成war包。直接放入到tomcat可以运行
      • 里面就是一个最简单的一个项目,有strust2所需要的jar包
    • docs
      • Struts2的开发文档和API
    • lib
      • Strtus2框架的开发的jar包
    • src
      • Struts2的源码

    3.创建一个web工程

    4.引入jar包

    jar包有很多,引入核心jar包即可,右面有需要再引入。

    核心jar包

    5.在工程当中创建一个jsp

    在jsp当中写上一个连接,发送一个请求

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>Title</title>
      </head>
      <body>
        <a href="hello.action">hello struts</a>
      </body>
    </html>
    

    6.编写Action类

    • 在src当中创建一个普通的类

    • 在类当中提供一个方法,方法名称是固定的
      public String execute(){ }

    • 底层会使用反射执行此方法

    public String execute(){
    	System.out.println("我已经接收到了请求");
    	return null;
    }
    

    7.创建Struts配置文件

    • 在src当中创建一个配置文件strust.xml
    • 此文件可以在blank项目的classes目录下找到

    8.配置Struts.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
            "http://struts.apache.org/dtds/struts-2.5.dtd">
    <struts>
    
        <package name="struts" extends="struts-default">
    		<action name="hello" class="com.xzh.struts2.HelloAction" />
        </package>
    </struts>
    

    9.配置前端控制器

    • 没有前端控制器,就没有办法执行action
    • 因为Stusts这些功能都是有前端控制器来给我们提供的
    • 它是有一个过滤器来实现的
    • 所以要去配置一个过滤器
    • 到web.xml当中配置核心过滤器
    <filter>
    	<filter-name>action2</filter-name>
    	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    
    <filter-mapping>
    	<filter-name>action2</filter-name>
    	<url-pattern>/*</url-pattern>
    </filter-mapping>
    

    • 配置完运行,即可执行到创建的MyAction类中的excute方法

    10.在Action当中excute中返回一个Success

    public class HelloAction {
    	public String execute() {
    		System.out.println("我已经接收到了请求");
    		return "success";
    	}
    }
    

    11.改写strust.xml,配置页面跳转

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
            "http://struts.apache.org/dtds/struts-2.5.dtd">
    <struts>
    
        <package name="struts" extends="struts-default">
    		<action name="hello" class="com.xzh.struts2.HelloAction">
    			<!-- 结果页 -->
    			<result name="success">/myxq.jsp</result>
    		</action>
        </package>
    </struts>
    

    Struts2执行流程

    Struts2配置

    struts2的加载顺序

    • 在struts2当中可以有很多地方可以配置常量
    • 配置的常量,哪一个地方生效,就跟加载顺序有关
    • 加载示例图

    配置文件加载顺序

    • init_DefaultProperties() : 加载default.properties
    • init_TraditionalXmlConfigurations(); : 加载struts-default.xml、struts-plugin.xml、struts.xml
    • init_LegacyStrutsProperties(); : 加载struts.properties
    • init_CustomConfigurationProviders(); : 加载配置提供类
    • init_FilterInitParameters() ; : 加载web.xml中过滤器初始化参数
    • init_AliasStandardObjects() ; : 加载Bean对象
    • 配置文件加载顺序
      • default.properties
      • struts-default.xml
      • struts-plugin.xml
      • struts.xml
      • struts.properties
      • web.xml
      • 后配置的常量的值会覆盖先配置的常量的值

    Package

    • 包,这个包与Java中的包的概念不一致。包为了更好管理action的配置

    属性

    • name

      • 包的名称,只有在一个项目中不重名即可。
    • extends

      • 继承哪个包,通常值为struts-default。
      • 默认我们继承的是Struts-default
      • 在这个包当中,定义了很多结果类型和很多的拦截器,继承了这些东西之后,action才有了这些功能
    • namespace

      • namespace+name共同决定了访问路径
      • 名称空间有三种写法
        • 带名称的名称空间 namespace=”/aaa”
        • 根名称空间 namespance=”/”
        • 默认名称空间 namespace=””
    • abstract

      • 抽象的,用于其他包的继承
      • 现在这个包想被别人继承,设置abstract值为true
      • 设置成abstract后就不能用自己运行了

    action

    • 配置Action类。

    属性

    • name
      • 与namespace共同决定访问路径
    • class
      • Action类的全路径
    • method
      • 执行Action中的哪个方法的方法名,默认值execute
    • converter
      • 用来自定义类型转换器,一般不设置,内部提供的转换器已经够用

    常量配置

    • 在Struts2的框架中,提供了非常多的常量,在default.properties
    • struts.i18n.encoding=UTF-8
      • Struts2中所有的post请求的中文乱码不用处理。
    • struts.action.extension=action,,
      • Struts2请求的默认的扩展名。默认扩展名是.action或者什么都不写。
    • 在Struts2中修改一些常量的值
      • 在default.properties当中的值是不允许直接修改的

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

        • struts.xml中进行修改:通过<constant>标签

        • struts.properties中进行修改:自己新建的, 只能修改常量,基本不使用

        • web.xml中进行修改:通过过滤器的初始化参数来修改常量

      • 后面的会覆盖前面的内容

    include

    • 在一个配置文件当中引入其它的配置文件

    • 以后做团队开发时,很多人都需要去修改配置文件

    • 防止被改乱,可以单独的创建一个配置文件

    • 在主配置文件当中引入创建的配置文件

    Action执行访问

    Action类写法

    1.Action类是POJO的类

    自己手动实现execute方法

    2.Action类实现一个Action的接口

    • 实现接口时,会让你覆盖execute方法
    • 在此接口当中定义了5个常量(逻辑视图)
      • String SUCCESS = "success";
        成功
      • String NONE = "none";
        没有跳转
      • String ERROR = "error";
        失败
      • String INPUT = "input";
        表单校验时出错
      • String LOGIN = "login";
        登录出错页面跳转
    • 示例

    3.Action类继承ActionSupport类

    • 推荐使用此方式
    • Actionsupport当中提供了很多功能,数据校验,国际化等一系列操作方法
    • 示例

    Action方法

    Method访问

    使用方法


    public String add(){
    	System.out.println("添加");
    	return null;
    }
    public String delete(){
    	System.out.println("删除");
    	return null;
    }
    public String update(){
    	System.out.println("修改");
    	return null;
    }
    public String find(){
    	System.out.println("查找");
    	return null;
    }
    
    弊端

    要写多个action标签

    通配符

    要求
    • 访问路径当中要包含执行的方法
    • 使用通配符调用方法时,内部会验证是否允许访问该方法,所以要在Action中加上
    <allowed-methods>允许访问的方法</allowed-methods>
    或
    <global-allowed-methods>允许包中全局访问的方法</global-allowed-methods>
    
    • goods_* : method="{1}" 其中1为第一个*的内容
    • _ : class="com.myxq.struts.{1}" method={2}
    使用方法



    动态方法访问

    要求
    • 默认是关闭状态,要想使用的话,必须得要通过修改常量来打开
    • 使用通配符调用方法时,内部会验证是否允许访问该方法,所以要在Action中加上
    • 使用方法


  • 相关阅读:
    【FFMPEG】ffmpeg 时间戳问题汇总
    【FFMPEG】基于RTP的H264视频数据打包解包类
    【FFMPEG】基于RTP的H264视频数据打包解包类
    【FFMPEG】使用FFMPEG+H264实现RTP传输数据
    【FFMPEG】使用FFMPEG+H264实现RTP传输数据
    【FFMPEG】谈谈RTP传输中的负载类型和时间戳
    【FFMPEG】谈谈RTP传输中的负载类型和时间戳
    【图像处理】FFmpeg解码H264及swscale缩放详解
    【图像处理】FFmpeg解码H264及swscale缩放详解
    【图像处理】FFmpeg-0
  • 原文地址:https://www.cnblogs.com/xzh0717/p/10752544.html
Copyright © 2011-2022 走看看