通过实例学习Struts2 - 从struts-blank开始 (3)

java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils 一个错误引发的血案 struts2-blank的所有 包 我新建了一个项目,还没有业务,只有web.xml配置,struts.xml的配置只是随便点···出了个错··· java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils 我出了这么一个错,不知道是什么包不对,还是哪里配置不对。于是我找错,我百度,有网友说是可能web.xml或包不够·····其中有个老兄说,把app 阅读详情

最近发现一些网站在Copy&Paste我的文章, 请尊重我的劳动成果,在转载的时候注明出处,谢谢。


接上一篇《通过实例学习Struts2 - 从struts-blank开始  (2)》

国际化

国际化通俗点讲就是支持多语言,在Struts2中我们要解决几个问题

1. 如何告诉Struts2 当前的Locale 是什么

2. Struts2是如何寻找不同Locale的resource文件的

3. 如何使用Resource文件

设置Locale

在我们的struts-blank项目中,HelloWorld.jsp中有这样的代码:

<h3>Languages</h3>
<ul>
    <li>
        <s:url id="url" action="HelloWorld">
            <s:param name="request_locale">en</s:param>
        </s:url>
        <s:a href="%{url}">English</s:a>
    </li>
    <li>
        <s:url id="url" action="HelloWorld">
            <s:param name="request_locale">es</s:param>
        </s:url>
        <s:a href="%{url}">Espanol</s:a>
    </li>
</ul>
仔细读一下就会明白, 这段代码是通过 <s:url > 来定义了两个url ,带的参数分别是 request_locale=en , 和request_locale=es

然后使用<s: a href=... > 来创建链接,生成的最终html会是这样:

<h3>Languages</h3>
<ul>
    <li>
        <a href="/struts2-blank/example/HelloWorld.action;jsessionid=2F2C1A03C75BDF7893E7450998FBC3FB?request_locale=en">English</a>
    </li>
    <li>
        <a href="/struts2-blank/example/HelloWorld.action;jsessionid=2F2C1A03C75BDF7893E7450998FBC3FB?request_locale=es">Espanol</a>
    </li>
</ul>
分别对应en(英语) 和es(西班牙语? )

点击这两个link,系统的语言就会切换, 实际上我们看到唯一传递给struts2的参数就是request_locale , 没错,就是这个参数告诉了Struts2用什么样的locale !

那么Struts2在背后究竟干了什么事呢? 这需要了解一些Struts2架构, Struts2内置了很多拦截器,这些拦截器会在你的Action运行之前调用,其中有个拦截器叫做i18n, 它会检查http request 有没有名称为request_locale的参数,如果有, 转换为Locale对象, 设置为用户默认的Locale , 并且会把这个Locale保存在用户Session中,名为WW_TRANS_I18N_LOCALE。

所以只要你调用了一次request_locale=xxxx,  在session失效之前,locale就会保持不变。

当然,如果你想用java代码的方式来指定 Locale也是可以的:

ActionContext.getContext().setLocale(Locale locale)

查找Resource 文件

解决了如何设置Locale的问题, 我们再研究一下Struts2是如何查找Resource文件的。

如果让我们自己写的话,在java中最常用的就是ResourceBoundle , 通过它可以指定一个baseName,以及ClassLoader 来装载指定目录下的resource 文件,有兴趣的同学科参见我的另一篇文章《深入ResourceBundle》。

在我们的struts-blank项目中,有两个文件叫package.properties 和package_es.properties,这两个resource 文件和其他的Action类放在同一个java package 下

可以这么猜测,同一个java package 下的所有Action类,都会用package_xx_xx..properties 作为resource 文件。

我们在后边的例子中还会看到诸如这样的Resource 文件: <ActionName>_zh_CN.properties, 很明显这是为特定的Action所设置的

但实际情况中, 估计大多少项目都会把resource 文件同意放到一起,Struts2 称之为全局配置文件,可以这么指定:

<constant name="struts.custom.i18n.resources" value="baseName"/>

这三种方式是有优先级的: Action级> Package级 > 全局配置

实际上Struts2 支持更为复杂的搜索方式,这里就不展开了,感兴趣的同学可以看看Struts2 的教程

