解决 Struts 国际化资源的中文编码问题
jsp页面传值中文乱码 网页乱码 jsp过滤器过滤乱码等乱码处理办法
一、jsp页面间传值中文乱码问题解决办法<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <form action="b.jsp">name:<input type=text name=name><input type=submit></form>b.jsp页面内容:<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <%String name=request.getParameter("name");%><body><%=name%></body>现象:中文乱码,比如“??????”解决方法如下:方法一:1. 在b.jsp中把pageEncoding="GB2312"改为pageEncoding="ISO885Array-1"虽然这样b.jsp页面显示的内容还是乱码,但是不是那种“??????”的乱码,而是一些特殊字符2. 然后在浏览器中查看菜单中修改成GB2312的编码,这时乱码就显示中文了。
3. 但是这种方法是不可行的。
方法二:( 已经验证可行)1. 在b.jsp中把String name=request.getParameter("name");修改为String name=new String(request.getParameter("name").getBytes("ISO-885 Array-1"),"GB2312");2. 这时再在页面上显示,则就是中文了。
中文参数乱码问题解决方案(精选5篇)
中文参数乱码问题解决方案(精选5篇)第一篇:中文参数乱码问题解决方案问题1:在使用tomcat服务器时,如在跳转路径中传递中文参数会出现乱码现向!如:以和两种方式提交的变量flag在LoginServlet中用request.getParameter(“flag”);时就会出现乱码问题。
解决:在tomcat/conf/servlet.Xml中加入一段代码:debug=“0” connectionTimeout=“20000”disableUploadTimeout=“true” URIEncoding=“true”/>问题2:如果uri中转递的是参数要发送到jsp页面,则必须在接受代码的jsp页面里面还要加入代码:问题3:在jsp页面里的代码修正://如不注明是post方式则默认是get方式问题4:在servlet中的代码修正在doPost方法里面最上面的位置加上如下代码:response.setCharacterEncoding(“gb2312”);request.setCharacterEncoding(“gb2312”);第二篇:struts2 action接收到的参数中文乱码的问题struts2 action接收到的参数中文乱码的问题(2011-06-16 10:55:44)转载标签:分类:技术收藏utf-8 乱码 gb2312 字符集编码方法杂谈中文乱码,首先要区分是页面乱码、action乱码,还是数据库乱码。
大致的原理是java使用unicode编码-->window使用gbk(gb2312的扩展集)--mysql默认使用utf-8(unicode的一种编码方法),这样转来转去就乱码了^_^。
解决方法如下:1.在struts2里面,最好将所有字符都设成utf-8。
1.1 在jsp页面设定字符编码。
这边有必有说明的是如果是jsp+java bean+servlet 的方案,中文乱码很好解决,统一设成gb2312就可以了。
中文乱码-页面乱码PPT课件
</action-mappings>
2021/6/7
7
2021/6/7
8
运行 测试界面输入中文
2021/6/7
9
解决步骤一:修改server.xml
2021/6/7
10
<Connector
port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
创建一个类CharacterEncodingFilter
2021/6/7
12
2021/6/7
13
2021/6/7
14
配置servlet
2021/6/7
15
2021/6/7
16
2021/6/7
17
国际化乱码
2021/6/7
18
修改登录页面
2021/6/7
19
修改资源文件
2021/21/6/7
27
上一步覆盖完毕之后,重启编辑器
2021/6/7
28
部分资料从网络收集整 理而来,供大家参考,
感谢您的关注!
1
页面乱码案例
2021/6/7
2
创建一个struts项目,FCode项目
打开index.jsp文件
2021/6/7
3
对上一个页面进行保存
即出现下图界面,提示编码无法解析部分 字符
2021/6/7
4
修改代码如下
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
基于struts框架的国际化问题的解决方案
默认 资 源 文 件 抽 题 组 卷 英 文 资 源文 件 中文 资源 文 件
Co mpo e pp ia in p o e t s s a l to . r p ri c e Co o e p l a in e . r p ris mp s a p i t c o n p o ete
下 面 以登 录模 块 为例来讨 论 资源 文件 的建 立 和
使 用.
表 1 网 上 考 试 系 统 各 模 块 对 应 的 资 源 文 件
模 块名 资源文件类型 默认资源文件
考生登录 英文资源文件
资源文件名称
S u e t o ia p ia in. r p r e td nL gn p l t c o p o et s i
这种 多模 块 的 Srt 应用 ,可 以考 虑 为 网上 考 试 系 t s u
关 的格式化 或解 析工 作 , 它代 表 一种 特 定 的语 言 和 地 区 ,向本地 敏感 的类 提供 本地化 信 息 ….
R suc u de类 提 供存 放 和 管理 与 L c 相 eo r B n l e oa l
_
存 在 ssi es n内 , 样 ,Srt框 架 能 自动 根 据这 一 o 这 t s u o ae L cl实 例从 R suc ude中选 择合 适 的资源 文 eoreB nl 件, 再从 资 源文件 中读 取本 地化 的消 息文 本 ] 2.
Srt框 架提 供 了对 国际化 的支 持 , 文 利 用 Srt t s u 本 t s u 框 架解决 了网上考 试 系统 的 国际化 问题 ,使其 支 持 面 向中文和 英文 两种 不 同的语 言环境 .
2 网 上考 试 系统 国 际化 问题 解 决 方 案
struts2
/topic/128973struts2表单标签1、struts资源文件中文解决方法在命令行中输入以下命令native2ascii -encoding gb2312 ApplicationResources.properties ApplicationResourcesgbk.properties第一个文件为资源文件,第二个为新生成的文件,将新生成的文件拷入工程就可以了2、开发struts2流程1.创建web工程2.拷贝commons-fileupload-1.2.1.jar,commons-logging-1.0.4.jar,freemarker-2.3.13.jar,ognl-2.6.11.jar,struts2-core-2.1.6.jar,xwork-2.1.2.jar,放入web-inf--lib中3.在web.xml文件中添加struts2的核心Filter,过滤客户端发送过来的请求,代码如下<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>org.apache.struts2.dispatcher.FilterDispatcher为struts2中提供的一个控制器4.创建struts.xml文件,放在src目录下.代码如下:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="strutsqs" extends="struts-default"></package></struts>5.在src目录下创建一个类,创建几个属性及对应的get,set方法6.创建public String execute() throws Exception方法,7.在struts.xml文件中添加如下代码:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="strutsqs" extends="struts-default"><action name="login" class="ers.action.LoginAction"><result name="success">/Main.jsp</result><result name="failed">/Login.jsp</result></action></package></struts>3、创建拦截器:1.创建类继承AbstractInterceptor,覆盖intercept方法,代码如下public String intercept(ActionInvocation invocation) throws Exception {LoginAction action=(LoginAction)invocation.getAction();String result=invocation.invoke();return null;}2.在struts.xml文件中配置如下<package name="strutsqs" extends="struts-default"><interceptors><interceptor name="myInterceptor" class="ers.interceptor.LoginInterceptor"> <param name="name">简单拦截器</param></interceptor></interceptors><action name="login" class="ers.action.LoginAction"><result name="success">/Main.jsp</result><result name="failed">/Login.jsp</result><result name="input">/Login.jsp</result><interceptor-ref name="myInterceptor"></interceptor-ref></action></package>也可以创建拦截器栈<interceptors><interceptor name="myinterceptor1"class="com.haitian.bbs.interceptor.MyInterceptor"></interceptor> <interceptor name="myinterceptor2"class="com.haitian.bbs.interceptor.MyInterceptor2"></interceptor> <interceptor-stack name="stack1"><interceptor-ref name="myinterceptor2"></interceptor-ref><interceptor-ref name="myinterceptor1"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors>4.标签中引用资源文件内容<s:textfield name="age" key="regist.age" value="%{getText('regist.password')}"></s:textfield><s:select list=”#{‘1’:getText(‘sex.man’),’0’:getText(‘sex.women’)}”<s:text name=”bel”/>5.创建资源文件在src下创建messageResource_zh_CN.properties文件在src下创建struts.properties文件,添加struts.custom.i18n.resources=messageResource_zh_CN 6.Action中访问servlet APIActionContext ctx=ActionContext.getContext();ctx.getApplication()获得application对象ctx.put(“”,””);//相当于request.setAttribute(“”,””);ctx.getSession()//获得session对象get(Object key);//类似于调用HttpServletRequest的getAttribute(String name);方法Map getApplication();返回一个Map对象,该对象模拟了应该的ServletContext实例Map getSession();返回一个Map对象,该Map对象模拟了HttmpSession实例Map getParameters();获取所有的请求参数,类似于调用HttpServletRequest对象的getParameterMap方法Void setSession(Map session);直接传入一个Map实例,将实例里的key-value对转换成session的属性名\属性值HttpServletRequest request=ServletActionContext.getRequest();7.Action访问资源文件Action 继承ActionSupport调用this.getText(“ername”);Jsp访问资源文件<s:text name=”bel”/>8.资源文件_各国代码资源文件命名格式:baseName_language_country.propertiesLocale[] localeList=Locale.getAvailableLocales();for(int i=0;i<localeList.length;i++){System.out.println(localeList[i].getDisplayCountry()+”=”+localeList[i].getCountry()+””+localeList[i ].getDisplayLanguage()+”=”+localeList[i].getLanguage());}9.将struts.xml分开在struts.xml中添加如下代码,将其它配置文件导入<struts><include file=”struts-part1.xml”/>..</struts>被包含的配置文件是标准的struts2配置文件,一样包含dtd 信息、strut2配置文件的根元素,此时struts.xml文件中不能再定义action10全局结果result<global-results><result name="">/te.jsp</result></global-results>11模型驱动1创建一个JavaBean,生成setter,getter方法2创建action类实现ModelDriven接口12.创建拦截器1创建类继承AbstractInterceptor,覆盖intercept(ActionInvocation invocation)方法2. ActionContext ac=arg0.getInvocationContext();Map session=ac.getSession();获得session对象Object obj=session.get(“CURRENTUSERBEAN”);//获得session中是否存在此对象If(obj==null)没有登陆过Return “login”;ElseReturn invocation.invoke();3.LoginAction la=(LoginAction)invocation.getAction();获得被拦截的Action 实例4.String result=invocation.invoke();调用execute方法,将拦截方法返回的字符串做为拦截器的返回值或者返回其它字符串,此字符串与struts.xml文件中的result标签中的结果对应。
struts2传值出现乱码问题
1、在struts.xml文件中添加:<constant name="struts.i18n.encoding" value="gb2312" />页面编码格式如果是gb2312那么value值就写gb2312,页面编码如果是GBK那么value值就写GBK;总之页面什么编码格式这里的value就写什么格式。
这样简单语句话就解决了乱码问题如下:<struts><constant name="struts.i18n.encoding" value="gb2312" /><package name="com" extends="convention-default">............</struts>2、url传值到Action的乱码解决方法jsp页面 URL传中文参数到Action里面出现乱码,用过滤器和控制器都解决不了,用了我两个多小时解决这个小问题!解决方法有以下几种:第一种:在Action中用 new String(str.getBytes("ISO8859_1"), "UTF8"),进行转码,因为传递的时候,中文默人的是ISO8859_1第二种:可通过配置TOMCAT来解决此问题,具体解决方法如下:在tomcat的server.xml里,找到<Connector port="8080"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443"acceptCount="100"debug="0" connectionTimeout="20000"disableUploadTimeout="true"useBodyEncodingForURI="true" URIEncoding="gbk">其中是修改 disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="gbk" 其方法是防止在url中出现乱码然后在每个Jsp页面添加如下代码<%@ page pageEncoding=”gb2312″%><%@ page contentType=”text/html;charset=gb2312″%><%request.setCharacterEncoding(”gb2312″);%>第三种:直接在ACTION中利用以下方法解决:request.setCharacterEncoding("gb2312");response.setCharacterEncoding("gb2312");我用的是struct1.2+Hibernate3.0+Spring2.0在做那个两个action的页面的时候,jsp页面的下拉列表通过actionForm传值给action,老是得到乱码,过滤器+server.xml+页面编码统一后,仍不能解决。
JSP中文乱码处理
然后我们在info.jsp中来调这个函数,具体代码如下: <%@ page contentType="text/html; charset=GBK" %> <%@ include file="tocn.jsp" %> <h3>测试中文信息</h3> 传递的中文信息: <% String test = tocn(request.getParameter("test")); out.println(test); %>
接下来再次测试程序,发现问题得到了解决,中文信息正 确显示出来了。如图所示:
注意:这种解决方式只对POST提交方式有效,如果客户 端是以GET方式或者URL重写的方式提交的中文信息,可 能它就无用武之地了。
参数传递乱码问题
在Web应用中,客户端提交请求信息时,在某些情况下需要用到GET 提交方式。 有时,在以URL重写方式传递信息时,也会传递中文信息。 这两种方式如果用方案二是无法解决中文乱码问题的。我们先来看一 个测试,还是需要两个JSP页面。如下: refer.jsp <%@ page contentType="text/html; charset=GBK" %> <form action="info.jsp" method="GET"> 输入中文进行测试<br> <input type="text" name="test"/> <input type="submit" value="ok"/> </form> <a href='info.jsp?test=我爱我家'>下一页</a>
中文乱码解决方案
IE6的“以UTF-8发送URL”选项设置对请求页面字符编码有影响吗?关键字: 字符编码最近又碰到了中文乱码问题,这里我没有把数据库牵扯进来,先说下我的环境,servlet容器使用Tomcat6.0,浏览器FireFox3.0、IE6,涉及字符编码设置的地方我的思路就是编码的地方都统一使用UTF-8,具体配置如下:1.所有页面的charset设置为UTF-8。
2.Tomcat的URIEncoding默认是ISO-8859-1,而我设置为UTF-8,主要是想解决中文命名的文件以及请求以get方式提交有可能出现的乱码问题。
3.添加过滤器,调用request.setCharacterEncoding("utf-8")方法将request 的字符集设定为utf-8,解决请求以post方式提交的乱码问题。
其实这样的设置貌似是不会再出现乱码问题了,不过,问题依旧来了,如果我在浏览器的地址栏中输入中文参数提交,返回的页面却出现了乱码。
真搞不明白到底是哪里出了问题!说起来对中文乱码的问题一直是一支半解,出现乱码了,网上搜罗了一大堆资料,按照网上的配置,问题到是解决了,不过原理却搞的很模糊,一个请求发送到服务器,服务器业务逻辑处理后返回一个页面,这中间涉及的字符集转换,编码,解码过程一概不清楚。
这次,折腾了半天,总算是更进一步了解了字符编码问题,这里做个总结。
先看我的总结,有不对的地方欢迎批评。
首先我们看下,一个请求响应的流程浏览器 IE/FireFox -------->Servlet容器----------------->显示页面编码使用容器的URIEncoding转码解码我把用户发送请求方式不同引起的中文问题划分了四种类型:1、表单的get提交2、表单的post提交3、页面链接传递中文参数4、地址栏中参数直接输入中文提交1.首先我们看表单get方式提交浏览器根据页面的charset编码方式对页面进行编码,然后提交至服务器,首先进入对应的字符编码过滤器(如果有的话),不过Tomcat6.0对于get 提交方式采用的是server.xml文件中的URIEncoding编码方式,而并不会采用过滤器中设置的编码,那么根据我的环境设置,jsp页面都使用UTF-8的编码,Servlet容器的URIEncoding也设置为UTF-8,则servlet不用进行转码即可正确解码,获得正常的中文字符串。
Velocity 和 Struts2
3.与WEB容器无关,除了HTML,也可以生成各种文本,如XML、RTF、Java源代码等。
FreeMarker缺点:
1.freemarker的map限定key必须是string,不支持其他数据类型。(对我的应用好象影响不大)
在Struts2中查找vm文件的顺序先查找Web应用程序,再查找类路径。如果你需要使用vm作为显示层,只需要在配置文件中指定result的type属性为velocity,然后将<param>的location属性指定到一个以vm结尾的资源上就可以了!
1.Struts2中的Velocity中文乱码的处理方式:
2.freemarker的变量必须有值,没有被赋值的变量就会抛出异常。程序里面几乎所有可能出现空值的变量统统需要加上${xxx?if_exists},有些循环条件还需要写if判断。
3.不能在群集上面发布应用。freemarker支持在页面里面直接操作Session,request等,例如${Session[...]},但不能对其序列化。(这个对我也不是问题,作为企业里的小应用,我就不用群集)
因为在Velocity-1.4.jar中的org.apache.velocity.runtime.defaults中定义的velocity.properties中定义的input.encoding=ISO8859-1,output.encoding=ISO8859-1,通常最好在VM文件中使用%{getText(‘’)}调用国际化资源文件的内容就不会产生乱码。
struts2 与 velocity 的整合最难的地方也就是这个地方了,完成了上面的两件事情,我们就可以像使用jsp一样,在struts中使用velocity 了,而且能够得到velocity的所有好处. 写VelocityLayoutResult这个类的人确实是强人.
struts2国际化配置
前提条件:strut2的必须架包已经引入,struts2的配置文件全部配置完成1.首先创建一个struts.properties在src目录下,服务器启动时候会自动加载该文件,在这个文件中写入struts.custom.i18n.resources=globalMessages,服务器会自动选择前缀为globalMessages资源文件。
(或者你在你的struts.xml文件中添加<constant name="struts.custom.i18n.resources"value="globalMessages"></constant>服务器加载struts.xml的时候会加载国际化资源文件);2.在src目录下创建资源文件英文globalMessages_en.properties 中文globalMessages_zh.properties。
globalMessages_en.properties 文件内容为home=homeglobalMessages_zh.properties文件内容为home=¥u9996¥u98753.在页面端获得资源文件信息。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'test.jsp' starting page</title></head><body><s:text name="home"></s:text></body></html>struts2的国际化分三种情况1.前台页面的国际化,2.Action类中的国际化,3.配置文件的国际化。
Struts应用程序中文显示方案及其国际化技术
次划分 , 也提供 了一 系列有 效 的技 术来 简化 We 应用 的开 发 。文 中针对 Srt应用 程序开 发 中 出现 的中文 显 示 问题 同时 b t s u
进行 了探讨 , 出了相 应的解 决方案 , 提 并对 Srt应 用 程序 的国际 化 问题做 出了技 术研究 。 t s u
I e na i n lz to c o o y ntr to a ia i n Te hn lg
M A n, UANG e p i Li H W n— e
(  ̄ot f nomao c ne& T cn l y Suh sJat gUnvri , h nd 10 1C ia S ho o fr tnSi c I i e ehoo ,otwet i o ie t C eg u6 0 3 , hn) g on sy
Srt 用 程序 中文 显 示 方 案及 其 国 际化 技 术 t s应 u
马 林 , 文培 黄
( 南交通 大学 信 息科 学 与技 术 学 院 , 川 成 都 60 3 ) 西 四 10 1
摘 要 :t t是近 年来 构建基 于 Jv 的 We 应 用程序 的主 流框架 。它所 实现 的 MV Sr s u aa b C模式 , We 应 用带 来 了良好 的层 给 b
a piain,fee ei frs le t. d itra in l ai t n lg fS r t p I a p l to o r asre o eov n An nen t ai to  ̄h oo yo t s a pi t c d s s o z n u c
Ke rs: tus Chn s ipa ; VC;ne a in l to ywo d S r t; ieeds ly M itr t ai in n o a z
十二国际化和中文编码问题
⼗⼆国际化和中⽂编码问题第⼗⼆章S truts国际化程序和中⽂编码问题第⼀节国际化问题概述⼀、什么是国际化编程1)国际化(Internationalization ):就是设计⼀个应⽤的流程,以使之能够不经过⼯程修改就可以使⽤于各种不同的语⾔和区域场所。
2)本地化(Localization ):通过添加特定场所的组建和翻译⽂本来使软件适⽤于特定的场所和语⾔的过程。
我们花费了⼤量的精⼒来开发⾃⼰的Web应⽤,当然都希望在应⽤的开发上得到更⼤的投资回报。
因为互联⽹连接着世界各地,每个应⽤都可以⾯对国际的受众。
如果某个应⽤可以被本地化,那么它就可以被更多的访问者所访问。
特别是在多语⾔的国家,⽐如⽐利时、加拿⼤、瑞⼠,甚⾄美国尤其重要。
3)本地化那些内容:当⼀个软件产品需要在全球范围应⽤的时候,得考虑在不同的地域和语⾔环境下⾯的使⽤情况(也就是国际化问题),最简单的要求就是UI上的信息上能⽤本地化语⾔来显⽰,这主要包括操作界⾯的风格问题、提⽰和帮助语⾔的版本问题、界⾯定制个性化问题等。
Java语⾔内核基于Unicode2.1提供了对不同国家和不同语⾔⽂字的内部⽀持,由于先天的原因,Java对于国际化的⽀持远远要⽐C/C++来的优越。
Struts的国际化能⼒是它本⾝提供的,但为了更好的理解国际化问题,我们先从Java语⾔国际化本⾝的技术谈起。
⼆、⼏个术语1)i18n(Internationalization):就是internationalization, 国际化,由于⾸字母"i"和末尾字母"n"间有18个字符,所以简称i18n. internationalization指为了使应⽤程序能适应不同的语⾔和地区间的变化⽽不作系统性的变化所采取的设计措施,即:将依赖于语⾔和地区的代码与和语⾔⽆关的代码分离开来的过程。
⼀旦程序完成了这项⼯作,它只需很少的⼯作就可以适⽤于不同语⾔的国家和地区。
webSphere和TomCat的区别
(一)JSP的中文乱码问题其根源在于:Web容器(Tomcat)默认的字符处理编码是iso-8859-1,对于需要在浏览器页面上显示中文的JSP程序,但在程序中并没有指定中文的字符集,那么中文将在浏览器页面上显示为乱码。
当然,前面所说的是指在Tomcat服务器下的,其他服务器有些不是这样的,比如BEA Weblogic和IBM Websphere是从操作系统中取得默认的编码,然后按该编码来转码所有用户请求.Struts中文问题有三种:发送请求时的中文问题、处理响应结果的中文问题和国际化资源文件的中文问题。
1. 发送请求时的中文问题客户机向服务器发送请求时,根据所使用浏览器的不同可能会有不同的编码形式。
不过通常情况下在请求到达Web容器前要将之转码,转成某种固定的编码以方便Web应用的处理。
这种问题有三种处理方法:第一种(针对Tomcat 5 对POST请求有效,GET请求无效,因为Tomcat 5 对POST和GET请求时分别处理的)可以采用设置用户请求对象的编码形式,也就是以HttpServletRequest对象的编码的形式来进行用户请求的转码://将用户请求转码为GB2312、GB18030、GBK、UTF-8 等型,具体转为什么类型的编码以您的jsp文件的编码方式为准,java、jsp 、js 、css应保持一致的编码方式。
这里以GBK为例。
request.setCharacterEncoding("GBK");第二种(对GET请求有效),可以在Servlet中对用户输入的数据进行转码。
Web容器接受到一个请求时,它会将它发往某个处理的Servlet。
在Servlet中直接获取用户请求的数据,然后将之转码为需要的格式,例如把数据转换为GBK 格式:String username = request.getParameter("username");username = new String(username.getBytes("iso-8859-1”), "GBK");以上两种方法都是很常用的,但第一种是每个页面都要去修改,当JSP页面很多时比较麻烦,第二种就每个发送的数据都要转码,也很麻烦。
解决中文乱码的问题
protected boolean ignore = true; //在web.xml文件里定义filter时要用到此参数
public void destroy() {
// TODO Auto-generated method stub
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
out.print("JSP的中文处理");
%>
this.ignore = true;
else
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) {
String encoding = selectEncoding(request);
if (encoding != null)
Struts入门(Struts 框架响应客户请求的流程 国际化 异常)
Struts入门(Struts 框架响应客户请求的流程+国际化+异常)Struts入门(Struts 框架响应客户请求的流程+国际化+异常)Struts实际上是在JSPModel2上实现的一个MVC的框架。
模型:如JavaBean EJB控制器:ActionServlet Action视图:JSP Struts客户化标签前端控制器:ActionServlet控制器:Action模型:ActionFormBean控制器与模型之间的映射:ActionMapping转发:ActionForward错误与信息处理:ActionErrorActionForm Bean它也是一种JavaBean,除了一些JavaBean的常规方法,另外它还包含一些特殊的方法用于验证其中数据的完整性。
Struts利用ActionFormBean来进行View组件与Controller 组件之间表单数据的传递。
Struts框架把View组件接受的用户输入的表单数据保存在ActionForm bean之中,把它传递给Controller组件,Controller组件可以对ActionForm Bean中的数据进行修改。
Jsp文件使用Struts标签读取修改后的ActionForm Bean的信息,重新设置HTML表单。
对于采用Struts的Web应用,在Web应用启动时会加载并初始化控制器ActionServlet。
ActionServlet从struts-config.xml配置文件中读取配置信息,再把它们存放到ActionMappings对象中。
ActionServlet在接收到用户请求时会检查对应的ActionMapping的实例是否存在,如果不存在则会创建一个ActionMapping的实例,其中包含了把请求转发至那个Action的信息。
ActionServlet会根据配置文件检查Action对应的ActionForm的实例,如果ActionForm的实例不存在,则会创建一个ActionForm的对象,并将客户提交的表单数据保存到ActionForm中。
Struts架构下国际化的一种解决方案
20 0 8年 4月
保 定 学 院 学 报
J OURNAL OF BAODI NG NI U VERSTY I
Apr2 08 .0
Vo _ . l 21 No2 0 8 0 —0 30 17 —4 4 2 0 )20 7 —2
以下 方 法 .
本研究使用T m a o ct 作We H务器 ,c pe aa b ̄ E l s作Jv开发工具. i
实 现过 程 如 下 : 1 下载 s u 并 进 行 配置 , 里 不 再赘 述 . ) tt rs 这
2 建立 工程 : eap 目录下 建立 1 n ra oa文件 夹 , ) 在w b ps 个it nt nl e i 再在 i ent nl n rao a目录下建立 WE —N 文件夹 和 t i B IF WE —N / ass B I F l e文件夹 , cs 这些都是 1 sI程必需 的. 个Jp
将 所 有 * s 网页 中开 头处 加 入 .p j
< %@ p g a g a e ’ v ”cne ty e ” x hml h re= t 8 ae ln u g =' a o tnT p = t t t ;c ast uf ”%> j a e/ - 再 设 置 < t :t o ae = ”re > hml mllcl h t ”. u
一
中文版 . 随着业务量的增 加 , 司要为许多英文客户提供服务 , 以还要请编程人员再整体做一套英文版 . 公 所 而且 1后 3
每增加一种语言 , 都要完 整地做一套新版本。 这对于公 司和编程人员都是很大 的负担. 国际化( t tnlai , i e i a zt n 因 n ma 0 i 0
3 加载s us : ) t t 在WE —N 目录下建立 1 i 目录 , sus ea p \ B I Fl 目录下将 所有.r r 类 B IF 个l 子 b 在 t t xm lWE —N kb r — e i j 文件拷 a
struts04国际化
创建过滤器
建立一个实现Filter接口的类,实现三个接口方法: init方法建立设置操作 doFilter方法包含主要的过滤代码,其第一个参数 ServletRequest对象给过滤器提供了对进入的信息 的完全访问,在其参数FilterChain对象调用 doFilter方法vlet页面关联时,则 Servlet或JSP页面被激活 destroy方法进行清除操作
11
配置参数
在web.xml中配置 <filter> <filter-name>test</filter-name> <filter-class>web.TestFilter</filterclass> </filter> <filter-mapping> <filter-name>test</filter-name> <url-pattern>/hello</url-pattern> </filter-mapping>
6
Locale类
在浏览器中设置Locale
大多数Web浏览器允许用户配置 Locale。例如,对于微软的IE浏 览器,可以选择菜单【工具】→ 【Internet选项】→【语言】
7
配置多个资源文件
在struts-config.xml中通过key标识多个资源文件 <message-resources key=" moreResources“ parameter="com.systemmobile.example.ApplicationResources"/> 使用方法: <bean:message bundle="moreResources" key=―erName‖/>
struts2.2.1文件下载及中文乱码问题解决
Struts2下载文件实现的说明contentType内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片inputName下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取值为inputStream的属性需要编写getInputStream()方法contentDisposition文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。
取值为:attachment;filename="struts2.txt",表示文件下载的时候保存的名字应为struts2.txt。
如果直接写filename="struts2.txt",那么默认情况是代表inline,浏览器会尝试自动打开它,等价于这样的写法:inline;filename="struts2.txt"bufferSize下载缓冲区的大小contentType属性和contentDisposition分别对应着HTTP响应中的头Content-Type和Content-disposition头。
如下例:down.jsp<a href="<s:url value='test/fileDown.do?fileName=struts2配置参数详解.txt'> </s:url>">下载</a>struts.xml配置:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="com" namespace="/test" extends="struts-default"><action name="fileDown" class=".down.FileDown"><result type="stream"><!-- 下载文件类型定义--><param name="contentType">application/octet-stream</param><!-- 下载文件输出流定义--><param name="inputName">inputStream</param><!-- 下载文件处理方法--><param name="contentDisposition">attachment;filename="${fileName}"</param><!-- 下载文件的缓冲大小--><param name="bufferSize">4096</param></result></action></package></struts>文件下载Action:public class FileDown extends ActionSupport {private String fileName;public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public InputStream getInputStream() throws UnsupportedEncodingException {return ServletActionContext.getServletContext().getResourceAsStream( "/WEB-INF/" + fileName);}public String execute(){System.out.println(fileName+"----------");return "success";}}这个例子运行可,可能会出现:下载页面的文件名为:fileDown.do或htm等情况。
基于Struts的Web应用国际化通用架构
在全世界 范围 内发 布产 品信 息 、 引客户 的最为 有效 吸
的 手 段 。 如 何 开 发 支 持 多 国 语 言 、 际 化 的 应 用 成 为 国 W e 用 开 发 的必 然 趋 势 与 重 要 课 题 。 b应
ቤተ መጻሕፍቲ ባይዱ系统 编 码 方 式和 数据 流 问的编 码 转 换是 国际化 We b应 用 首 先 要 解 决 的 问 题 。不 同 于 本 地 化 系 统 , 国 际化系统不 能采 用语言受 限字符 编码方 式 , 其采用 的 编码 必须满 足 国际化的要求 , 能够支 持各种语 言 。 目 前 .在 国际 化 系统 中 ,通 常 采 用 U ioe字符 集 的 nc d
二
We b应用 的 国际化需要解决 的 问题 主要包 括 :第一 、 五 We b系统 字 符编码 方式 的选 择 ; 第二 、 客户端 与应 用 三 之 间如何 正确地进 行数据 的输 入, 出交互 , 输 即输入 、
国际化 应 用程 序 的核心 能力 是 应用能 根据 客 户 的语 言环境 提 供相 应 的语言 相关 界 面 , 因此 , 应用 中
一
际化要求 的字 符集, 它将 世界 上 的所 有字 符 映射成一 个 唯一 的代码 点( d on) c epit o 。在将 U ioe表示 的字 ncd 符 进行存储时 , 需要采用一定 的编码 方式 , 中 U F 8 其 T - 是 Uncd io e字 符集 的一种 可变 长 的编码 方式 , 多 6 最
个 字 节 . 于 1 7的 字 符 用 一 个 字 节 表 示 , A CI 小 2 与 SI
个 国际化 We b应用 ,针对 多种 语言 版本 只有 一个
系统实 现 , 系统可 以根据 客户 端的 系统语 言环境 进行
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要:本文主要解决由字符集编码冲突引起的中文显示和中文入库(数据库)问题。
作者:StephenCat.WJJ @ GZ,2006年4月13日。
作者声明:不对读者使用本文内容所引起的影响和后果承担任何责任。
转载请注明来源于本 Blog。
作者保留著作权。
本文试验环境:运行:JDK 1.5 update 5,Eclipse 3.1.2,MyEclipse 4.1.1 GA,Tomcat 5.5.9,MySQL 5.0框架:Struts 1.2,Hibernate 3.0Eclipse 编写的文件默认字符编码(Encoding,下同)都是欧洲标准的单字节的 ISO8859-1,不能支持双字节的中文字符编码,包括 GB2312 和 GBK。
解决方法是统一采用 UTF-8 编码。
解决步骤如下:1. 声明 JSP 的字符集为 UTF-8在每个 JSP 文件的头部加上这一行:<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>2. 建立预备资源文件ApplicationResources_PRE.properties1)使用Eclipse 建立一个空白的ApplicationResources_PRE.properties 文件。
2)在包资源管理器中右键单击新建立的资源文件,点击选择“属性”,打开属性配置对话框。
3)在“文本文件编码”中选择UTF-84)按“确定”或“应用”。
5)编辑这个预备资源文件,把国际化中文信息写进去。
3. 生成正式的ApplicationResources.properties1)假设JDK 安装目录为C:\Java\jdk1.5.0_052)假设预备和正式的国际化资源文件都放在F:\workspace\SomeProject\src 目录中3)进入命令行方式,执行以下命令:cd C:\Java\jdk1.5.0_05\binF:cd \workspace\SomeProject\srcc:native2ascii -encoding UTF-8 ApplicationResources_PRE.properties ApplicationResources.properties c:native2ascii -encoding UTF-8 ApplicationResources_PRE.propertiesApplicationResources_zh.properties4)结果是生成了新的ApplicationResources.properties (覆盖原文件),其内容可能是这样的:ername=\u7528\u6237\u540dlogin.password=\u5bc6\u7801\ufffd\ufffd\ufffd\ufffd等价于预备资源文件中的:ername=用户名[回车]login.password=密码[回车]只要最后一行有[回车] 的话,自动产生的\ufffd\ufffd\ufffd\ufffd 就不会影响页面显示。
5)使用Eclipse,在包资源管理器中分别用右键单击ApplicationResources.properties 和ApplicationResources_zh.properties,点击选择“属性”,打开属性配置对话框。
在“文本文件编码”中选择UTF-8,按“确定”保存。
6)重新部署Web 应用程序到应用服务器。
7)经过以上步骤,就解决了JSP 页面的中文显示问题。
补充:DOS 批处理文件示例(放在F:\workspace\SomeProject 目录)@echo offcd C:\Java\jdk1.5.0_05\binf:cd \workspace\Xnews\src\org\stephencat\xnewsecho Creating ApplicationResources.propertiesecho.cd c:echo.cd f:echo.echo c:native2ascii -encoding UTF-8 ApplicationResources_xx.properties ApplicationResources.propertiesecho c:native2ascii -encoding UTF-8 ApplicationResources_xx.properties ApplicationResources_zh.propertiesecho.c:native2ascii -encoding UTF-8 ApplicationResources_xx.properties ApplicationResources.propertiesc:native2ascii -encoding UTF-8 ApplicationResources_xx.properties ApplicationResources_zh.propertiesecho.echo Done.echo.pause以下解决Form 提交中文及中文入库问题4. 建立一个Filter 类样板文件在%Tomcat安装目录%\webapps\servlets-examples\WEB-INF\classes\filtersFilter 类的内容如下:package org.stephencat.struts.util;import javax.servlet.*;import java.io.IOException;/*** <p>Filter that sets the character encoding to be used in parsing the* incoming request, either unconditionally or only if the client did not* specify a character encoding. Configuration of this filter is based on* the following initialization parameters:</p>* <ul>* <li><strong>encoding</strong> - The character encoding to be configured* for this request, either conditionally or unconditionally based on* the <code>ignore</code> initialization parameter. This parameter* is required, so there is no default.</li>* <li><strong>ignore</strong> - If set to "true", any character encoding* specified by the client is ignored, and the value returned by the* <code>selectEncoding()</code> method is set. If set to "false,<BR>&NBSP;*&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;< CODE>SELECTENCODING()< style="COLOR: #808080" SPAN >?< SPAN>encoding"</SPAN>ignore"</SPAN>true"</S PAN>yes"</SPAN>.encoding);}}//EOC5. 编辑web.xml 站点配置文件加入以下内容:<filter><filter-name>Set Character Encoding</filter-name><filter-class>org.stephencat.struts.util.SetCharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>ignore</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>Set Character Encoding</filter-name><servlet-name>action</servlet-name></filter-mapping>6. 设置MySQL 数据库的默认字符编码为UTF-8。