struts 订阅
Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。 展开全文
Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。
信息
使用人员
JavaWeb网站开发人员
外文名
Struts
平    台
Java
中文名
struts
实    质
基于MVC的WEB框架
struts结构
在Struts中,已经由一个名为ActionServlet的Servlet充当控制器(Controller)的角色,根据描述模型、视图、控制器对应关系的struts-config.xml的配置文件,转发视图(View)的请求,组装响应数据模型(Model)。在MVC的模型(Model)部分,经常划分为两个主要子系统(系统的内部数据状态与改变数据状态的逻辑动作),这两个概念子系统分别具体对应Struts里的ActionForm与Action两个需要继承实现超类。在这里,Struts可以与各种标准的数据访问技术结合在一起,包括Enterprise Java Beans(EJB),JDBC与JNDI。在Struts的视图(View)端,除了使用标准的JavaServer Pages(JSP)以外,还提供了大量的标签库使用,同时也可以与其他表现层组件技术(产品)进行整合,比如Velocity Templates,XSLT等。通过应用Struts的框架,最终用户可以把大部分的关注点放在自己的业务逻辑(Action)与 映射关系的配置文件(struts-config.xml)中。 [1] 
收起全文
精华内容
参与话题
问答
  • Struts简介

    千次阅读 2017-11-22 12:34:24
    Struts英文单词意思 支柱、支架,来源于建筑和旧式飞机使用的金属支架。 二 定义 Struts是流行和成熟的基于MVC设计模式的Web应用程序框架。 Struts在软件开发中,是一个非常优秀的框架。它先是Jakarta项目的...

    一 Struts英文单词意思

    支柱、支架,来源于建筑和旧式飞机使用的金属支架。

    二 定义

    Struts是流行和成熟的基于MVC设计模式的Web应用程序框架。

    Struts在软件开发中,是一个非常优秀的框架。它先是Jakarta项目的一个子项目,后来转为Apache软件基金会的一个子项目。

    Struts2是Struts的下一代产品,它以WebWork为核心,采用拦截器的机制处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts2可以理解为WebWork的更新产品。



     

    三 使用struts的目的

    为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。

    四 Status2的优势

    • 实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现。
    • 丰富的标签库,提高了开发效率。
    • 提供了丰富的拦截器实现。
    • 通过配置文件,就可以掌握整个系统各个部分之间的关系。
    • 异常处理机制,只需在配置文件中配置异常的映射,即可对异常做相应的处理。
    • Struts2的可扩展性高。如果用户开发了自己的插件,只要很简单地配置,就可以和Struts2框架融合,实现框架对插件的可插拔特性。
    • 面向切面的思想在Struts2中也有很好的体现。

    五 关于框架

    框架可以提高我们的开发效率,但因为框架是一种主动式的设计,所以我们使用框架时,必须遵循框架制定好的开发流程。Struts2是遵循MVC设计理念的开源Web框架。

    展开全文
  • Struts学习笔记(一)

    千次阅读 2018-08-28 20:09:21
    一、框架概述  1、框架的意义与作用:  所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的经历放到业务需求的分析和理解上面。  特点:封装了很多细节,程序员在使用的时候会非常简单...

    一、框架概述

          1、框架的意义与作用:

                                所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的经历放到业务需求的分析和理解上面。

                         特点:封装了很多细节,程序员在使用的时候会非常简单。

          2、三大框架:

                                Struts2,Hibernate,Spring

          3、学好框架:

                       由于框架中细节很多,知识点比较零散,课后总结和做好笔记就变得尤为重要。

    二、关于三层架构

            

    三、控制器:MVC中的控制器

          1、MVC回顾

                       M:Model 模型,封装数据。javabean

                      V:view     视图,展示界面。jsp

                      C:Controller 控制器,控制程序流程。Servlet

          2、Servlet和Filter实现请求转发

                       Servlet:

                      

                       Filter:

                 

                  总结:

                         Servlet能做的事情,过滤器也可以做到。并且过滤器比Servlet还多了一个放行的功能,因此过滤器比Servlet功能更为强大。

                         结论就是:过滤器同样也适合做控制器。

    四、案例中的问题

            

    规律:

             1、获取请求正文,用户要做什么事情

           2、根据不同的请求,做出不同的判断

           3、执行具体的方法代码(动作)

           4、转向页面,展示给用户

    缺陷:

           1、重复性劳动太多,具体的执行代码也有冗余代码。

           2、到底要做什么全是硬编码,像用户要做什么事情,对应执行什么代码,可以写在配置文件中。

           3、具体的代码方法放到了控制器中,过于臃肿。

    五、Struts2简介

          1、Struts2概述

                       Struts2是Apache发行的MVC开源框架。注意:它只是表现层(MVC)框架。

          2、Struts2的来历

                       Struts1:也是apache开发的一套mvc的开源框架。在2005年之前非常流行。

                                  弊端:Struts1的核心控制器就是一个Servlet。随着使用者的增多,弊端开始出现。

                  Struts2:在long long ago,有一个设计超前的框架XWork,后来推出了XWork1和WebWork2。Struts2就是apache和OpenSymphony组织合并开发出来。

                                  里面包含了WebWork2的核心及Struts的一些特性和功能。除此之外,和Struts1没有任何关系了。

    六、搭建Struts2开发环境

          1、下载Struts2开发包

                              http://struts.apache.org

          2、开发包目录结构

                               

          3、搭建开发环境

               3.1、拷贝必要jar包到classpath中

                               

                                拷贝哪些jar包?

                                找到Struts2自带的例子中,struts-blank的war包,在它的\WEB-INF\lib目录下的jar包全拷贝。

               3.2、建立Struts2的配置文件

                                at the top of classpath(在最顶层的构建路径),建立一个默认名称为struts.xml的配置文件。

    在struts2-core-2.0.11.1.jar中有struts-2.0.dtd文件的约束代码

                 

                        

     

     

    注意:

           1.文件名大小写。

            2.创建位置。

            3.该名称允许修改,但是我们一般不改。

               3.3、配置控制器

                                a、配置位置:在web.xml中

                         b、配置什么: struts2已经写好了的一个过滤器。

                         结论:

                                struts2比struts1优秀的一个体现就是,它用了更为强大的过滤器作为控制器了。

                 

               3.4、验证是否成功

                                部署应用,启动Tomcat,不报错表示搭建成功。

                 

    七、第一个Struts2案例

             以下步骤是日后实际开发中经常重复的。

          1、建立一个jsp文件

                      

          2、在struts.xml文件中配置

            

          3、建立动作类和动作方法

                 

          4、结果视图页面

                 

          5、测试:

          

          6、关于struts.xml没有提示的问题

                       分析原因:没有找到对应的dtd约束文件。

                  解决办法:

                                a.上网

                                b.不能上网:

                                             

                                      

    八、第一个案例的执行过程

            

             明确:

           

    九、Struts2的配置文件

          1、加载时机:

                                当应用被tomcat加载的时候,struts2的配置文件就已经被加载过了。

          2、加载顺序

                               

    顺序

    配置文件名

    所在位置

    说明

    1

    default.properties

    struts2-core-2.3.15.3.jar\org\apache\struts2

    不能修改

    2

    struts-default.xml

    struts2-core-2.3.15.3.jar

    不能修改

    3

    strtuts-plugin.xml

    在struts2提供的插件jar包中

    不能修改

    4

    struts.xml

    我们的应用中

    我们修改的:推荐

    5

    struts.properties

    我们的应用中

    我们修改的

    6

    web.xml

    我们的应用中

    我们修改的,可以给过滤器配置参数

                                注意:

                                1、Struts2提供了两种配置的方式。一种是key=value的方式,即使用.properties文件。另一种是xml文件配置。我们推荐使用xml文件(它能描述层级关系)。

                                2、当多个配置文件中,有相同的参数,后面的会把前面的值给覆盖了。

          

    十、Struts2框架提供的常量

          1、常用的常量

                                常量定义在了default.properties配置文件中,体现形式都是key=value。所有的struts2应用都会用到这些常量。

                         常用的:

    常量名

    常量值

    说明

    struts.i18n.encoding

    UTF-8

    应用中使用的编码

    struts.objectFactory.spring.autoWire

    name

    和spring框架整合有关

    struts.multipart.parser

    jakarta

    指定文件上传用的组件

    struts.multipart.maxSize

    2097152

    文件上传总文件大小限制:2M

    struts.action.extension

    action,,

    能进入Struts2框架内部的url地址后缀名。多个值用逗号分隔

    struts.enable.DynamicMethodInvocation

    false

    是否允许动态方法调用

    struts.devMode

    false

    是否是开发模式。开发模式:改了配置文件,不需要重启。输出更多的错误信息。开发阶段建议为true

    struts.ui.theme

    xhtml

    页面展示用的主题

            

          2、在struts.xml中覆盖常量

                       使用<constant name="" value=""></constant>元素进行覆盖

                  例如:

                        

                 

          3、创建struts.properties文件覆盖

                       在应用的构建路径中创建一个struts.properties的文件。

          

          3、在web.xml中配置过滤器参数

          

    十一、xml配置文件的主要元素

          1、package元素

               1.1、作用:

                                                   在struts2的配置文件中引入了面向对象思想,使用了分包管理。易于管理动作类。便于模块化开发动作类。

               1.2、属性:

                                                   name:包的名称。必须写。且必须唯一。

                                       extends:一般情况下需要继承struts-default包,但不是必须的。不过如果不继承的话,将无法使用struts2提供的核心功能。

                                                            struts-default.xml中定义着struts-default这个包。而struts-default.xml是在我们的struts.xml加载之前加载。

                                       abstract:把包声明为抽象包,抽象包就是用来被继承的。只要是没有<action>元素的包,就可以声明为抽象包。

                                       namespace:名称空间。

                                                     名称空间  +     动作名称  =     访问路径

                                             

                                                   

               1.3、packege中的namespace详解

                                         namespace的默认值:

                                                     a.不写该属性

                                                     b.写了该属性,取值是一个"".

                                                     注意:默认值不是/

                                动作类的搜索顺序:

                                      

          2、action元素

               2.1、作用:

                                         配置动作用的。

               2.2、属性:

                                         name:动作名称

                                class:动作类全名。默认的动作类是:com.opensymphony.xwork2.ActionSupport

                                              是在struts-default.xml中定义的

                                             

                                              要想替换默认动作类:

                                              在应用的struts.xml中,package中加入:

                                               

                                method:动作类中的方法名称。默认是public String execute(){}

                                              要求:

                                                     1.public的

                                                     2.返回值必须是String

                                                     3.没有参数

               2.3、动作类

                                                   a.方式一:动作类就是一个POJO(Plain Old Java Object 原始的java对象),非常简单的javabean。

                                                           

                                       b.方式二:动作类实现com.opensymphony.xwork2.Action接口。

                                              常量:给动作方法返回值用的。用常量可以使你的应用规范和统一。

    常量变量名

    对应的值

    说明

    SUCCESS

    success

    动作方法执行一切OK

    ERROR

    error

    动作方法执行时遇到了异常

    INPUT

    input

    回显

    LOGIN

    login

    一般转向登陆页面

    NONE

    none

    不转向任何的视图

                                        c.方式三:动作类继承com.opensymphony.xwork2.ActionSupport  推荐使用

                                                    

               2.4、动作的访问

                                a.使用通配符:

                        

                                升级版:

                        

                                优先级:绝对匹配优先。使用通配符的按照在配置文件中的先后顺序进行匹配的。

                                b.动态方法调用

                        

                        

    十二、结果类型视图(逻辑结果视图)

             前奏:该部分内容指的就是struts配置文件中的result元素的使用

          1、result元素

                       作用:

                         为动作指定结果视图

                  属性:

                         name:逻辑视图的名称,对应着动作方法的返回值。默认值是success

                 

                         type:结果类型,指的就是用什么方式转到定义的页面。默认是dispatcher

                 

          2、result元素中type的取值

                                type属性的取值在struts-default.xml中定义着。

                 

                         常用结果类型介绍:

                         dispatcher:(默认值)

                                       使用请求转发,转向一个页面。

                         redirect:

                                       使用重定向,转向一个页面。

                               

                         redirectAction:注意:使用的是重定向。

                                       a.重定向到另一个相同名称空间的动作。

                                      

                                       b.重定向到不同名称空间的动作

                                      

                         chain:注意: 使用的是请求转发。

                                       a.转发到另一个相同名称空间的动作。    

                                             

                                       b.请求转发到不同名称空间的动作

                                      

          3、result元素中param子元素

                        在转发或者重定向到不同包下的动作时,都用到了result元素的子元素param。

                   param元素的作用:依赖注入(Dependence Injection)思想

                                       我们通过struts-default.xml中的resultTypes元素中配置可以看出,每个结果类型视图其实都是靠一个类来实现的。而param元素就是将配置的参数,注入到该类中。

                                       调用的是对应类的setter方法进行注入的。

                                       例如:redirectAction结果视图

                               

                                       该类中肯定会有对actionName和namespace属性的注入方法(setter方法)。

                                        

                                       再比如:默认结果视图dispatcher

                               

                               

          4、自定义结果类型

                        通过前面的内容,我们看出,其实结果类型就是一个类,这些类都实现了com.opensymphony.xwork2.Result接口。

                   或者继承自该接口的实现类org.apache.struts2.dispatcher.StrutsResultSupport。

                   这些类都有一个doExecute方法,用于执行结果视图。

                   综上:我们也可以自己写一个结果视图。

                   例子:

                                输出CAPTCHA图像的结果类型。

                                CAPTCHA(Completely Automated Public Turing Test to Tell Computers and Humans Apart 全自动区分计算机和人类的图灵测试)————>简称:验证码。

                                第一步:写一个类,实现接口或者继承接口的实现类

                        

                                第二步:在struts.xml文件中配置结果类型

                        

                                第三步:在action配置时引用

                        

                                最终结果:

                                      

                                扩展:通过可配置的参数,实现图像大小的调整

                        

          5、全局视图和局部视图

                5.1、局部视图

                                        

               5.2、全局视图

                      

                                运行结果:

                                        

    十三、在动作类中访问Servlet的API

                    第一种方式:使用ServletActionContext类

                      

                       第二种方式:使用实现接口的方式

            

     

    展开全文
  • Struts2框架的基本使用

    万次阅读 多人点赞 2017-04-29 08:48:48
    前面已经介绍过了MVC思想,Struts2是一个优秀的MVC框架,大大降低了各个层之间的耦合度,具有很好的扩展性。从本篇开始我们学习Struts2的基本用法,本篇主要包括以下内容: Struts2的下载安装 理解整个框架的运行...

         前面已经介绍过了MVC思想,Struts2是一个优秀的MVC框架,大大降低了各个层之间的耦合度,具有很好的扩展性。从本篇开始我们学习Struts2的基本用法,本篇主要包括以下内容:

    • Struts2的下载安装
    • 理解整个框架的运行流程
    • 自定义实现Action
    • 自定义配置处理结果

    一、下载和安装Struts2
         登录Apache官网 http://struts.apache.org/download.cgi#struts23163 下载最新版本的Struts,当然建议下载2.3版本的,因为2.5版本刚出来,有些示例应用并不是很全。解压压缩包,得到Struts2的源码及示例代码。
    这里写图片描述

    apps目录中主要是官方提供的Struts2的实例代码,对于我们的学习是很有用的。docs中主要是有关Struts2的相关文档内容。lib目录中主要存放了有关Struts2的核心类库,以及第三方插件库。src中包含了Struts2的全部源代码。

    二、理解Struts2的运行流程
         下面演示一个完整的使用Struts2的实例,目的不是具体的代码,重点在于理解整个框架的运作流程。首先我们需要从apps目录中的struts2-blank示例项目中拷贝出整个lib目录。(这是使用Struts2最基本的jar包,没必要从Struts2的lib中一个一个找,因为你也不知道哪些是必需的),我们将他们导入到我们的项目中。

    这里写图片描述

    这是整个Struts2的请求和响应流程,下面看具体代码中是如何体现的。

    //web.xml,首先在web.xml中添加如下代码,拦截所有请求,即所有请求现在全部归Struts2框架管了
    <filter>
            <filter-name>struts</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
            <filter-name>struts</filter-name>
            <url-pattern>/*</url-pattern>
    </filter-mapping>
    //编写Action充当控制器
    public class LoginAction extends ActionSupport {
        private String username;
        private String password;
        public String getUsername(){
            return this.username;
        }
        public void setUsername(String s){
            this.username = s;
        }
        public String getPassword(){
            return this.password;
        }
        public void setPassword(String s){
            this.password = s;
        }
    
        public String execute() throws Exception{
    
            if(getUsername().equals("walker")&&getPassword().equals("yam")){
                return SUCCESS;
            }
            return ERROR;
        }
    }
    //新建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>
        <package name="walker" extends="struts-default">
            <action name="login" class="MyPackage.LoginAction">
                <result name="error">/error.jsp</result>
                <result name="success">/index.jsp</result>
            </action>
        </package>
    </struts>
    /*login.jsp*/
    <html>
      <head>
        <title>login</title>
      </head>
      <body>
        <form method="post" action="login">
            姓名:<input type="text" name="username" /><br />
            密码:<input type="password" name="password" /><br />
            <input type="submit" value="提交"/>
        </form>
      </body>
    </html>

    我们访问login.jsp页面,

    这里写图片描述

    提交之后会请求URL为login的页面,框架拦截器拦截,搜索Struts.xml中该URL所对应的Action控制器,转向具体的控制器,在我们写的LoginAction控制器中,我们获取表单提交的参数并做简单判断,返回字符串success或者error给核心拦截器。核心拦截器读取Struts.xml中的配置查找控制器返回的字符串对应的具体视图位置,forward视图页面响应用户。
    这里写图片描述

    这就是一个简单的Struts2框架的请求和响应过程,可以看到整个框架的核心是主拦截器和各种控制器Action,下面我们具体看看控制器的相关知识。

    三、自定义实现Action
         在Action中使用实例变量来封装请求的参数,正如上面的例子所示:我们在login.jsp页面提交的username和password两个参数,对应于LoginAction中的两个参数,在核心拦截器跳转LoginAction时,将两个请求参数自动赋值给LoginAction的两个实例变量。需要注意的是,对于LoginAction中的这两个实例变量,是需要提供setter和geter方法的,我们的核心拦截器在跳转LoginAction的时候也是通过setter方法来对具体的实例参数进行赋值的。
         我们想要自定义xxxAction控制器,需要继承Action接口,并实现其中的方法。

    public interface Action {
        String SUCCESS = "success";
        String NONE = "none";
        String ERROR = "error";
        String INPUT = "input";
        String LOGIN = "login";
    
        String execute() throws Exception;
    }

    我们可以看到在Action接口中定义了几个常用的字符串,这些字符串会被用于对应物理视图位置,详细的内容后文介绍。此处有一个execute方法,这个方法就类似于我们JavaSE中的main方法,一旦核心拦截器拦截请求跳转到Action页面,会默认执行execute方法。细心的读者可能发现,上述的例子中并没有继承Action接口,而是继承了ActionSupport类。其实ActionSupport类还是继承了Action接口并实现了execute方法,只是ActionSupport类还为我们默认的实现了一些其他的工具函数,方便我们使用,所以基本上在自定义Action的时候会继承ActionSupport类来减轻编码难度。

         Struts2中的Action没有任何和Servlet API耦合的地方,也就是在Action控制器中没有关于任何可直接操作Servlet API的接口调用。对于各个模块之间的分离,Struts还是做的很优秀的。那我们在Action控制器中没法直接操作Servlet的一些对象,例如:request,response等,但是Struts2框架提供了一个工具类,可以为我们提供这些对象。ActionContext:

    static ThreadLocal<ActionContext> actionContext = new ThreadLocal();
    //通过静态工厂创建ActionContext实例对象
    public static ActionContext getContext() {
            return (ActionContext)actionContext.get();
        }
    
    //以map的形式设置application范围内的共享数据
    public void setApplication(Map<String, Object> application)
    //获取application范围内的共享数据
    public Map<String, Object> getApplication()
    //以map的形式设置session范围内的共享数据
    public void setSession(Map<String, Object> session)
    //获取session范围内的共享数据
    public Map<String, Object> getSession()
    //获取request范围内的指定的参数值
    public Object get(String key)
    //向request范围内添加一个key-value的参数
    public void put(String key, Object value)
    //获取request的所有请求参数
    public Map<String, Object> getParameters()
    //向request范围内添加一批请求参数
    public void setParameters(Map<String, Object> parameters)

    我们往往通过ActionContext的静态方法,通过本地线程ThreadLocal获取ActionContext实例,此ActionContext封装了有关Servlet操作的各种API调用方法。我们看一个简单的使用:

    public class LoginAction extends ActionSupport {
        private String username;
        private String password;
        public String getUsername(){
            return this.username;
        }
        public void setUsername(String s){
            this.username = s;
        }
        public String getPassword(){
            return this.password;
        }
        public void setPassword(String s){
            this.password = s;
        }
        public String execute() throws Exception{
            if(getUsername().equals("walker")&&getPassword().equals("yam")){
                ActionContext ac = ActionContext.getContext();
                ac.put("login","登录成功");
                return SUCCESS;
            }
            return ERROR;
        }
    }
    <html>
      <head>
        <title></title>
      </head>
      <body>
        <p><%=request.getAttribute("login")%></p>
        <h1>this is the index page</h1>
      </body>
    </html>

    结果如下:

    这里写图片描述

    以上我们演示了如何通过ActionContext 这个工具类来完成对Servlet API的调用。其实还可以使用ServletActionContext这个工具类来直接获取到原Servlet的pageContext,request,response等对象。具体的大家可以自行研究。

    四、Action的配置
         以上我们完成了对xxxAction控制器的编写,但是如果想要我们的核心拦截器能够在用户请求URL时,找到对应的Action控制器,我们需要学会在Struts.xml中配置。之前我们介绍过,web.xml是用来配置整个web应用的,那么我们的struts.xml就是用来配置整个框架的。struts.xml应该被创建并放置在类的加载文件夹中,使用IDE的话,就创建在src文件夹下,在编译的时候会被拷贝到WEB-INF/classes中。

    这里写图片描述

    对于上述的示例,该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>
        <package name="walker" extends="struts-default">
            <action name="login" class="MyPackage.LoginAction">
                <result name="error">/error.jsp</result>
                <result name="success">/index.jsp</result>
            </action>
        </package>
    </struts>

         这里的头部的一些东西没必要自己敲,依然从官方给的示例中拷贝即可。至于元素Struts中的内容才是需要自己添加配置的。除去根元素,我们看到的第一个元素是package ,在Struts中使用包来配置Action,也就是所有的Action都必须被配置在一个包下面,当然一个包中也是可以配置多个Action的。
         package元素中可以配置以下属性:

    • name:该属性指定了该包的唯一标识,是必须属性
    • extends:该属性指定了该包可以继承别的包,当然别的包中的所有Action这里都是可用的了,非必须属性
    • namespace:该属性指定了该包下的所有Action的命名空间,主要用于区分同名的Action,非必须属性
    • abstract:指定了该包是一个抽象的包,抽象的包中是不能定义Action的,但是可以有大量的类型定义、拦截器定义等

    从上面给出的Struts.xml中,我们可以看出来,该包继承了struts-default包,这是struts2-core-2.3.32.3.jar 中的文件,部分内容如下:

    这里写图片描述

    被声明为抽象包之后,其中就定义了一堆拦截器和类型,具体的我们后面介绍,此处只需要知道,我们可以通过包的继承了来继承其他包中的一些Action获取拦截器。由于该包是配置普通Action的基础,所以一般我们在自定义package的时候会继承该包。
         接下来我们简单看看namespace的使用,我们在Struts.xml中可以定义多个包,每个包下面也是可以定义多个Action的,那么如果某两个不同的包下面出现同名的Action,框架就自然无法选择调用哪个Action来处理请求。如果我们指定了命名空间,那么在请求该包下的Action的时候,就需要带上命名空间的值,这样就可以避免这种冲突。具体看如下例子:

        <package name="walker" extends="struts-default" namespace="a">
            <action name="login" class="MyPackage.LoginAction">
                <result name="error">/error.jsp</result>
                <result name="success">/index.jsp</result>
            </action>
        </package>
        <package name="yam" extends="struts-default" namespace="b">
            <action name="login" class="MyPackage.LoginAction">
                <result name="error">/error.jsp</result>
                <result name="success">/index.jsp</result>
            </action>
        </package>

    我们看这两个包,他们下面配置了相同的Action,但是当时他们具有不同的命名空间,所以不会产生冲突。例如:我们请求walker包下的login action的URL为:

    /a/login

    而yam包下的login action的请求URL为:

    /b/login

    以上我们演示package包下的一些属性的作用,需要注意一点的是:如果没有指定namespace的值,则该包下的所有Action都处于默认的命名空间下,此处默认的命名空间和 namespace=”/” 是有区别的,后者表示该包处于根命名空间下,而前者中则包含了所有没有指定namespace值的包。如果框架在根命名空间或者别的命名空间下找不到指定的Action,则会前往默认命名空间下查找指定了Action。

    限于篇幅,未完待续。。

    展开全文
  • Struts旅程(一)Struts简介和原理

    万次阅读 多人点赞 2014-02-10 07:55:36
    struts简介 Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用JavaServlet/JSP技术,实现了基于JavaEEWeb应用的MVC设计模式的...


    struts简介

    StrutsApache软件基金会(ASF)赞助的一个开源项目。它最初是jakarta项目中的个子项目,并在20043月成为ASF的顶级项目。它通过采用JavaServlet/JSP技术,实现了基于JavaEEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。

    Struts发展历史

    Struts是作为ApacheJakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServerPagesservlet、标签库以及面向对象的技术水准。

    Struts这个名字的来源于在建筑和旧式飞机中使用的支持金属架。之所以这个框架叫做“struts”,是为了提醒我们记住那些支撑我们房屋,建筑,桥梁,甚至我们踩高跷的基础支撑。这也是解释struts在开发web应用程序中所扮演的角色的精彩描述。

    Struts的含义是支柱,枝干,它的目的是为了减少程序开发的时间,项目的创建者认为JSPservlet的存在虽然可以帮助用户解决大部分问题,但是由于它们的编码对项目的开发带来了许多的不方便,可重用性也差,所以struts应运而生,帮助用户在最短的时间内解决这些问题。Struts框架提供如下服务:

    1)作为控制器的Servlet

    2)提供大量的标签库。

    3)提供了用于国际化的框架,利用不同的配置文件,可以帮助用户选择合适自己的语言。

    4)提供了JDBC的实现,来定义数据源和数据库连接池。

    5XML语法分析工具。

    6)文件下载机制。

     

    Struts原理

    Struts是对JSPModel2设计标准的一种实现,下面分别从模型(Model)、视图(view)和控制器3个部分介绍Struts的体系结构和工作原理。调用流程如下所示(图1.1)。


    1.1

     

    1)视图(view

    Struts中,视图层包含两个部分,JSP页面和ActionForm

    ActionForm封装了用户提交的表单信息,其实ActonForm本质上就是JavaBean,这些JavaBean中没有业务逻辑,只提供了所有属性的gettersetter方法,这些属性和用户表单中的输入项是一一对应的。在Struts中就是通过ActionForm把用户表单信息提交给控制器。

    JSP页面是经典MVC中主要的视图组件,主要是信息显示和控制器处理结果显示的功能。

    除了以上,struts还提供了一个强大的struts标签库,来帮助用户解决显示逻辑,并且利用ActonForm组件将信息传递到控制层。

    2)控制器(Controller

    在控制层,struts提供了一个控制器组件ActionServlet,它继承自HttpServlet,并重载了HttpServletdoGet(),doPost()方法,可以接受HTTP的响应,并进行转发,同时还提供了使用XML进行转发Mapping(映射)的功能。

    3)模型(Model

    模型表示状态和业务逻辑的处理,在一般的web应用程序中,用JavaBean或者EJB来实现系统的业务逻辑。在Struts中,struts提供Action对象,来管理业务逻辑的调用帮助用户分离业务逻辑,也就是说struts本身不实现业务逻辑,但可以调用已完成的业务逻辑

    Struts工作流程

    Struts工作流程如下(图1.2)所示。

     


    图1.2

     

    ActionServletstruts中核心的控制器,所有的用户请求都必须通过ActionServlet的处理,而struts-config.xmlstruts中核心的配置文件,在这个文件中配置了用户请求URL和控制器Action的映射关系,ActionServlet通过这个配置文件把用户的请求发送到对应的控制器中。

    struts web应用程序中,当web应用程序启动的时候,就会初始化ActionServlet在初始化ActionServlet的时候会加载struts-config.xml配置文件,在加载成功后会把这些URL和控制器映射关系存放在ActionMapping对象或者其他对象中。当ActionServlet接收到用户请求的时候,就会按照下面的流程对用户请求进行处理。

    1ActionServlet接收到用户的请求后,会根据请求URL寻找匹配的ActionMapping对象,如果匹配失败,说明用户请求的URL路径信息有误,所以返回请求路径无效的信息,当找到匹配的ActionMapping的时候,进入到下一步。

    2)当ActionServlet找到匹配的ActionMapping对象的时候,会根据ActionMapping中的映射信息判断对应的ActionForm对象是否存在,如果不存在对应的ActionForm对象就创建一个新的ActionForm对应,并把用户提交的表单信息保存到这个ActionForm对象中。

    3)在struts-config.xml中这个配置文件,可以配置表单是否需要验证,如果需要验证,就调用ActionForm中的validate()方法对用户输入的表单进行验证。

    4)如果ActionFormvalidate()方法返回了ActionErrors对象,则表明验证失败,ActionServlet把这个页面返回到用户输入的界面,提示用户重新输入。如果方法的返回值为null,就表明验证已经通过,可以进入下一步处理。

    5ActionServlet可以根据ActionMapping对象查找用户请求转发给哪个控制器Action,如果对应的Action对象不存在,就创建这个对象,并调用这个Actionexcute()方法。

    6)业务逻辑控制器Actionexecute()方法就会返回一个ActionForward对象,ActionServlet把控制器处理的结果转发到ActionForward对象指定的JSP页面。

    7ActionForward对象指定的JSP页面根据返回的处理结果,用合适形式把服务器处理的结果展示给用户,到这里为止,一个客户请求的整个过程完毕。


    以上初步struts框架进行了介绍,和对原理进行了简单的分析。至于struts是如何实现MVC的,ActionServlet属于Controller部分,Action和ActionForm属于Model层,还是Action属于Controller层,不同的人对struts有不同的理解。接下来真正的运用到实践中,在实践中深刻去体会,原理固然重要,重要的是运用,是能驾驭和使用这个框架。就像学习开车一样,不是一蹴而就的。

    下一篇讲解struts配置,我们以登录为例


     

     

    展开全文
  • Struts2框架入门

    千次阅读 2016-09-30 22:49:35
    Struts2简介Struts2是在WebWork2基础上发展而来的。Struts2和Struts1一样,也都是属于MVC框架。不过有一点大家需要注意的是:虽然Struts2和Struts1在名字上差别不大,但Struts2应用的代码编写风格与Struts1几乎可以...
  • Struts1是第一个广泛流行的mvc框架,使用及其广泛。但是,随着技术的发展,尤其是JSF、ajax等技术的兴起,struts1有点跟不上时代的步伐,以及他自己在设计上的一些硬伤,阻碍了他的发展。  同时,大量新的mvc框架...
  • Struts2 入门学习总结一

    万次阅读 多人点赞 2018-09-10 20:51:42
    一、Struts2简介 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2是Struts的下一代产品,这个框架...
  • Struts2 框架总结(一):简单开发

    万次阅读 2018-05-21 21:03:50
    Struts框架是什么?用来做什么?首先要知道mvc模式(model,view,controller),controller层用来接收页面请求的信息,并且调用service层来响应给界面信息。model层用来处理业务信息和数据库的交互,view层用来显示界面...
  • struts下载 各版本官网下载

    千次阅读 2018-12-04 11:33:45
    官网:http://struts.apache.org/download.cgi 官网下载地址点我 strutsstruts2,都有,大家在这下,这是官网下载    
  • 本文介绍了Struts2的起源,详细对比了Struts2和Struts1.x的差异,并穿插概述了Struts2框架和请求流程。本文详细介绍了Struts1.x和Struts2两者之间在Action方面、对 Servlet 的依赖方面、输入捕获方面和表达式语言等...
  • struts2必备jar包官方绿色版

    万次下载 热门讨论 2012-10-08 18:02:42
    struts2最新官网的jar包,已经是最少的包的无法再删除了, commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang3-3.1.jar commons-logging-1.1.1.jar freemarker-2.3.19.jar javassist-3.11.0.GA.jar ...
  • Struts2

    千次阅读 2015-03-07 13:26:47
    Struts框架拥有两个主要的版本,分别是Struts 1.x 和Struts 2.x 版本,它们都是遵循MVC思想的开源框架。 注意:Struts 2 框架并不是核心控制器核心控制器核心控制器Struts 1 的升级版,而是...一、Struts2 工作流程 1、
  • K8 Struts2 Exploit(Struts2综合漏洞利用工具)

    千次下载 热门讨论 2015-05-30 09:29:02
    Struts2漏洞检测工具 Struts2漏洞测试工具 K8 struts2 exploit Test Struts2 GetShell 目前已支持以下struts2漏洞编号 (S2-005 s2-009 s2-013 s2-016 s2-019 s2-020) [+] S2-020 CVE-2014-0094 支持GetShell (这洞...
  • struts2的核心和工作原理

    万次阅读 多人点赞 2014-05-30 16:49:59
    在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标  Struts设计的第一目标就是使MVC模式应用于web程序设计。在这儿MVC模式的好处就不在提了。 技术优势  Struts2...
  • Struts1和Struts2的区别和对比(完整版)

    万次阅读 多人点赞 2012-04-07 22:40:40
    struts2不是struts1的升级,而是继承的webwork的血统,它吸收了struts1和webwork的优势。 先看struts的Action官方注释(struts1.3.8源代码) /**  * An Action is an adapter between the contents of an  * ...
  • Struts2入门

    万次阅读 热门讨论 2007-10-07 21:03:00
    Struts2 简介 ++YONG原创,转载请注明1. Struts2的由来:Struts 1是全世界第一个发布的MVC框架,它由Craig McClanahan在2001年6月发布,该框架一经推出,就得到了世界上Java Web开发者的拥护,经过长达
  • Struts2项目实例

    千次阅读 2018-07-05 20:59:33
    Java web动态编程技术,经历了Model1和Model2时代。 Model1时代:整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应,用少量的JavaBean来处理数据库连接访问等操作。Model1...
  • Struts2 XML配置详解

    万次阅读 多人点赞 2010-04-08 01:43:00
    ;" onmouseup="function onmouseup(){NewHighlight(event)}"> 1. 深入Struts2的配置文件本部分主要介绍struts.xml的常用配置。1.1. 包配置:Struts2
  • Struts2基本配置

    千次阅读 2016-11-19 14:14:50
    访问HelloWorld应用的路径的设置HelloWorldAction文件:package ...import com.opensymphony.xwork2.ActionSupport;public class HelloWorldAction extends ActionSupport{ public String execute() throws Excep
  • SpringMVC与Struts2区别与比较总结

    万次阅读 多人点赞 2015-03-23 21:45:43
    1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的...
  • Struts2入门第一讲——Struts2框架的快速入门

    千次阅读 多人点赞 2017-03-26 00:56:48
    Struts2框架的概述Struts2是一种基于MVC模式的轻量级Web框架,它自问世以来,就受到了广大Web开发者的关注,并广泛应用于各种企业系统的开发中。目前掌握Struts2框架几乎成为Web开发者的必备技能之一。接下来将针对...
  • struts2的struts.xml文件的固定格式

    千次阅读 2016-04-12 15:29:08
    struts.xml文件头部的文件可以参看struts2-core-2.2.3.jar包中的 struts-default.xml 文件,这个文件规定了诸多struts2文档的基本设置
  • Struts1 和 Struts2

    万次阅读 多人点赞 2013-03-15 20:46:06
    关于Struts2的出现缘由和好处就不多说啦,看了几篇总结的不错的文章,整理下贴出来,共同学习了。 Action的区别 对于有着丰富的Struts1.x开发经验的朋友来说,都十分的清楚Action是整个Struts框架的核心内容,当然...
  • Struts2的结果类型

    千次阅读 2016-11-19 16:27:10
    每个 action 方法都将返回一个 String 类型的值, Struts 将根据这个值来决定响应什么结果. 每个 Action 声明都必须包含有数量足够多的 result 元素, 每个 result 元素分别对应着 action 方法的一个返回值. result ...
  • Struts2基础学习总结

    万次阅读 多人点赞 2017-02-01 21:45:08
    一、Struts2简介参考《JavaEE 轻量级框架应用与开发—S2SH》Struts框架是流行广泛的一个MVC开源实现,而Struts2是Struts框架的新一代产品,是将Struts1和WebWork两种技术进行兼容、合并的全新的MVC框架。Struts2框架...
  • Struts2-API+Struts2中文帮助文档

    热门讨论 2013-08-16 20:28:40
    Struts2-API+Struts2中文帮助文档。 API为英文格式,帮助文档记录了Struts2各大知识点的详细代码案例,不错的参考资料
  • Struts2的配置 struts.xml Action详解

    万次阅读 2017-04-01 17:36:43
    在学习struts的时候,我们一定要掌握struts2的工作原理。只有当我们明确了在struts2框架的内部架构的实现过程,在配置整个struts 的框架时,可以很好的进行逻辑上的配置。接下来我就先简单的讲解下struts2的框架...
  • Struts2核心技术 (一)

    万次阅读 多人点赞 2017-05-02 17:22:28
    struts2struts2发展历史 经过很多年发展,Struts1已经成为了高度成熟的框架,但随着时间的发展,Struts1的局限性和缺点不断的暴露出来。 现在Struts已经分化成了两个框架  -第一个是在Struts1的基础上,融合了...
  • struts2学习笔记

    万次阅读 多人点赞 2011-08-29 23:27:53
    struts2简介 struts2是在webwork2基础上发展而来的。和struts1一样,struts2也属于MVC框架。不过有一点需要注意的是:struts2struts2虽然名字很相似,但是在两者在代码编写风格上几乎是不一样的。那么既然有了...
  • Struts 2基础入门

    千次阅读 2017-05-22 16:59:38
    学习内容Ø Struts 2的优势Ø Strust 2体系结构Ø Struts 2运行流程能力目标Ø 熟悉Struts 2的体系结构和运行流程Ø 熟练使用MyEclipse进行Struts 2开发 本章简介前四章我们学习了Struts 1的相关知识,包括...

空空如也

1 2 3 4 5 ... 20
收藏数 356,793
精华内容 142,717
关键字:

struts