我不太理解为什么Struts2会有如此复杂的方式来定位Resource 文件, 在我这些年的工作经验中,resource文件总是统一放在一个指定的目录下,方便集中管理,也方便一次性的把所有的英文的Resource 文件发出去翻译。

不太清楚如果Resource如果是分散在各个package下面会有什么好处, 有经验的同学请不吝赐教

如何使用Resource文件

主要用两种方式:

(1) 在jsp 中: <s:text name="key"/>

(2) 在Java 中: 使用ActionSupport类的getText(.....)方法

注意在这两种方法中我们都没有指定Locale, 因为Struts通过request_loacle参数已经知道了。





创建 Qt Quick 项目 来看看如何使用 Qt Creator 创建 Qt Quick 项目! 阅读详情

相关推荐

PaddleOCR实战:DBnet++与DBnet模型训练全流程解析

本文详细解析了基于PaddleOCR框架的DBnet与DBnet++文字检测模型的完整训练流程。从环境配置、数据集准备、配置文件解读,到模型训练、评估调参及最终推理部署,提供了实战指南。重点对比了DBnet++与DBnet在精度、速度及适用场景上的差异,帮助开发者高效构建定制化的OCR检测模型。

weixin_29038155的博客 333

Struts 2最新0day破坏性漏洞(远程任意代码执行)等的重现方法

Struts 2的远程任意代码执行和重定向漏洞,是这两天互联网上最重大的安全事件,据说国内互联网企业中,很多电商纷纷中招,应该已经有大规模的用户隐私泄露。这里我们简单总结下怎样在自己机子上重现这些漏洞,这篇日志也是面向对网络安全比较感兴趣的初学者,即使你没有什么经验,也能知道这漏洞到底怎么回事: 首先我们需要下载包含漏洞的Struts 2,在这里:http://archive.apache.

qysh123的专栏 1715

Mixly/Arduino实战:WS2812点阵动态显示自定义图案与汉字

本文手把手教你使用Mixly和Arduino驱动WS2812点阵屏,实现自定义图案与汉字的动态显示。内容涵盖硬件连接、取模软件设置、高效数据处理技巧(巧用Excel)、Mixly图形化编程及Arduino代码解析,并深入探讨动态显示与滚动汉字原理,最后提供常见问题排查与性能优化心得,助你从零开始轻松玩转智能硬件。

weixin_29185199的博客 454

Struts2安全漏洞

摘要:Struts应用开发框架目前广泛应用于大型互联网企业、政府、金融机构等网站建设,并作为网站开发的底层模板使用。近日网上公布了Struts一个严重的命令执行漏洞,在我国互联网环境影响巨大,本文将对这个漏洞进行分析和描述。 Struts是Apache软件基金会Jakarta项目组的一个开源项目,它采用MVC模式,帮助java开发者利用J2EE开发Web应用。目前,Struts广泛应用于大型

solobear的专栏 7586

Gitlab+Jenkins+Docker+Harbor+K8s+Rancher集群搭建CICD平台

本文以诺依项目为例详细记录了Kubernetes集群的部署过程以及配套DevOps环境的搭建。主要内容包括:1) 配置8个节点的软硬件环境;2) 基础环境准备(网络、防火墙、Docker等);3) 三节点Kubernetes集群部署;4) GitLab代码仓库安装;5) Harbor私有镜像仓库搭建;6) Jenkins持续集成工具配置;7) 基于若依项目的CI/CD实践;8) Rancher集群管理工具部署。

hickman2023的博客 1201

浅谈车载控制器产线EOL实现方式

1、控制器生产产线上电路检测设计 2、客户总装产线检测设计

u012406840的博客 2万+

struts2 最新S2-016-S2-017漏洞通杀struts2所有版本

struts2 最新S2-016-S2-017漏洞通杀struts2所有版本 Struts2这个不争气的家伙。已经无话可说了。  POC来自官方: http://struts.apache.org/release/2.3.x/docs/s2-016.html http://struts.apache.org/release/2.3.x/docs/s2-0

crystal0011的专栏 2579

cocos2dx lua + protobuf

vs 2015 cocos2dx 3.10  lua  protobuf1. 下载 protobuf 源码     https://github.com/bnnswyp/protobuf/tree/master/protobuf-2.5.0    解压后的文件列表如下所示         其中 vsprojects 文件夹为 protobuf 的vs 工程2. 打开 protobuf.sln 编译...

