资讯专栏INFORMATION COLUMN

Struts2配置文件

jifei / 2252人阅读

摘要:执行中的方法,默认执行方法返回结果同样会通过一系列拦截器,然后由指定的表现形式返回,比如,或字面值配置文件利用配置文件初始化一系列的相关资源,这个底层实现技术属于依赖注入。会通过配置文件初始化的资源包括拦截器,类及。

1.Struts2简介

框架是一组程序的集合,包含了一系列的最佳实践,作用是解决某个领域的问题。本质上来讲,框架只是一个jar包,其本质上是对jdk的扩展。

最佳实践:

始终保证程序的可读性、可维护性和可扩展性

Simple is Beauty

尽可能使用面向对象的观点进行编程

减少依赖,消除耦合

struts2是一个mvc框架,提供了Controller和View模块,可以结合其他技术提供Model。Struts2非常容易扩展,框架提供的每个类是依赖于接口。如果有需要,非常容易添加适合自己的类和应用。

1.1.Struts2简单运行图

将上面的框架图进行简单的抽象,可得到下面简单的运行示意流图。

外部发送request请求

Filter Dispatcher检查这个request,然后确定相应的Action

Interceptor(拦截器)相应的进行运用功能,例如workflow,数据验证,文件上传等。

执行Action中的方法,默认执行execute方法

返回结果同样会通过一系列拦截器,然后由指定的表现形式返回,比如HTML,jsp或字面值

2.配置文件

struts利用xml配置文件初始化一系列的相关资源,这个底层实现技术属于依赖注入。会通过xml配置文件初始化的资源包括:拦截器Interceptor,Action类及Results。

2.1 管理元素 2.1.1 Bean配置

bean元素有一个必须的属性class,定义了某个Java class被创建或调用。
bean的功能:
1.对象注入:可以通过框架的container创建,然后注入到内部框架对象里,一般伴随着type属性,告诉container这个对象实现implement了某个接口。
2.值注入:拥有value被注入到自身的静态方法中,好让不创建对象的容器接受框架参数。对象使用值注入必须要定义静态方法。

属性 必需 描述
class yes bean class的名称
type no class实现的主要的java接口
name no bean的唯一名字, 与其他bean独立
scope no bean的范围,必许是【default、singleton、request、Session、thread】中一个
static no 是否注入static方法,当type指定后一定为false
optional no bean是否是强制可选的

示例


 

      
       
      ... 

 
2.1.2 Constant常量配置

constant通过定义关键的设置,提供一个简单的方式去修改框架或定义行为,来达到定制struts。
constant有两个主要功能点:
1.用来重载设置,例如上传文件的最大值,struts是否在“devMode”等。
2.指定哪一个bean去实现。
constant可以在多个文件中定义,默认的搜索顺序如下:
1.struts-default.xml
2.struts-plugin.xml
3.struts.xml
4.struts.properties
5.web.xml
如果后面某个值已被定义,则前面的值会被覆盖。

属性 必需 描述
value yes contant的值
name yes contatn的名字
    Constant Example (struts.xml)

 
  
 
  ... 
 

在 struts.properties文件中,每一条实例都会被初始化成constant。

  Constant Example (struts.properties)
struts.devMode = true

在web.xml中,FilterDispatcher的初始化参数会被当做constant载入。

  
 
    
        struts
        org.apache.struts2.dispatcher.FilterDispatcher
        
            struts.devMode
            true
        
    
 
    ...
 
2.1.3 packages配置

packages是一种把action,result,result types,Interceptor和Interceptor stack分成一个逻辑配置单元,非常类似于对象,可以被extend,并被重写。
Packages有一个必须的属性name,对之后引用这个package是非常关键的。

  
       
            
        /empmanager/listEmployees.jsp    
                   
            employees        
          
       

2.1.4 namespace配置

namespace避免action的名字冲突,将action的配置在细分成逻辑模块,每个都有特点的前缀。默认的namespace为“”,而root namespace为“/”。namespace的工作方式:

/a/b/c.action
先在b下搜索c.action,若b中没有,则回退到a下搜索,若a还没有,继续向上回退。但回退只是单向性,不能向a、或b的兄弟目录进行搜索。

2.1.5 include配置

为了防止struts.xml配置文件过大,可以进行拆分成多个子文件,每个都必须和struts.xml报错相同的格式,包括DOCTYPE,然后利用include引用起来。

2.2 请求处理元素 2.2.1 Interceptor Configuration

