strcut2学习

在struts2里实现国际化,完成登录页面的国际化(英文和中文) 在struts2里实现国际化,完成登录页面的国际化(英文和中文)。 立即下载

加载struts.xml过程


说明:

  1. 1在启动的时候加载了三个配置文件 struts-default.xml、struts-plugin.xml、struts.xml
  2. 如果这三个文件有相同的项,后面覆盖前面的。
  3. struts.xml文件必须放在src下才能找到。

结果类型

说明

  • 每个action方法都返回一个String类型的值,struts一次请求返回什么值是由这个值确定的。
  • 在配置文件中,每一个action元素的配置都必须有result元素,每一个result对应一个action的返回值。
  • Result有两个属性:
    • name:结果的名字,和action中的返回值一样,默认值为success;
    • type:响应结果类型,默认值为dispatcher.

类型列表

在struts-default.xml文件中,如下面所示:


说明:

  • 从上述可以看出总共10种类型
  • 默认类型为ServletDispatcherResult即转发。
  • 结果类型可以是这10种结果类型的任意一种。

Dispartcher类型

Dispatcher类型是最常用的结果类型,也是struts框架默认的结果类型。



Redirect类型

Redirect属于重定向。如果用redirect类型,则在reuqest作用域的值不能传递到前台。


RedirectAction类型



    struts2中的action,只要访问一次就要实例化一个对象。这样就不存在线程安全的问题。这也是struts2框架的一个好处。


Struts2与serlvet接口

    通过前面的练习大家都知道,在action的方法中与servlet的所有的API是没有任何关系的。所以在struts2中做到了aciton与serlvet的松耦合,这点是非常强大的。但是如果没有HttpServletRequest,HttpServletSession,ServletContext有些功能是没有办法完成的。比如购物车程序,需要把购买的物品放入session中。所以就得找一些路径使得在struts2中和serlvet的API相结合。


拦截器

在struts2中,用拦截器(interceptor)完美的实现了这一需求。在struts2中,

内置了很多拦截器,在struts-default.xml文件中可以看出。用户还可以自定义自己的拦截器。自定义拦截器需要以下几点:

1、 在配置文件中:

   包括两个部分:声明拦截器栈和使用拦截器栈


2、 在拦截器类中

一个类如果是拦截器,必须实现Interceptor接口。


国际化

一个系统的国际化就是根据操作系统的语言,页面上的表现形式发生相应的变化。比如如果操作系统是英文,页面的文字应该用英语,如果操作系统是中文,页面的语言应该是中文。

  1. 建立资源文件
    1. 资源文件的命名规则:
      默认的命名为:
      文件名前缀.properties
      根据语言的命名为:
      文件名前缀.语言种类.properties
      例如:
      中文:
      resource_zh_CN.properties
      内容:
      item.username=用户名
      item.password=密码
      英文:
      resource_en_US.properties
      内容:
      item.username=username_en
      item.password=password_en
      默认:
      resource.properties
      内容:
      item.username=username
      item.password=password
  2. 配置文件
    1. 需要在配置文件中加入:
    2. 说明:
      1、这样struts2就会去找你写的资源文件
      2、name的值可以在org/apache/struts2/default.properties中找到。
      3、如果放置的资源文件在src下,则value的值可以直接写,如果在包中则可以写成包名.resource。
      4、在这里resource是个基名,也就是说可以加载以resource开头的文件。
  3. 页面
    1. 利用<s:text name=”item.username”/>就可以把资源文件中的内容输出来。


    2. 说明:
      1、标红色部分的是要从资源文件中找的内容。item.username和item.password代码key的值。
      2、也可以利用%{getText('item.username')}方式来获取资源。采取的是OGNL表达式的方式。
      3、getText的来源:
      从源代码可以看出ActionSupport实现了TextProvider接口。
      Provides access to {@link ResourceBundle}s and their underlying text messages.意思是说提供了访问资源文件的入口。而TextProvider中提供了getText方法,根据key可以得到value。
  4. action
    1. 可以利用ActionSupport中的getText()方法获取资源文件的value值。


