一,框架的扩展名问题:
,struts2框架的默认扩展名:.action和空字符串。在框架的属性文件default.properties中进行默认配置:struts.action.extension=action,, ,如何覆盖框架的默认扩展名:
a,在struts.xml文件中增加常量标签(推荐使用)
<!--声明常量 -->
<!--覆盖框架默认扩展名 -->
<constantname="struts.action.extension"value="action,,do"></constant> b,在自定义属性文件中struts.properties中设置(只要在默认的default.properties中设置,都可以通过这种方式覆盖)
struts.action.extension=action,,do c,在web.xml文件中进行设置:
<!--配置框架的核心调度器,设置了初始化参数 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.action.extension</param-name>
<param-value>action,,do</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> 注意:如果以上三种情况同时存在,那么过滤器设置起作用。如果过滤器参数设置不存在,那么属性文件(struts.properties)设置起作用。这和我们源码初始化这些文件的先后顺序有关。而我们推荐是在struts.xml文件中进行设计的。所以下边类似的,我只是演示在struts.xml文件中的设计方式。 二,框架的字符编码问题: 1,框架默认的字符编码是:UTF-8,也是在default.properties中设置的:struts.i18n.encoding=UTF-8 2,覆盖框架的默认字符编码:
在struts.xml文件中进行常量配置,当然在struts.properties文件中和过滤器设置初始化参数也可以,这里不再演示。
<!-- 覆盖框架的默认字符编码 -->
<constantname="struts.i18n.encoding"value="GB18030"></constant> 三,框架的开发模式:
在开发中xml文件我们会经常修改,但是我们又不想每次修改就进行服务器的重启部署等,所以我们可以在开发过程中将框架的默认设置为开发模式,有利于我们开发的效率的提高。当然注意在我们完成以后上线的时候还需要改回默认的。防止不必要的麻烦发生。 1,对于struts.xml文件的修改不需要进行服务器重启,可以在其内进行这样设置,覆盖默认的:
<!--设置框架重新加载配置文件的标识 -->
<constantname="struts.configuration.xml.reload"value="true"></constant> 2,当然我们想的还有属性文件等,这需要我们设置为开发模式(更常用):
增加常量标签,进行开发模式设置,这里设置以后就会将上边的设置进行覆盖,所以设置这一个就够了:
<!--设置开发模式 -->
<constantname="struts.devMode" value="true"></constant> 四,框架命名空间的问题: 1,简述:命名空间namespace其实是<package>标签的一个属性,用来对action请求的路径进行管理。所谓的包<package>表示对Action配置的管理。包名是应该具有唯一性的标识,不能存在相同的两个包名。命名空间正常来讲不应该存在相同的名称,如果两个命名空间名称相同,而且存在相同的action名称,那么后面配置的action会起作用。 2,访问action对象时,请求路径的格式为:命名空间 + "/" + Action的name属性值。
但是用户也可以在发送时,添加额外的路径:例如:命名空间 + "/"额外路径 + "/"+ Action的name属性值,这样框架任然可以访问到的,这和框架的解析路径方法有关,算是个缺陷吧,但是框架也进行相关补充,可以弥补。 3,如何限制用户的非法路径:
<!--限制请求的命名空间必须符合规则 -->
<constantname="struts.mapper.alwaysSelectFullNamespace"value="true"></constant> 五,框架的action问题: 1,根据解析请求路径,获取action的名称,到配置文件中查找到action的完整类名,反射创建。
Action类设置要求:必须提供public的无参数的构造方法。Action对象是每次请求都创建一个新的实例,所以action是多例的,它解决的线程安全问题。(但是性能不高)这些都是基于框架的源码的设置。 六,框架中方法的编写:
1,默认方法: 框架调用Action的方法,默认方法名称为execute
默认方法execute的命名规则:
必须是public
必须返回类型是String
必须名称叫做execute
必须是无参数的 2,如果希望不使用默认的execute方法名称,那么也可以自定义方法名称,但是自定义方法名称的声明规则必需与execute方法声明规则一致。请求自定义方法的方法: a,通过感叹号的方式指定被调用的方法名称。这种调用方法的方式叫做动态方法调用,例如:uri = /user/login!login.action. 对于动态方法调用可以动态的调用到Action中的任意方法,但是并不是一定有效,而且开发方式属于紧耦合开发。所以这种方式不推荐使用。 b,如何禁止动态方法调用,禁止以后如何指定呢?
<!--禁止感叹号的动态方法调用 -->
<constantname="struts.enable.DynamicMethodInvocation"value="false"></constant> <!--设置method方法即可-->
<action name="login"class="com.bjpowernode.struts2.action.LoginAction"method="login">
<resultname="success">/success.jsp</result>
<resultname="login">/login.jsp</result>
</action> c,如果一个类有好多方法,我们如何才能简化配置呢?通过通配符的方式进行简化配置:{1}表示匹配第一个*,只要我们传过来的是方法的名字即可。但是通配符的使用要慎重,不要弄出漏洞,防止不法分子的巧弄URI进行破解。
<action name="*" class="com.bjpowernode.struts2.action.LoginAction"method="{1}">
<resultname="success">/success.jsp</result>
<resultname="login">/login.jsp</result>
</action> 当然了,还有很多在struts.xml配置的属性,这里我仅仅是列出了一些常用的,经常需要我们配置的。我们只要抓住这个原理,知道原来框架在那配置的,指定的key是什么,如何解析的,就非常简单了。当然了很多一部分是在default.properties属性文件中进行的配置,我们需要重点掌握。 其实框架都是人设计的,我们只要按照正常人的思维去思考问题,基本上和框架实现的是差不多的。例如,你设计框架肯定会有默认的编码设置,当然你不会写死,会给开发人员覆盖的机会。当然很多配置,我们都在固定的文件中,利用固定的方法进行修改,这是非常符合常规的。所以了解了框架的原理,还是非常简单的。总结中……