interceptor 允许开发者自定义代码,然后可以在action方法执行前或执行后运行。拦截器是非常强大的工具,可以用来验证数据,属性封装,安全处理,log及在运行时剖析代码使用。
interceptor是由java class实现的,所以每个interceptor都有相应的class name,为了使用方便,每个interceptor拥有一个简单的唯一的名字,如果多个interceptor放在一起,可以使用stack。


  
  
    
    
  

多数应用可以定义默认的interceptor stack,如下:

对于每个action也可以定义自己的stack,但是默认的interceptor就无法启用,所以一般讲struts-default.xml中默认的interceptor stack添加到自定义的interceptor中。


    ...
    
2.2.2 action配置

action映像是struts框架的最基本的工作单位,本质上讲,action关联了一个标识符和一个handle class。当request匹配action name的时候,框架会使利用mapping来决定如何处理这个请求。在action mapping中,可以包含一系列exception处理,一个拦截器栈,一系列result types等,但是只有name是必须的,其他都可以在package的范围内提供。
如果需要访问时指定action name的后缀名,则需要在struts.xml文件中配置

    

默认的处理方法在Action接口中被定义

    //Action interface
    public interface Action {
        public String execute() throws Exception;
    }

但是实现Action接口是可选的,如果Action中没有实现execute,框架会通过反射也寻找一个execute方法。除此之外,可以通过配置文件的method,指定Action中的方法。

 

如果既没有execute 也没有其他指定的方法,框架会抛出异常。

拦截器与过滤器:
1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。
2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
5、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65725.html

相关文章

  • Struts2开发流程

    摘要:的开发流程在文件中定义核心拦截用户请求。的最大作用是配置和请求之间的对应关系,并配置逻辑视图名和物理视图资源之间的相对关系,即返回结果和文件的物理位置的关系。实现为了使开发的更规范,提供了一个接口,定义了的处理应该实现的规范。 1.struts2的开发流程 在web.xml文件中定义核心Filter拦截用户请求。 struts2 org.apa...

    Leo_chen 评论0 收藏0
  • Struts2【UI标签、数据回显、资源国际化】

    摘要:值得注意的是的值是文件的全名也就是说,如果有包,就把包名写上并且,不需要写上后缀标签使用国际化的值是配置文件中配置的信息,写上就行了登陆测试注意,已经替换成了中文了如果文章有错的地方欢迎指正,大家互相交流。 Struts2UI标签 Sturts2为了简化我们的开发,也为我们提供了UI标签...也就是显示页面的标签..... 但是呢,Struts2是服务端的框架,因此使用页面的标签是需要...

    graf 评论0 收藏0
  • 创建一个Struts2项目maven 方式

    摘要:创建一个项目使用创建项目右键选择那一项是项目组织唯一的标识符,实际对应的包的结构,是目录里的目录结构。一般就是填这样子。 创建一个Struts2项目maven 使用eclipse 创建maven项目(webapp) 右键 new>othrer showImg(https://segmentfault.com/img/bVP83f?w=628&h=297); next showImg(h...

    2i18ns 评论0 收藏0
  • 面试题:SpringMVC和Struts2的区别

    摘要:的入口是,而是这里要指出,和是不同的。以前认为是的一种特殊,这就导致了二者的机制不同,这里就牵涉到和的区别了。开发效率和性能高于。的实现机制有以自己的机制,用的是独立的方式。 1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC...

    isaced 评论0 收藏0
  • Struts2与Spring整合

    摘要:前言本博文主要讲解怎么与框架整合和的整合关键点对象交给来创建搭建环境进入包引入文件引入相关文件相关文件支持包源码源码写配置文件路径与映射配置容器配置核心过滤器引入功能初始化的容器查看的文件文件除了要配置的分配器,还要加载的配置 前言 本博文主要讲解Spring怎么与Struts2框架整合... Struts2和Spring的整合关键点: action对象交给Spring来创建 搭建环境...

    lvzishen 评论0 收藏0
  • SSH(Struts2+Hibernate+Spring)开发策略

    摘要:首先是应该了解框架技术的运行流程在此我给大家介绍一种常见的开发模式,这对于初学者来说应该也是比较好理解的。 很多小伙伴可能一听到框架两个字就会马上摇头,脑子里立刻闪现一个词---拒绝,其实我也不例外,但我想告诉大家的是,当你真正掌握它时,你会发现**SSH**用起来是那么顺手,因为它对于开发web应用真的很方便,下面就我个人经验和大伙儿谈谈如何利用**SSH框架技术**来进行*w...

    reclay 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<