属性驱动

在servlet中获取页面传递过来的数据的方式是:request.getParameter(“username”);这个代码可以获取到页面的username的数据。在action中可以通过属性驱动的方式来获取页面的值。


上面时jsp代码,下面时action,嫌麻烦就放一块了

说明:

  1. 页面中name的属性和action中的属性必须保持一致。
  2. Action中的属性必须有get和set方法。
  3. 满足这两个条件就实现了属性驱动。

原理:

如果属性中要求接受的不是String类型,而是其他类型呢?struts2将做自动的转化。

类型转化

问题

通过属性驱动可以得出,只要在action中有age和name属性,有set和get方法就能得到页面上age和name的值。如果action中是日期类型呢?

在struts2中可以自动隐式得到转化。比如在struts2中可以把字符串类型转化为日期类型。但是必须要求是yyyy-mm-dd的格式。其他格式转换不了。

如果页面上传过来的是yyyyMMdd,应该怎么办呢?类型转化将解决这个问题。


DateConverter类


说明:

1、 这个类必须继承DefaultTypeConverter或者实现TypeConverter接口。

2、 在TypeConverter接口中,声明的方法是这样的:


可以看出里面实际上有六个参数。但是这个类中,只有三个参数。

在DefaultTypeConverter类中:



可以看出在实现了converValue的方法中调用了convertValue有三个参数的方法,所以能够执行。这样做的好处是程序员即可以用三个参数的方法,也可以用6个参数的方法。

3、  在convertType方法中:

value为从页面上传递过来的值

toType为转换以后的类型

properties文件

做了前面的事情后,DateConverter类仅仅是一般的类,struts2框架不能把这个类看作为数据结构的转换类。所以需要把DateConverter类用配置文件进行注册。

注意事项:

1、 这个文件必须和相应的action类放在同一个目录下。

2、 文件的名称为:类名-conversion.properties。

3、 配置文件中的内容为:

       action中的属性名称=DateConverter全名

4、 在执行的时候,一定要让浏览器的环境是中文的执行环境。在默认情况下,yyyy-MM-dd只有在中文的浏览器环境下才能识别,如果是英文识别不了。

可以参照XWorkBasicConverter这个类说明问题。

全局properties文件

除了上述做法,还可以考虑全局的配置文件

步骤:

1、 在src下新建一个properties文件,为xwork-conversion.properties。

2、 在文件中键值对是这样的:

java.util.Date= struts2.action.converter.DateConverter

这样配置,只要是java.util.Date类型都会通过DateConverter这个类进行转化。适合于所有的action中的属性。


模型驱动

假设你正在完成一个网站的注册功能。在后台需要得到20多个属性,才能完成注册。如果用action中的属性获取值,就是这样的情况:

1、 在action中会写20个属性

2、 这20个属性添加set和get方法。

这样会导致action中的代码结构不是很好。模型驱动很好的解决了这个问题。



红外热成像仪原理及应用 目录什么是红外热成像背景介绍热成像技术原理热成像分类红外热成像和夜视仪之间的区别红外热像仪夜视仪红外照明相机对比红外热像仪都能看透什么如何选择制冷型和非制冷型红外热像仪制冷型红外热像仪非制冷型红外热像仪实例对比成像速度空间分辨率灵敏度光谱滤波同步何如选择合适的红外热像仪像素测温范围和被测物温度分辨率空间分辨率温度稳定性热像仪的距离系数比常见热成像仪关键参数量程视场角 (FOV)红外分辨率热灵敏度(NETD)焦距光谱范围精度内置优化分析NTED(热灵敏度)什么是NETD如何测量NETD?NETD如何影响测量? 阅读详情

相关推荐