Struts 2(二)的更多相关文章

  1. Struts笔记二:栈值的内存区域及标签和拦截器

    值栈和ognl表达式 1.只要是一个MVC框架,必须解决数据的存和取的问题 2.struts2利用值栈来存数据,所以值栈是一个存储数据的内存结构 1.  ValueStack是一个接口,在struts ...

  2. struts(二)——struts框架实现的基本原理

    上一篇文章,我们介绍了MVC框架的基本原理,并指出了这个基本框架中存在大量if…else的问题.今天我们来介绍一下struts框架,让struts解决这个问题. 首先,看一下粗略的时序图: Actio ...

  3. Struts(十二):异常处理:exception-mapping元素

    配置当前action的声明异常处理 1.exception-mapping元素中有2个属性 exception:指定需要捕获的异常类型 result:指定一个响应结果,该结果将在捕获到异常时被执行.即 ...

  4. 如何下载struts 2及其各个包的作用

    一.http://archive.apache.org/dist/struts/library/ 二. struts官网: http://struts.apache.org/ 进入主页后点击" ...

  5. Struts框架笔记04_拦截器_标签库

    目录 1. Struts2的拦截器 1.1 拦截器概述 1.2 拦截器的实现原理 1.3 Struts的执行流程 1.4 拦截器入门 1.4.1 环境搭建 1.4.2 编写拦截器 1.4.3 配置拦截 ...

  6. Struts+Hibernate+Spring面试题合集及答案

    Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 2 ...

  7. Struts+Hibernate+Spring面试题合集及答案(转)

    Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring 面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 ...

  8. SSH框架简化(struts2+spring+hibernate)

    目的: 通过对ssh框架有了基础性的学习,本文主要是使用注解的方式来简化ssh框架的代码编写. 注意事项: 1.运行环境:Windows 8-64位,Eclipse(开发工具),jdk1.8.0_91 ...

  9. java SSH框架详解(面试和学习都是最好的收藏资料)

    Java—SSH(MVC)1. 谈谈你mvc的理解MVC是Model—View—Controler的简称.即模型—视图—控制器.MVC是一种设计模式,它强制性的把应用程序的输入.处理和输出分开.MVC ...

随机推荐

  1. java命令--jstack 工具 查看JVM堆栈信息

    介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项" ...

  2. Windows + VS2013 + Dlib

    Dlib是一个机器学习的C++库,包含了许多机器学习常用的算法, 而且文档和例子都非常详细. 安装有点类似于opencv,这里我从官网下载dlib-18.17到D盘 1. cmake转VS工程 这里使 ...

  3. Hadoop和Apache Spark的异同

    谈到大数据,相信大家对Hadoop和Apache Spark这两个名字并不陌生.但我们往往对它们的理解只是提留在字面上,并没有对它们进行深入的思考,下面不妨跟我一块看下它们究竟有什么异同. 1.解决问 ...

  4. shell信号捕捉命令 trap

    trap 命令 tarp命令用于在接收到指定信号后要执行的动作,通常用途是在shell脚本被中断时完成清理工作.例如: 脚本在执行时按下CTRL+c时,将显示"program exit... ...

  5. linux使用find和crontab命令定期清理过期文件

    crontab 命令 crontab 命令是 Linux 中用来设定重复执行命令或脚本的工具.它能够在指定的时间段内,按照需求以某一时间间隔执行命令或脚本. crontab 的基本用法 crontab ...

  6. C#基础篇八构造函数和面向对象思想

    3.关于 对象创建的几个关键词 Dog d1 = new Dog(); Dog d1 叫做 声明变量 new Dog() 叫做 实例化(创建)对象 4.关于对象.方法和 this 的关系 Dog d1 ...

  7. MyCAT 源码解析 —— 分片结果合并(使用unsaferow)

    1. 概述 2. 多分片执行 SQL 3. 合并多分片结果 3.1 记录头(header) 3.2 记录行(row) 3.1 AbstractDataNodeMerge 3.2 DataNodeMer ...

  8. 玩转mongodb(八):分布式计算--MapReduce

    MongoDB提供了MapReduce的聚合工具来实现任意复杂的逻辑,它非常强大,非常灵活.MapReduce使用JavaScript作为“查询语言”,能够在多台服务器之间并行执行.它会将一个大问题拆 ...

  9. offsetTop、offsetLeft、offsetWidth、offsetHeight的用法

    假设 obj 为某个 HTML 控件. obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上侧位置,整型,单位像素. obj.offsetLeft ...

  10. ASP.NET MVC5+EF6+LayUI实战教程,通用后台管理系统框架(6)- 创建数据库

    前言 其实网站就是一座连接用户和数据库的梁桥,数据库通过网站,将信息以不同的方式,展现给客户,客户通过网站,对数据库进行各种操作 下面,我们用一个例子,给大家展示下基本的增删改查操作 创建数据库 创建 ...