struts_struts2 - CSDN
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简介

    千次阅读 2020-01-01 21:03:03
    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。

    限于篇幅,未完待续。。

    展开全文
  • Struts2框架入门

    千次阅读 2016-10-01 12:10:13
    Struts2简介Struts2是在WebWork2基础上发展而来的。Struts2和Struts1一样,也都是属于MVC框架。不过有一点大家需要注意的是:虽然Struts2和Struts1在名字上差别不大,但Struts2应用的代码编写风格与Struts1几乎可以...

    Struts2简介

    Struts2是在WebWork2基础上发展而来的。Struts2和Struts1一样,也都是属于MVC框架。不过有一点大家需要注意的是:虽然Struts2和Struts1在名字上差别不大,但Struts2应用的代码编写风格与Struts1几乎可以说是不一样的。那么既然有了Struts1,为何还要推出Struts2呢?主要是因为Struts2有以下优点:

    • 在软件设计上,Struts2没有像Struts1那样跟Servlet API和Struts API有着紧密的耦合,Struts2的应用可以不依赖于Servlet API和Struts API。 Struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计。

      public class OrderListAction extends Action {
          public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request, HttpServletResponse rsponse) thows Exception {
              ...
          }
      }
    • Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。
    • Strut2提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型。在Struts1中,如果我们要实现同样的功能,就必须向Struts1的底层实现BeanUtil注册类型转换器才行。
    • Struts2提供支持多种表现层技术,如:JSP、freeMarker、Velocity等。
    • Struts2的输入校验可以对指定方法进行校验,解决了Struts1长久之痛。
    • 提供了全局范围、包范围和Action范围的国际化资源文件管理实现。

    搭建Struts2开发环境

    搭建Struts2环境时,我们一般需要以下几个步骤:

    • 找到开发Struts2应用需要使用到的jar文件。
    • 编写Struts2的配置文件
    • 在web.xml文件中加入Struts2 MVC框架启动配置。

    搭建Struts2开发环境——开发Struts2应用所依赖的jar

    到官网http://struts.apache.org/下载struts-2.x.x-all.zip,我本人所下载的是struts-2.3.24-all.zip,目前最新版为2.5.2。下载完后解压文件,开发Struts2应用需要依赖的jar文件在解压目录的lib文件夹下,不同的应用需要的Jar包是不同的。下面给出了开发Struts2程序最少需要的Jar。

    • struts2-core-2.x.x.jar:Struts2框架的核心类库。
    • xwork-core-2.x.x.jar:XWork类库,Struts2在其上构建。
    • ognl-3.x.x.jar:对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性。
    • freemarker-2.x.x.jar:Struts2的UI标签的模板使用FreeMarker编写。
    • commons-logging-1.1.x.jar:ASF出品的日志包,Struts2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。
    • commons-fileupload-1.3.1.jar:文件上传组件,2.1.6版本后需要加入此文件。

    但要开发一个Struts2应用程序,除了这些Jar包之外,还需要如下Jar包,否则就会报错。

    • commons-io-2.2.jar
    • commons-lang3-3.2.jar
    • javassist-3.11.0.GA.jar

    搭建Struts2开发环境——Struts2的配置文件

    Struts2默认的配置文件为struts.xml ,StrutsPrepareAndExecuteFilter过滤器在初始化时将会在WEB-INF/classes下寻找该文件,该文件的配置模版如下:

    <?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>
    
    </struts>

    当然了,我们还可以参考Struts2框架提供给我们开发人员的例子中的struts.xml配置文件,例如可在struts-2.3.24-all\struts-2.3.24\apps\struts2-blank\WEB-INF\classes目录下查找到struts.xml配置文件。

    搭建Struts2开发环境——Struts2的启动配置web.xml

    在Struts1.x中, Struts框架是通过Servlet启动的。在Struts2中,Struts框架是通过Filter启动的。Struts2框架在web.xml中的配置如下:

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <!-- 
            自从Struts2.1.3以后,下面的FilterDiapatcher已经标注为过时
            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> 
        -->
    </filter>
    
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    在StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。
    注意:Struts2读取到struts.xml的内容后,是将内容封装进javabean对象并存放在内存中,以后用户的每次请求处理将使用内存中的数据,而不是每次请求都读取struts.xml文件。Struts1也是一样的
    同理,初学者是不知道怎么向web.xml文件中加入Struts2 MVC框架的启动配置代码的,但我们依然可以参考Struts2框架提供给我们开发人员的例子中的web.xml文件。例如可在struts-2.3.24-all\struts-2.3.24\apps\struts2-blank\WEB-INF目录下查找到web.xml文件,看看别人是怎么写的。

    第一个Struts2应用

    这是我们的第一个Struts2框架的应用,所以要用点心了。我们先编写Struts2默认的配置文件(struts.xml)中的内容(StrutsPrepareAndExecuteFilter过滤器在初始化时将会在WEB-INF/classes下寻找该文件),如:

    <?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="itcast" namespace="/test" extends="struts-default">
            <action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="execute">
                <result name="success">/WEB-INF/page/hello.jsp</result>
            </action>
        </package> 
    </struts>

    下面我们就来详细解释一下这段代码:

    <package name="itcast" namespace="/test" extends="struts-default">
        <action name="helloworld" class="cn.itcast.action.HelloWorldAction">
            <result name="success">/WEB-INF/page/hello.jsp</result>
        </action>
    </package>

    上面这段代码也即在struts.xml文件中配置包。在Struts2框架中使用包来管理Action,包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的Action。在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。
    配置包时必须指定name属性,该name属性值可以任意取名,但在整个项目中必须唯一,它不对应java类,如果其他包要继承该包,必须通过该属性进行引用。
    包的namespace属性用于定义该包的命名空间。命名空间作为访问该包下Action的路径的一部分,该属性可以不配置,对本例而言,如果不指定该属性,默认的命名空间为“”(空字符串)。命名空间对于Struts2来说有减少重复代码的作用。例如,Struts1的配置代码有可能是这样的:

    <action path="/control/center/main" forward="/WEB-INF/page/controlcenter/default.jsp">
    <action path="/control/center/top" forward="/WEB-INF/page/controlcenter/top.jsp">
    <action path="/control/center/left" forward="/WEB-INF/page/controlcenter/menu.jsp">

    这样就会有很多重复的代码,而是使用Struts2的命名空间属性就可减少重复的代码,Struts2的配置代码:

    <package name="itcast" namespace="/control/center" extends="struts-default">
        <action name="main" class="...." method="execute">
            <result name="success">/WEB-INF/page/controlcenter/default.jsp</result>
        </action>
        <action name="top" class="...." method="execute">
            <result name="success">/WEB-INF/page/controlcenter/top.jsp</result>
        </action>
    </package> 

    通常每个包都应该继承struts-default包, struts-default包是由Struts2内置的,它定义了Struts2内部的众多拦截器和Result类型。Struts2很多核心的功能都是通过这些内置的拦截器实现的。如:从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。当包继承了struts-default包才能使用Struts2提供的这些功能。 struts-default包是在struts2-core-2.x.x.jar文件中的struts-default.xml中定义的。struts-default.xml也是Struts2默认配置文件。 Struts2每次都会自动加载struts-default.xml文件。
    提示:在碰到编写Struts2默认的配置文件(struts.xml)中的内容时,标签无提示符这个问题时可参考我的笔记在编写Struts2框架的配置文件时,标签无提示符的解决办法
    接下来,我们就要在cn.itcast.action包中创建Action——HelloWorldAction了。

    public class HelloWorldAction {
    
        private String msg;
    
        public String getMessage() {
            return msg;
        }
    
        public String execute() {
            this.msg = "我的第一个struts2应用";
            return "success";
        }
    
    }

    最后,在WEB-INF/page/目录下创建一个jsp页面——hello.jsp,用于显示内容。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>第一个struts2应用</title>
    </head>
    <body>
        ${message }<br/>
    </body>
    </html>

    提示:

    • 可以使用EL表达式访问Action中的属性。
    • 在jsp中使用HelloWorldAcion.java中的属性时,应使用用${message }。注意,此处是message,而不是msg,因为此处内部原理用到的是反射技术

    这样,当在浏览器中输入URL地址,如http://localhost:8080/Struts2/test/helloworld.actionhttp://localhost:8080/Struts2/test/helloworld时,就会看到这样的结果:
    这里写图片描述

    展开全文
  • Struts1自学教程

    万人学习 2019-06-26 11:47:10
    Struts1是Struts2学习的基础,懂了Struts1,学习Struts2会变得很轻松。很多遗留系统,需要维护,也需要我们懂点Struts1的知识。本次课程为14个学时,将从Struts1.x的环境搭建以及技术准备入手,利用Struts1.x实现...
  • struts2中%{}与${}与#区别

    千次阅读 2017-04-21 13:21:59
    struts中符号的使用比较灵活,尤其是“%”、“#”、“$”这三个符号的使用。由于$广泛应用于EL中,这里重点写%和#符号的用法。 1、“#”符号有三种用途: (1)、访问非根对象(struts中值栈为根对象),OGNL在...
  • Struts2 入门学习总结一

    万次阅读 多人点赞 2018-09-16 22:54:25
    一、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层用来显示界面...
  • Struts2学习总结

    万次阅读 2019-04-01 20:30:26
    Struts2轻量级的MVC框架,主要解决了请求分发的问题,重心在控制层和表现层。低侵入性,与业务代码的耦合度很低。Struts2实现了MVC,并提供了一系列API,采用模式化方式简化业务开发过程。 1、运行在web层.负责...
  • Struts旅程(一)Struts简介和原理

    万次阅读 多人点赞 2014-02-10 08:02:29
    struts简介 Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用JavaServlet/JSP技术,实现了基于JavaEEWeb应用的MVC设计模式的...
  • 本文介绍了Struts2的起源,详细对比了Struts2和Struts1.x的差异,并穿插概述了Struts2框架和请求流程。本文详细介绍了Struts1.x和Struts2两者之间在Action方面、对 Servlet 的依赖方面、输入捕获方面和表达式语言等...
  • Struts1项目转成Struts2项目步奏

    万次阅读 2014-06-18 23:05:13
    注意:要转成Struts2必须对struts2的配置以及流程要了解,不了解的话我只能说还是去了解struts2后再转成struts2吧。 1、先备份一份,不要没转成功项目搞蹦了都回不来了。 2、导入Struts2核心包以及其他依赖包...
  • 如果您使用的是struts2版本2.5,则需要从org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter更改为org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter在我的struts2-core-...
  • Eclipse搭建Struts2 环境

    万次阅读 2017-03-27 20:32:06
    下载Struts2 解压 struts-2.3.32\apps\struts2-blank.war文件,其实这就是一个空的struts2项目... 创建项目... 导入jar包... 配置WEB-INF\web.xml... 配置struts.xml... 运行... Eclipse搭建Struts2成功
  • 这个文件用来配置Struts2系统的一些基本规约,所有在struts.properties中配置的内容都可以在struts.xml中配置,或者web.xml中在struts2 filter中配置,例如:Struts.properties中的如下配置:st
  • struts.xml的加载路径及配置问题

    万次阅读 2014-02-13 19:51:22
    本人在配置在使用struts2整合spring时,把配置文件struts.xml放在WEB-IN下时,出现请求无效,当把struts.xml放在src下时有正常了, struts.xml一般不是放在WEB-IN下的吗?为什么会出现这种现象? 可是用struts1.x的...
  • 关于struts2讲解的非常细致一本书!

    千次阅读 2017-02-10 16:36:26
    1.1 《研磨struts2》 第一章 Struts2概述 之 MVC模式1.2 《研磨struts2》 第一章 Struts2概述 之 Struts2基础1.3 《研磨struts2》 第一章 Struts2概述 之 Struts2和MVC1.4 《研磨struts2》 第二章 Struts2的Hello...
  • SpringMVC与Struts2的主要区别

    万次阅读 多人点赞 2018-01-13 12:24:35
    区别1:Struts2 的核心是基于一个Filter即StrutsPreparedAndExcuteFilter SpringMvc的核心是基于一个Servlet即DispatcherServlet(前端控制器)区别2:Struts2是基于类开发的,传递的参数是通过类的属性传递(属性驱动...
  • SpringMVC与Struts2区别与比较总结

    万次阅读 多人点赞 2015-03-23 22:47:46
    1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的...
  • 1.java.lang.RuntimeException: Unable to load bean com.opensymphony.xwork2.conversion.ObjectTypeDeterminer (notiger) - ...解决办法 去掉struts配置文件中的 <constant name="struts.objectTypeDeterm...
1 2 3 4 5 ... 20
收藏数 344,086
精华内容 137,634
关键字:

struts