Cheug's Blog

当前位置:网站首页 / JAVA / 正文

Struts2[三]

2019-09-27 / JAVA / 66 次围观 / 0 次吐槽 /

Struts2国际化

什么际化

软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的、符合来访者阅读习惯的页面或数据

固定文本的国际化

例如:消息提示,错误提示和菜单,导航栏等等固定文本。

步骤

第一:创建一个消息资源包

一个资源包由多个文件组成,这些文件名都有命名规范:主要文件名_语言代码_国家代码.properties

语言代码国家代码:有iso规定的

当文件只有主要文件名.properties时,表明它是默认资源包。浏览器会根据不同的语言环境找对应语言环境的资源包

当没有时,找默认的。

每个资源包的内容都由相同的key和对应语言环境的value组成。

比如:

² message_zh_CN.properties

² message_en_US.properties

Struts2[三] JAVA 第1张

读取资源包中的内容

Java提供ResourceBundle可以读取资源际化配置文件

Struts2[三] JAVA 第2张

JSP使用际化

Struts2[三] JAVA 第3张

四步:使用jstl标签来国际化

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。

除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

    首先需要在项目中导入两个jar

            Struts2[三] JAVA 第4张

Struts2[三] JAVA 第5张

Struts提供的际化

际化与struts

struts际化实现步骤

1)、一步:配置资源包

a、配置全局资源包

    在struts.xml配置

        Struts2[三] JAVA 第6张

b、配置包范围的资源包

资源包名称命名规范:package_语言代码_国家代码.properties(固定的)。以此种命名方式的资源包能被该包及其子包中的动作类访问。  

优先级:高于全局消息资源包

c局部消息资源包

资源包名称命名规范:动作类名称_语言代码_国家代码.properties。以此种命名方式的资源包,只为动作类服务。

优先级最高(就近原则)。

Struts2[三] JAVA 第7张

² Struts2中资源包的搜索顺序:

Struts2[三] JAVA 第8张

2)、第二步:读取资源包内容

ajsp读取资源包内容

使用struts标签s:text获取国际化内容

Struts2[三] JAVA 第9张

bAction读取资源包内容

使用ActionSupportgetText方法以读取到资源包的内容

就是说这个Action一定要继承ActionSupport

种在实际开发中几乎不用

Struts2[三] JAVA 第10张

c自由指定读取资源包

jsp页面可以使用s:i18n标签指向读取的国际资源包文件

Struts2[三] JAVA 第11张

Strust2拦截

1拦截器的重要性

Struts2中的很多功能都是由拦截器完成的。比如:servletConfigstaticParamparamsmodelDriven等等。

Struts默认的拦截器配置在struts-default.xml文件

拦截AOP编程思想的一种应用形式

 

2、拦截器的执行时机

Struts2[三] JAVA 第12张

3、拦截器的部分类结构

Struts2[三] JAVA 第13张

4、简单拦截器入

步骤:个拦截器

1)、第一

创建个拦截器,继承Abastract方法实现intercept方法

Struts2[三] JAVA 第14张

2)、

struts.xml配置拦截器,拦截器需要配置后才可使用

Struts2[三] JAVA 第15张

拦截

  ActionInvocation.invoke方法返回的就是视图

Struts2[三] JAVA 第16张

拦截器中的问题

问题:由于我们写了自己的拦截器,默认的拦截器不起作用了

举个简单的例子,是不可以接收请求参数

a、 把默认拦截器到配置

Struts2[三] JAVA 第17张

      b抽取一个拦截器的分组

Struts2[三] JAVA 第18张

c修改默认的拦截器

上面的配置坏处是每一个Action配置拦截器,们修改默认的拦截器配置,可以简便们的代码

Struts2[三] JAVA 第19张

d、过滤不需要登录验证的方法

修改的默认的拦截器后,所有的Action方法都会被拦截,登录方法是不需要拦截的

解决需要通过AbstractInterceptor类的子类入手,通过查看发现,该类还有一个子类是抽象的,以通过MthodFilter过滤方法,图:

Struts2[三] JAVA 第20张

解决步骤:修改拦截器的继承结构