Silvaco TCAD | 从PIN到APD:高性能光电探测器的仿真设计与优化

本文详细介绍了使用Silvaco TCAD进行光电探测器仿真设计与优化的全过程,从基础的PIN结构到高性能APD的实现。通过实战案例和代码示例,展示了如何优化器件参数、实现雪崩效应以及进行高级仿真分析,帮助工程师提升光电探测器的量子效率和响应速度。

weixin_29218509的博客 426

xwork-conversion.properties作用

1.有的项目在str目录下,有这样一个文件xwork-conversion.properties,打开文件呢?只有一句话:java.util.Date = com.ltx.shtoone.util.DateConverter;请注意java.util.Date,这个是什么呢?这个是java内部的一个日期包,而它却被com.ltx.shtoone.util.DateConverter赋值了。而且玩味

那一刻,那一夜,那一月,那一年,那一世 4809

Windows下用Python调用科大讯飞语音唤醒SDK的避坑指南(附完整代码)

本文详细介绍了在Windows平台使用Python调用科大讯飞语音唤醒SDK的全流程,包括环境配置、核心代码实现、典型问题解决方案及进阶开发技巧。通过完整的代码示例和避坑指南,帮助开发者快速集成语音唤醒功能,提升开发效率。

u0v1w2x3的博客 405

Struts2知识点二:类型转换器

前言 在上一节中,我们主要讲述了struts2的概念,以及如何配置基本的sturts2,本节课中,我们将会介绍一下struts2的一个重要内容:类型转换器。 介绍 Struts2的类型转换是基于ojnl和xwork这俩个框架的,只要我们把HTML输入项(表单元素和其他GET/POET的参数)命名为合法的OGNL表达式,就可以充分利用Struts2的转换机制。然而实际开发过程中,由于实际的要求...

走在成功的路上 309

anaconda安装-超详细版

文章目录一、anaconda安装1.1 anaconda安装地址1.2 安装详细步骤检验安装是否成功更改conda源(后续安装第三方库可以加快速度) 一、anaconda安装 Anaconda 是一个用于科学计算的 Python 发行版,支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的 Python 包。装anaconda,就不需要单独装python了。 anaconda优点: 1、anaconda里面集成了很多关于python科学计算的第三方库,主要是安装方便,而p

in546的博客 25万+

Diffix3D+复现

上下载模型,将其放在一个目录中,并将目录名填在demo代码中from_pretrained的cache_dir参数里。目录结构应该是"<PATH>/nvidia/difix/…给的requirements文件中pytorch和xformers的版本没有指定,这里测试过以下版本,可以成功运行。将readme中的demo代码新建一个python脚本复制进去,然后将脚本放在src目录中运行。如果遇到网络问题无法加载huggingface上的预训练模型,可以手动从。如果出现,以下错误重新。

NeverMakeIt的博客 1085

Struct2相关

加载struts.xml过程 说明: 1在启动的时候加载了三个配置文件struts-default.xml、struts-plugin.xml、struts.xml 如果这三个文件有相同的项,后面覆盖前面的。 struts.xml文件必须放在src下才能找到。 结果类型 说明 每个action方法都返回一个String类型的值,struts一次...

架构设计 146

自建邮局服务器| 批量邮件群发系统PowerMTA+oem(mumara,mailwizz, interspire)

世界顶级自建邮局服务器PowerMTA+oem(mumara,mailwizz, interspire) PowerMTA4.5(最好用的 群发邮件软件)是用于大批量多ip开发的邮件传递邮寄。可按每小时发送数近百万条电子邮件,发送IP地址和域可以详细配置,加上目前流行前端oem,mumara,mailwizz, interspire等,可定时发送,定时重复发送,实现全自动化 邮件群发 方案。 官网(powermta4.5下载) https://www.sparkpost.com/powermta/ 使用Po

ytrsexpo的博客 6501

struts2(四)