u014486706的博客 2163

(五)Struts2 Hello World示例

通过学习Struts2 框架可以了解到,当你在Struts2 的web应用程序里点击一个超链接或提交一个HTML表单时,会由控制器收集输入并发送一个叫Actions的Java类。Action被执行后,Result会选择一个资源给予响应。这个资源通常是一个JSP,也可以是一个PDF文件,一个Excel表格,或者是一个Java小程序窗口。 假设你已经建好了你的开发环境,那么现在让我们继续构建第一个S...

weixin_30413739的博客 231

从Microchip SDK到STM32实战:手把手教你移植LAN9252 EtherCAT从站驱动(含EEPROM配置避坑)

本文详细介绍了如何将Microchip SDK中的LAN9252 EtherCAT从站驱动移植到STM32F407平台,包括FSMC接口配置、中断处理适配和EEPROM配置等关键步骤。通过实战指南和避坑技巧,帮助开发者快速实现高性能EtherCAT从站设备的开发,适用于工业自动化领域。

weixin_29197835的博客 446

Zemax非序列模式新手入门:从零搭建一个抛物面反射镜系统(含灯丝光源与探测器设置)

本文详细介绍了如何在Zemax非序列模式下从零搭建抛物面反射镜系统,包括灯丝光源配置、反射镜建模和探测器设置等关键步骤。通过实战指南,帮助光学设计新手快速掌握非序列模式的应用技巧,特别适合处理复杂光线传播场景如反射镜系统和杂散光分析。

weixin_28717431的博客 436

通过实例学习Struts2 - 从struts-blank开始 (1)

前言 一直用Struts1 , 现在新的项目要转向Struts2了, 先研究学习一下,做点技术储备。 我一直认为计算机软件行业是一个实践性非常强的行业,书读了多少都不管用, 一定要卷起袖子,亲自动手,才能学到一门技术的精髓,才能谈得上精通。 否则浮在表面,只懂概念,夸夸奇谈,一进入真正的项目就傻眼了。 但是自己完全从零开始来学习一个技术还是太慢了,一定要找到一个切入点, 就像打仗一样,

Be yourself and Beyond yourself 1万+

土地利用数据从1972到2023:如何利用Landsat和Sentinel数据构建长期变化监测模型

本文详细解析了如何利用1972至2023年的Landsat和Sentinel遥感数据构建土地利用长期变化监测模型。通过多源数据融合策略、时间序列预处理流程和深度学习算法,实现高精度的土地利用分类与变化检测,为生态评估和城市规划提供科学依据。文章还探讨了验证方法和实际应用案例,展示了长期遥感数据在环境建模中的独特价值。

weixin_28720573的博客 444

通过实例学习Struts2 - 从struts-blank开始 (2)

接上一篇 《一起学习Struts2 (1) 》 在Action中支持通配符 在example.xml 中,我们能看到这样的定义: Login_*" method="{1}" class="example.Login">             /example/Login.jsp             Menu   大胆的猜测一下,这个定义应该支持Login_exe

Be yourself and Beyond yourself 4438

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

struts2原文件struts2-blank.war学习

最近又在学习SSH框架,不间断的学习让自己对各个单独的框架又有了进一步的学习。现在学习的是struts2的源文件,在此和大家一起分享。(其实源文件才是我们学习一手资料呢!) 1.   首先下载struts-2.3.4.1-all.zip ,版本都可以。 2.   解压,打开,我们看到有apps,docs,lib,src四个文件夹,见名知意,我就不翻译了。这里我只看了apps里面的内

keep innocent 3163

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java struts2 例子_Struts2学习进阶(实例篇一)——struts2-blank-2.0.8实例学习

说明:本文经过笔者对struts2.0.8自带的实例struts2-blank-2.0.8学习而写,对该例子进行了部分修改,希望对广大象要学习struts2的朋友有所帮助。一.实例说明本例是Struts2的简单实例,通过本工程的学习,我们将会对struts2的表单以及表单验证有一个初步的认识、了解struts2的配置以及初探Struts2的本地化输出。二.编码准备1.包的引入在MyEclipse或...

weixin_29435115的博客 275

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Struts2学习笔记(一) struts2的下载以及jar包的导入

