• Struts基本概念


     内容源自:

    Struts2基本概念

    一.struts2体系结构:

    1、Web浏览器请求一个资源。
    2、过滤器Dispatcher查找方法,确定适当的Action。
    3、拦截器自动对请求应用通用功能,如验证和文件上传操作。
    4、Action的execute方法通常用来存储和重新获得信息。
    5、结果被返回到浏览器。 

    二.Struts2的具体工作流程

    (1)  客户端(Client)向Action发用一个请求(Request)
    (2)  容器(Container)通过web.xml映射请求,并获得控制器(Controller)的名字
    (3)  容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1以后调用StrutsPrepareAndExecuteFilter
    (4)  控制器(Controller)通过ActionMapper获得Action的信息
    (5)  控制器(Controller)调用ActionProxy
    (6)  ActionProxy读取struts.xml文件获取action和interceptor stack的信息。
    (7)  ActionProxy把request请求传递给ActionInvocation
    (8)  ActionInvocation依次调用action和interceptor
    (9)  根据action的配置信息,产生result
    (10) Result信息返回给ActionInvocation
    (11) 产生一个HttpServletResponse响应
    (12) 产生的响应行为发送给客服端。

    三.配置文件:

    1、struts.xml

    struts.xml是Struts 2 的核心配置文件,主要用于配置开发人员编写的action。

    (1)基本格式如下:

    <?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>
       <package name="test" extends="struts-default"/>
       <action name="Login1" class="com.chen.LoginAction1" >
       <result>/loginResult.jsp</result>
       <result name="input">/login1.jsp</result>
       </action>
       </package>
    </struts>

    ①通过反射机制将请求参数注入到"com.chen.LoginAction1"类中
    ②调用"com.chen.LoginAction1"类的execute方法,该方法的原型为:public String execute() throws Exception;
    ③ 根据execute方法返回的String类型的字符串(如"input"),在配置文件中查找该字符串对应的页面,并转到该页面。

    (2)标签详解
    <package>标签
    如果要配置<Action>的标签,那么必须要先配置<package>标签,代表的包的概念。包含的属性:
    name         包的名称,要求是唯一的,管理action配置。
    extends      继承,可以继承其他的包,只要继承了,那么该包就包含了其他包的功能,一般都是继承struts-default
    namespace    名称空间,一般与<action>标签中的name属性共同决定访问路径,常见的配置如下:
    namespace=""     -- 默认的名称空间(访问的方式和namespace="/"是一样的)
    namespace="/"    -- 根名称空间
    namespace="/aaa" -- 带有名称的名称空间,这样请求action时,URL是/namespace/name的形式
    abstract         -- 抽象的。这个属性基本很少使用,值如果是true,那么编写的包是被继承的。     

    <action>标签
    代表配置action类,包含的属性:
    name              和<package>标签的namespace属性一起来决定访问路径的。
    class             配置Action类的全类名(默认值是ActionSupport类)
    method            Action类中执行的方法,如果不指定,默认值是execute方法

    <result>标签
    action类中方法执行,返回的结果跳转的页面
    name      结果页面逻辑视图名称
    type        结果类型(默认值是转发,也可以设置其他的值)


    注:
    设置Struts2默认的Action:
    在地址栏上输入一个不存在的action请求,程序会报404的异常。但是在<package>标签中通过<default-action-ref name="指定action标签name属性"></default-action-ref>来设置默认的Action。当在配置文件中找不到相应的action时,就由默认的action进行处理。
    设置Action默认处理类:
    在地址栏上输入一个正确的action请求,但是<action>标签中的class属性没有写具体的Action类也会报异常。在<package>标签中通过<default-class-ref class="指定action类的全路径"></default-class-ref>来设定action的默认处理类。

    2、多个struts的配置文件的合并
    为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。可以在使用<include>标签来引入其他的struts_xx.xml的配置文件。例如:

    <struts>
    <include file="conf/struts_user.xml"></include>
    <include file="conf/struts_editer.xml"></include>
    </struts>

    这样可以把struts_user.xml和struts_user.xml各自编写,并放到一个文件目录下,使用时strus.xml直接包含这两个配置文件即可。需要注意的是struts_user.xml和struts_user.xml也必须按照strus的配置文件格式来写。

    3、web.xml的配置

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

    通过<url-pattern>/*</url-pattern>使得struts拦截所有URL请求。

    Filter 过滤器是用户请求和处理程序之间的一层处理程序。它可以对用户请求和处理程序响应的类容进行处理,通常用于权限、编码转换等场合。

    四。实现Action

    1、把Action看作是POJO类
    POJO(Plain Ordinary Java Object)简单的Java对象。简单来说,没有继承某个类,没有实现接口,就是POJO的类。我们直接写一个POJO类,把它当作struts2对应的一个Action类。这个类必须包含处理逻辑所需要的属性及相应的get、set方法,并且提供Struts2调用的execute方法。但通常不推荐这样做,这样不利于统一接口。

    2、实现Action接口

    Action接口中定义了5个常量,5个常量的值对应的是5个逻辑视图跳转页面(跳转的页面还是需要自己来配置),还定义了一个方法,execute方法,我们可以自己来实现。
    常量值如下所示:
    SUCCESS       -- 成功.
    INPUT         -- 用于数据表单校验.如果校验失败,跳转INPUT视图.
    LOGIN         -- 登录.
    ERROR         -- 错误.
    NONE          -- 页面不转向.

    3、继承ActionSupport类,而该类实现了Action 、Validateable 、 ValidationAware 、TextProvider、LocaleProvider,Serializable接口。我们只需要根据实际情况重写一些其中的方法就可以满足需求。

    五。实例

    链接:https://blog.csdn.net/xiaokang123456kao/article/details/58601826

  • 相关阅读:
    BigPipe学习研究
    JavaSript模块规范
    WebSocket
    图片链接转成base64
    3000多台式机组装经验分享
    android textview 自动换行 整齐排版
    android 获取所有SD卡目录
    android获取系统信息
    在电脑上用chrome浏览器调试android手机里的网页代码时,无法看到本地加载的js文件
    android 根据坐标返回触摸到的View
  • 原文地址:https://www.cnblogs.com/xym4869/p/8963736.html
Copyright © 2020-2023  润新知