一、类型转换的意义 对于一个智能的MVC框架而言,不可避免的需要实现类型转换.因为B/S(浏览器/服务器)结构应用的请求参数是通过浏览器发送到服务器的,这些参数不可能有丰富的数据类型,因此必须在服务器端完成数据类型的转换   MVC框架是一个表现层解决方案,理应提供类型转换的支持,Struts2提供了功能非常强大的类型转换支持.   二、表现层数据的处理 1、对于web应用而言,表

xueshuangshuang123的专栏 689

Windows系统监控实战:Grafana+Prometheus+node_exporter保姆级配置指南(含常见问题解决)

本文提供了一份详尽的Windows系统监控实战指南,详细讲解了如何从零部署Grafana、Prometheus和node_exporter(实际为windows_exporter)监控栈。内容涵盖核心组件认知、分步配置解析、高级生产环境考量,并重点针对配置过程中常见的“No Data”问题提供了系统性的排查手册,旨在帮助用户快速搭建稳定可靠的系统资源监控平台。

weixin_29197835的博客 1008

Python爬虫实战:使用Scrapy+Playwright高效爬取全球专利数据库

本文将详细介绍如何使用Python最新技术栈(Scrapy+Playwright)构建一个高效的专利数据库爬虫系统。我们将从爬虫基础知识讲起,逐步深入到反爬应对策略、分布式爬虫架构以及数据存储方案,最终实现一个完整的专利数据采集系统。专利数据是技术创新领域的重要信息资源,包含技术描述、权利要求、申请人信息等宝贵数据。中国国家知识产权局(CNIPA)美国专利商标局(USPTO)欧洲专利局(EPO)世界知识产权组织(WIPO)

2201_76125261的博客 1382

Struts2源码粗略分析四:理解xwork工作原理

Struts2源码粗略分析四:理解xwork工作原理,含示例与解说

KNIGHTRCOM(rcom10002的专栏) 3696

Vue - 详细实现低代码平台,支持拖曳式可视化生成应用软件功能,用户通过拖拽元素、搭积木的方式创建应用(适合迭代的基础架构、低代码平台)