一、struts2的下载 struts2下载地址:https://struts.apache.org 进入后点击download即可进入下载页面 在这里我们可以选择不同版本的struts2进入下载 下载时我们选择第一个,第一个中包括了下面所有的 这里我们以2.3.37版本为例,下载完成后我们对压缩包进行解压 二、struts2的基本jar包导入 在这之后我们就可以去创建一个Dynamic ...

showadwalker的博客 6448

使用嵌入式jetty在Eclipse中部署struts2示例程序struts2-blank

使用内嵌jetty在Eclipse中部署struts2示例

yangkunlin的专栏 1352

Struts2学习进阶(实例篇一)——struts2-blank-2.0.8实例学习

说明:本文经过笔者对struts2.0.8自带的实例struts2-blank-2.0.8学习而写,对该例子进行了部分修改,希望对广大象要学习struts2的朋友有所帮助。一.             实例说明 本例是Struts2的简单实例,通过本工程的学习,我们将会对struts2的表单以及表单验证有一个初步的认识、了解struts2的配置以及初探Struts2的本地化输出。二. 

1138

struts-2.3.4.1自带示例程序struts2-blank.war的入门学习(高手绕行)

一直没用过大名鼎鼎的Struts2,网上找了很多示例程序,总是不尽人意。下载完struts-2.3.4.1,简单浏览了一下目录结构,突然想到,不如用下载包中自带的示例程序进行学习,保证是最新的Struts2,而且示例较权威。以下是我的学习步骤,写出来供初学者参考,struts大牛如果有时间看的话,也希望能够提一些宝贵的意见。 [b]1.[/b] 首先到http://struts.apache...

曾经以为…… 322

struts2初步学习路线

1,下载官网的struts2的程序包,下载那个all的包: http://struts.apache.org/download.cgi#struts233-SNAPSHOT 2,eclipse中新建一个web project工程,设置其中的相关参数: java jdk设置; server-tomcat的设置; 3,解压struts2包:struts-2.3.1.2-all.zip ,获得...

weixin_33733810的博客 137

OFDM信号如何同时“说话”和“看东西”?深入浅出解析雷达通信一体化原理

本文深入解析OFDM雷达通信一体化技术,揭示其如何通过子载波和时频转换实现通信与雷达功能的完美结合。探讨了系统同步、匹配滤波等关键技术,并介绍了GNU Radio与USRP在软件定义无线电中的实际应用,为雷达通信系统设计提供实用指导。

weixin_33695450的博客 575

MQTT over QUIC:移动弱网下如何让IoT长连接不再掉线

在物联网通信中,TCP长连接在移动切网和弱网环境下容易因IP变化而断开,导致设备离线、消息延迟。QUIC协议通过连接迁移和0-RTT机制,在传输层实现了连接身份与网络路径的解耦,能在网络切换后快速恢复会话,减少重连等待。MQTT over QUIC将这些特性与MQTT的会话恢复、QoS机制结合,能显著降低断线重连时延,避免遗嘱误触发,特别适合车联网、智能硬件、巡检等移动性强的IoT场景。本文从传输层协议原理出发,分析TCP在弱网下的困境,对比QUIC的连接迁移、快速握手及多流优势,并探讨落地架构与工程取舍,

weixin_34357928的博客 322

struts2-blank

说明:本文经过笔者对struts2.0.8自带的实例struts2-blank-2.0.8学习而写,对该例子进行了部分修改,希望对广大象要学习struts2的朋友有所帮助。 一.             实例说明  本例是Struts2的简单实例,通过本工程的学习,我们将会对struts2的表单以及表单验证有一个初步的认识、了解struts2的配置以及初探Struts2的本地化输出。 二.

a468903507的专栏 749

struts2 demo之blank

在HTML中,可以利用的META >标签实现Web的自动跳转。例如:在Web上显示一段欢迎信息,隔一定秒数后,自动跳转到其他的Web页面,由此可以造成新奇的效果。实现方法是在与标签之间加上如下语句: meta http-equiv="Refresh" content="秒数; url=跳转的文件或地址" > ,在Struts 2的blank这个例子中index.html就是这样做的:META

wanglixue的专栏 1299
上一篇: 通过实例学习Struts2 - 从struts-blank开始 (2)
下一篇: 垂死挣扎还是涅槃重生 -- Delphi XE5 发布会归来感想
Andy
博客等级 码龄26年 115粉丝 31原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值