Struts2[三] JAVA 第21张

修改struts.xml文件注册过滤方法

Struts2[三] JAVA 第22张

上面遗留的问题:我们在声明时配置了哪些方法需要拦截,哪些方法不需要拦截。但是在没有写动作类和动作方法之前,不确定方法名叫什么。    

决办法:我们需要在使用拦截器的时候给它注入参数。

Struts2[三] JAVA 第23张

Struts2的文件上传

Struts提供了内置标签用于文件上传<s:file>,我们称为文件选择

html标签<input tyle=”file”>一样用的

文件上传的必要前提条件

² 表单必须是post方法

² enctype类型必须为multipart/form-data

 

1简单文件上传

步骤:

一步:jspaction代码

Struts2[三] JAVA 第24张

Action接收到File对象是一临时文件,后面需要保存到另外一个路径去

Struts2[三] JAVA 第25张

struts.xml配置

Struts2[三] JAVA 第26张

2文件上传的配置

第一:配置文件上传的大小

默认情况下,struts文件上传只允许在2M

如果上传一个大于2M文件,系统会报错,而且必要一个input显结果

Struts2[三] JAVA 第27张

Struts2[三] JAVA 第28张

修改文件上传大小限制

² 思路在struts.xml中改变default.properties文件中的常量。

Struts2[三] JAVA 第29张

第二:限制文件上传的类型

思路:通过拦截器设置文件上传的扩展名或者MIME类型

Struts2[三] JAVA 第30张

第三:文件上传错误的中文提示

默认的错误提示信息是在

struts2-core.jar\org.apache.struts2\struts-message.properties

Struts2[三] JAVA 第31张

解决办法:用国际化消息资源包,把对应的key取值改为中文即可。

² 常用的key

Struts2[三] JAVA 第32张

3文件上传

文件上传,Action代码中,需要把接收的文件字段设置为数即可

Struts2[三] JAVA 第33张

Struts2[三] JAVA 第34张

4文件下载

其实就是一种结果类型(Stream

Action代码

Struts2[三] JAVA 第35张

Struts2[三] JAVA 第36张

动态设置下载的文件名

Struts2[三] JAVA 第37张

Struts2[三] JAVA 第38张

Struts2[三] JAVA 第39张

contextMap

1动作类的生命周期

明确:

² 动作类是多例的,每次动作访问,动作类都会实例化。所以是线程安全的。

² Struts1的区别是,struts1的动作类是单例的。

 

2请求数据的存放

问题: 

² 每次请求时,都会产生一些请求数据,这些数据存放到哪里去了?   

明确:

² 在每次动作执行前,核心控制器StrutsPrepareAndExecuteFilter都会创建一个ActionContextValueStack对象。且每次动作访问都会创建。  

² 这两个对象存储了整个动作访问期间用到的数据。

² 并且把数据绑定到了线程局部变量(ThreadLocal)上了。所以是线程安全的。

Struts2[三] JAVA 第40张

Struts2[三] JAVA 第41张Struts2[三] JAVA 第42张

3contextMap 存储数据

Struts2的官方文档对contextMap的说明:

Struts2[三] JAVA 第43张

contextMap=ActionContext中存放的主要内容

Key

Value

说明

value stack (root)

java.util.List

没有root这个key。它是一个list

application

java.util.Map<String,Object>

ServletContext中的所有属性。

session

java.util.Map<String,Object>

HttpSession中的所有属性。

request

java.util.Map<String,Object>

ServletRequest中的所有属性。

parameters

java.util.Map

参数

attr

java.util.Map

把页面、请求、会话、应用范围内的所有属性放到一起。

注意: 

² 除了value stack之外,全是map,而contextMap也是一个map

² 其实就是Map中又封装的Map。(很像dbutilsKeyedHandler封装数据的结构,只是封装数据的结构)

² 使用s:debug查看contextMap数据

Struts2[三] JAVA 第44张

Struts2[三] JAVA 第45张

4测试存储数据

Struts2[三] JAVA 第46张

Struts2[三] JAVA 第47张


额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Cheug's Blog

Copyright Cheug Rights Reserved.