Vue低代码平台-拖曳式拖拉拽可视化生成应用软件,拖拽式低代码数据可视化开发平台,vue实现拖拽,拖拽式Vue组件代码生成平台,基于vue的可视化拖拽代码生成工具,Vue实现可拖拽组件的方法,一个低代码平台的前端部分,靠拖拉拽生成页面。Vue技术栈从零实现低代码可视化搭建平台示例,低代码轮子,通过拖拽就可生成Vue代码的平台来了,vue低代码平台开发相关比低代码更强大的零代码开发平台,这款低代码SAAS数据可视化工具,拖拽生成大屏。vue实现拖拽效果,Vue自由拖拽缩放组件,自定义组件(文本、图片

🏆 前端领域优质创作者 1万+

strcut2学习之路(struct的配置)

strcut2是一个流行的web应用框架,首先,我们在eclipse上面进行struct2的配置 1.先到struct2的官网下载相应的jar包(http://struts.apache.org/) 2.在eclipse中新建一个web项目,引入相应的jar包 3. jar包必须要引入的有六个 struct2-core-2.x.x.jar   struct2框架的核心jar包 xwork

M风景的技术博客 863

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

php mb_strcut,mb_strcut

[#2]t dot starling at physics dot unimelb dot edu dot au [2004-08-27 04:01:54]Whatthemanualandthefirstcommenteraretryingtosayisthatmb_strcutusesbyteoffsets,asopposedtomb_substrwhi...

weixin_39630106的博客 135

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

php函数substr、mb_substr、mb_strcut截取中文比较

一、函数说明     substr、mb_substr、mb_strcut这三个函数都用来截取字符串,所不同的是:substr是最简单的截取,无法适应中文;mb_substr是按字来切分字符串,而mb_strcut是按字节来切分字符串,截取中文都不会产生半个字符的现象。     这三个函数的前三个参数完全一致,即: 第一个参数是操作对象 第二个参数是截取的起始位置 第三个参数是截取的数量

聚合博客室 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

PHP substr(),mb_substr(),mb_strcut()比较

                                        PHP substr(),mb_substr(),mb_strcut比较1、前言:    1)、这三个函数都用来截取字符串,所不同的是:        substr是最简单的截取,无法适应中文;        mb_substr是按字来切分字符串;        mb_strcut是按字节来切分字符串,截取中文都不会产...

夏已微凉、 885

PHP中字符串截断函数mb_strimwidth、mb_substr、mb_strcut区别

今天在弄个人的Wordpress博客的时候,遇到一个字符串截断的问题。 在原来的主题样式里面,用的是mb_substr函数进行的字符串截断。发现有问题,这个函数将一个英文字符和一个中文字符同等对待,所以在长度上不能很好的控制。 后来查了PHP的函数手册,发现了mb_strimwidth函数以及mb_strcut函数。 现将这三者的区别记录如下: mb_strimwidth

adermxl的专栏 2952

php截取字符串substr、mb_substr、mb_strcut的区别和详解

1、substr substr() 函数返回字符串的一部分。(注意主要针对非中文,中文会出现乱码) 注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。 语法:substr(string,start,length) 例如:substr("Hello world",6); 输出的是world 2、mb_substr() mb_substr() 函数返回字符串的一部分 上面我说过substr() 函数,它只针对英文字符,如果要分割的中文...

leoly612200的博客 595

PHP函数mb_strcut的使用技巧分享

PHP函数mb_strcut在进行文字分割时,需要再最后增加一个参数,用来设定字符串的编码,这样我们就能解决分割中文字符出现乱码的问题。 <br /> <br />我们在进行PHP实际编码时,当遇到需要分割文字的情况,会用到substr()函数来实现这一功能。但是,如果文字中包含中文的话会遇到一些问题,导致编码错误。这时可以用mb_substr()或者PHP函数mb_strcut,他们两个的用法与substr()相似,只是在PHP函数mb_strcut最后要加入多一个参数,以设定字符串的编码,但是一般

一直问自己怎样才能把程序写的更好? 编程境界:干净利落,没有任何多余步骤。 动态能力:反应,逻辑思维 676

php substr、mb_substr、mb_strcut 函数比较

首先了解一下字符和字节: 字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。 字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。 它们完全不是一个概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同: ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉...

卩杉的博客笔记 328

strcut和class的区别

C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。 struct能包含成员函数吗? 能! struct能继承吗? 能!! struct能实现多态吗? 能!!!  既然这些它都能实现,那它和class还能有什么区别? 最本质的一个区别就是默认的访问控制:  默认的继承访问权限 struct是public的,cl

lifengguo_njupt的专栏 793

php中常用的字符串获取函数mb_strcut实例解释

php中常用的字符串获取函数mb_strcut实例解释

jinsanguo的博客 365

mb_substr和mb_strcut的区别

首先  1.确保你的Windows/system32下有php_mbstring.dll这个文件,没有就从你Php安装目录extensions里拷入Windows/system32里面。  2.在windows目录下找到php.ini打开编辑,搜索mbstring.d

482

python strcut

循环解析出一个二进制索引文件中的内容,只要知道存储的数据结构就可以解析出来,例如: import struct fd=file(u"h:/xxxx.index",'rb') while fd:     buf=fd.read(20)     if len(buf) == 0:         break;     print struct.unpack('5I',buf[0:20

KjfureOne的专栏 550

php mb_substr、mb_strcut 函数详细介绍

为什么80%的码农都做不了架构师?>>> ...

weixin_33953249的博客 229
上一篇: Maven、Webx、Velocity学习总结
下一篇: 深入分析Java ClassLoader原理
network_boy
博客等级 码龄12年 9粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值