struts在eclipse下是如何解决乱码的,比如在struts下jsp表单jsp提交表单乱码,jsp有设置p

Eclipse下开发struts完整解决乱码问题-中国学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
Eclipse下开发struts完整解决乱码问题
来源:互联网 更新时间: 17:35:42 责任编辑:王亮字体:
  struts的资源文件的中文问题让我们十分恼火,怎么整就使不出来中文,全是???或杂七杂八的一些看不懂的蝌蚪文。话不多说,看下面重点
  主要有三个问题:
  1,struts中资源文件中如果value为中文,显示乱码
  解决办法:使用eclipse插件Properties Editor
  更新站点http://propedit.sourceforge.jp/eclipse/updates/(建议自动更新)
  步骤:
  eclipse下的“帮助”/“软件更新”/”查找并安装“/选择第二项/“新建远程站点”/name随意写 url输入 http://propedit.sourceforge.jp/eclipse/updates/
  2,在文本域里输入中文显示乱码
  解决办法:使用servlet过滤器filter
  最简单的可以借用tomcat下面的filters.SetCharacterEncodingFilter在自己的web.xml配置中加入tomcat中servlet_examples相应配置(高手可以自己配!)
  本人配置如下
  SetCharacterEncoding
  filters.SetCharacterEncodingFilter
  encoding
  SetCharacterEncoding
  3,从某些数据库里读出乱码
  解决办法:把你要显示成中文的部分重新编码
  例如:
&&while&(rs.next())   {   String&col1&=&rs.getString(1);   String&col2&=&rs.getString(2);   String&col3&=&rs.getString(3);   float&col4&=&rs.getFloat(4);   //convert&character&encoding   col1=new&String(col1.getBytes("ISO-8859-1"),"GB2312");   col2=new&String(col2.getBytes("ISO-8859-1"),"GB2312");   col3=new&String(col3.getBytes("ISO-8859-1"),"GB2312");   }
相关文章:
<a href="/cse/search?q=<inputclass="s-btn"type="submit"text="<inputclass="s-btn"type="submit"text="<buttonhidefocusclass="s-btnjs-ask-btn"text="我要提问
<a href="/cse/search?q=struts框架中jsp页面的form表单提交问题_百度知道1931人阅读
【J2EE项目】(29)
&&&&&&&&乱码是让人头疼的一件事情,您是否和我一样也遇到过这样的情况,向数据库中添加一条记录,记录是添加上了,到数据库里一看,数据凌乱了。。。顿时我也凌乱了。。。把html文件改为jsp文件,添加了一下jsp page指令重新打开同时发现所有的中文都七十二变了。。是否。。下面我们就一起看看java web中的中文乱码问题。
1、JSP页面出现的中英文乱码:
&&&&&&&&我们的PageCharset.jsp页面代码如下所示:
&%@ page language=&java& import=&java.util.*&%&
&title&中文显示示例&/title&
中文显示的示例。
out.print(&这里是用jsp输出的中文&);
&&&&&&&&当我们在保存我们的文件的时候会出现下面的提示:
&&&&&&&&整因为在我们的MyEclipse中默认的编码为,而ISO-8859-1不支持中文的编码,所以jsp页面代码如果出现中文就不能保存了。对于这样的错误,我们只要在页面上加上支持中文的编码&#26684;式就可以了,在jsp页面中加上pageEncoding=“gb2132”
支持中页面的编码&#26684;式就可以了。这样我们就能正常保存我们的jsp源文件了。
2、URL传递参数中文乱码
&%@ page language=&java& import=&java.util.*& pageEncoding=&gb2312&%&
&title&URL传递参数中英文处理示例&/title&
String param = request.getParameter(&param&);
&a href=&URLCharset.jsp?param='中文'&&请单击这个链接&/a&
您提交的这个参数为:&%=param %&
&&&&&&&&启动tomcat运行结果出现url传递的中文乱码:
&&&&&&&&这里我们需要配置tomcat服务器文件,才能解决这个问题。具体方法是,在tomcat的conf目录下找到server.xml配置文件,找到如下代码
&Connector port=&8080& protocol=&HTTP/1.1&
connectionTimeout=&20000&
redirectPort=&8443&
&&&&&&&&在后面添加上编码方式,URIEncoding=&gb2312& 重新启动tomcat问题就解决了。
3、表单提交中问乱码
&&&&&&&&对于表单中提交的数据,可以用request.getPraramter(&&);方法来获取,但是当表单中出现中文数据的时候就会出现乱码。
&&&&&&&&我们的提交表单的页面,FormCharset.jsp页面如下:
&%@ page language=&java& contentType=&text/ charset=GB18030&
pageEncoding=&GB18030&%&
&!DOCTYPE html PUBLIC &-//W3C//DTD HTML 4.01 Transitional//EN& &http://www.w3.org/TR/html4/loose.dtd&&
&meta http-equiv=&Content-Type& content=&text/ charset=GB18030&&
&title&Form中文处理示例&/title&
下面是表单内容:
&form action=&AcceptFormCharset.jsp& method=&post&&
用户名:&input type=&text& name=&userName& size=&10& /&
码:&input type=&password& name=&password& size=&10&/&
&input type=&submit& value=&提交&/&
&&&&&&&&我们的AcceptFormCharset.jsp页面:
&%@ page language=&java& contentType=&text/ charset=GB18030&
pageEncoding=&GB18030&%&
&!DOCTYPE html PUBLIC &-//W3C//DTD HTML 4.01 Transitional//EN& &http://www.w3.org/TR/html4/loose.dtd&&
&meta http-equiv=&Content-Type& content=&text/ charset=GB18030&&
&title&Form中文处理示例&/title&
下面是表单提交以后request取到的表单的数据:&br&
out.println(&表单输入的userName&#20540;为:& &#43; request.getParameter(&userName&) &#43;&&br&&);
out.println(&表单输入的pasword&#20540;为:& &#43;request.getParameter(&password&) &#43; &&br&&);
&&&&&&&&提交表单:
&&&&&&&&结果如下:
&&&&&&&&我们看到我们在表单中的中文数据出现了乱码,为什么楚翔这种情况呢?是因为我们的tomcat中,对于以post方式提交的表单编码&#26684;式默认为ISO-8859-1的编码&#26684;式,而这种编码&#26684;式是不能编码中文的,所以就会出现乱码的现象了。对于这种情况,我们可以对表单中的数据进行处理,在取得表单参数的时候设置编码方式,我们更改了我们的接受表单数据的页面如下所示:
String userName = request.getParameter(&userName&);
String passWord = request.getParameter(&password&);
out.println(&表单输入的userName&#20540;为:& &#43;
new String(userName.getBytes(&ISO-8859-1&),&gb2312&)&#43;&&br&&);
out.println(&表单输入的pasword&#20540;为:& &#43; new String(passWord.getBytes(&ISO-8859-1&),&gb2312&)&#43;&&br&&);
&&&&&&&&这样就得到我们想要的效果啦:
&4、数据库操作中文乱码
&&&&&&&&我们在建立数据库的时候,最好是能选择支持中文编码&#26684;式,最好是能和jsp页面编码&#26684;式保持一致,这样就尽可能的减少数据库操作中文乱码的问题,最开始的连接数据库的时候,编写好数据库的编码策略,也就是使用这种形式的URL:jdbc:oracle:thin:@localhost:1521:TEST;userEnicode=characterEncoding=gb2312;
这样我们选择的数据库的编码和我们的jsp编码就一致了。
写入到数据库的时候,数据库中中文乱码:
&&&&&&&&但是如果我们在最开始的时候没有对数据库的编码进行设置,并且我们的数据库中已经有大量的数据的话,我们再向数据库中写入中文数据,数据库中的中文显示为乱码。在写入数据的时候出现乱码,是因为我们在处理表单的时候没有对字符的编码设置,对于这种情况,我们在jsp中或servlet中加入:
rquest.setCharacterEncoding(&gb2312&);//处理表单请求的时候设置编码。
&&&&&&&&这样再看我们的数据库,插入的中文字段就不会乱码了。
从数据库中读出中文乱码:
&&&&&&&&数据库中的中文出现乱码,就是在读取数据库的时候进行转码,这样显示就不会乱码了。我们整理这样的一个转码函数:
public String encoder(String str) throws UnsupportedEncodingException
&&&&&&&&&& String result = new String(str.getBytes(&ISO-ISO-8859-1)&),&gb2312&);
5 在myeclipse开发工具中打开中文显示乱码
&&&&&&&&在myeclipse中默认的编码方式为ISO-8859-1,所以打开有其他编译器编码的jsp页面就会出现乱码,是因为两个编译器保存源文件编码&#26684;式不同,在UltralEdit可以支持中文,但是在Eclipse对jsp文件的保存方式为ISO-8895-1,这种编码不支持中文,所以就会出现乱码。
&&&&&&&&对于这种情况,我们可以更改myeclipse默认的编码方案,myeclipse-&Window-&Preferences-&General-&Content types-&Test-&JSP
&&&&&&&&这样问题就解决啦!
6 Filter批量设置编码&#26684;式
&&&&&&&&我们对于每一个jsp或servlet我们都要设置编码&#26684;式,效率有些低,我们的servlet的Filter解决了我们的问题。在前篇写过Filter的解决中文乱码问题的文章,在这里就不赘述了。&
&&&&&&&&需要强调的一点,开始使用java model1模型的时候,我们在web.xml中配置只需要配置好jsp页面就可以了,在model2模型中我们使用servlet作为控制器,我们就需要在Filter的配置文件web.xml中配置好servlet的设置,对所有的servlet处理的表单编码进行设置。
&filter-name&CharsetEncodingFilter&/filter-name&
&filter-class&com.bjpowernode.drp.util.filter.CharsetEncodingFilter&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&GBK&/param-value&
&/init-param&
&filter-mapping&
&filter-name&CharsetEncodingFilter&/filter-name&
&url-pattern&*.jsp&/url-pattern&
&/filter-mapping&
&filter-mapping&
&filter-name&CharsetEncodingFilter&/filter-name&
&url-pattern&/servlet/*&/url-pattern&
&/filter-mapping&
&&&&&&&&学习了乱码的各种情况,以后出现乱码再也不害怕了,即使出现新的乱码问题,我们就会这样分析,编译器本身是什么编码&#26684;式的,是和本身的编码不同,还是设置了静态页面的编码,没有设置一些动态数据的编码;是数据库的编码和自己传递给数据库的编码不同吗?等等我们学会了他们之间怎么相互去匹配,程序员如何翻译的这个过程.......加油!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:732171次
积分:9677
积分:9677
排名:第1230名
原创:222篇
评论:510条
阅读:9119
阅读:38529
文章:10篇
阅读:14182
文章:21篇
阅读:164195
阅读:4385627463人阅读
java Web(11)
原来处理下载的代码如下:
response.setHeader(&Content-Disposition&, & filename=& &#43; java.net.URLEncoder.encode(fileName, &UTF-8&));
下载的程序里有了这句,一般在IE6的下载提示框上将正确显示文件的名字,无论是简体中文,还是日文。
一. 上面方式,也就是先用URLEncoder编码,当中文文字超过17个时,IE6 无法下载文件。
这是IE的bug,参见微软的知识库文章 KB816868 。
原因可能是因为ie在处理 Response Header 的时候,对header的长度限制在150字节左右。
而一个汉字编码成UTF-8是9个字节,那么17个字便是153个字节,所以便会报错。
微软提供了一个补丁。这个补丁需要先安装ie6 sp1。
二. 我尝试使用 javamail 的MimeUtility.encode()方法来编码文件名,也就是编码成 =?gb2312?B?xxxxxxxx?= 这样的形式,
并从 RFC1522 中找到对应的标准支持。不过很遗憾,IE6并不支持这一个标准。
我试了一下,Firefox是支持的。
三. 按网上很多人提供的解决方案:将文件名编码成ISO284;乎是有效的解决方案,代码如下:
response.setHeader( &Content-Disposition&, &filename=&&#43;new String(fileName.getBytes(&gb2312&), &ISO8859-1& ) );
在确保附件文件名都是简体中文字的情况下,那么这个办法确实是最有效的,不用让客户逐个的升级IE。
如果台湾同胞用,把gb2312改成big5就行。但现在的系统通常都加入了国际化的支持,普遍使用UTF-8。
如果文件名中又有简体中文字,又有繁体中文,还有日文。那么乱码便产生了。
另外,在我的电脑上Firefox (v1.0-en)下载也是乱码。
折中考虑,我结合了一、三的方式,代码片断如下:
&&&&&&& String fileName = URLEncoder.encode(atta.getFileName(), &UTF-8&);
&&&&&&& /*
&&&&&&&& * see /default.aspx?kbid=816868
&&&&&&&& */
&&&&&&& if (fileName.length() & 150) {
&&&&&&&&&&& String guessCharset = xxxx /*根据request的locale 得出可能的编码,中文操作系统通常是gb2312*/
&&&&&&&&&&& fileName = new String(atta.getFileName().getBytes(guessCharset), &ISO8859-1&);
&&&&&&& response.setHeader(&Content-Disposition&, & filename=& &#43; fileName);
暂且不考虑 Firefox。
/////////////////////
下面是解决文件名空&#26684;问题
String fileName = StringUtils.trim(file.getName());
String formatFileName = encodingFileName(name);//在后面定义方法encodingFileName(String fileName);
response.setHeader(&Content-Disposition&, & filename=& &#43; formatFileName );
//处理文件名中出现的空&#26684;&&
//其中%20是空&#26684;在UTF-8下的编码
public static String encodingFileName(String fileName) {
&&&&&&& String returnFileName = &&;
&&&&&&& try {
&&&&&&&&&&& returnFileName = URLEncoder.encode(fileName, &UTF-8&);
&&&&&&&&&&& returnFileName = StringUtils.replace(returnFileName, &&#43;&, &%20&);
&&&&&&&&&&& if (returnFileName.length() & 150) {
&&&&&&&&&&&&&&& returnFileName = new String(fileName.getBytes(&GB2312&), &ISO8859-1&);
&&&&&&&&&&&&&&& returnFileName = StringUtils.replace(returnFileName, & &, &%20&);
&&&&&&&&&&& }
&&&&&&& } catch (UnsupportedEncodingException e) {
&&&&&&&&&&& e.printStackTrace();
&&&&&&&&&&& if (log.isWarnEnabled()) {
&&&&&&&&&&&&&&& (&Don't support this encoding ...&);
&&&&&&&&&&& }
&&&&&&& return returnFileN
Struts2下载文件实现的说明
  contentType
  内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片
  inputName
  下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取&#20540;为inputStream的属性需要编写getInputStream()方法
  contentDisposition
  文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。取&#20540;为:
  filename=&struts2.txt&,表示文件下载的时候保存的名字应为struts2.txt。如果直接写filename=&struts2.txt&,那么默认情况是代表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&
&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&&
&&&&&&filename=&${fileName}&
&&&&&&/param&
&!--&下载文件的缓冲大小&--&
&&&&&&&param&name=&bufferSize&&4096&/param&
&&&&&/result&
&&&&/action&
&&&&/package&
文件下载Action:
&&&&&&&&&&&&&public&class&FileDown&extends&ActionSupport&{
private&String&fileN
public&String&getFileName()&{
&&&return&fileN
public&void&setFileName(String&fileName)&{
&&&this.fileName&=&fileN
public&InputStream&getInputStream()&throws&UnsupportedEncodingException&{
&&&&return&ServletActionContext.getServletContext().getResourceAsStream(
&&&&&&/WEB-INF/&&&#43;&fileName);
public&String&execute(){
&&&System.out.println(fileName&#43;&----------&);
&&&return&&success&;
这个例子运行可,可能会出现:下载页面的文件名为:fileDown.do或htm等情况。
这在实际保存时,要改成相应的文件名,在不知道原文件类型情况下就无法改了。
这种情况,可以这样解决:
&&&&&&&将struts.xml配置改为:
&&&&&&&&&&&&&&&?xml&version=&1.0&&encoding=&UTF-8&&?&
&!DOCTYPE&struts&PUBLIC
&&&&&-//Apache&Software&Foundation//DTD&Struts&Configuration&2.0//EN&
&package&name=&com&&namespace=&/test&&extends=&struts-default&&
&result&type=&stream&&
&!--&下载文件类型定义&--&
&&&&&&&param&name=&contentType&&
&&&&&&application/octet-stream
&&&&&&/param&
&!--&下载文件输出流定义&--&
&&&&&&&param&name=&inputName&&inputStream&/param&
&&&&&&!--&下载文件的缓冲大小&--&
&&&&&&&param&name=&bufferSize&&4096&/param&
&&&&&/result&
&&&&/action&
&&&&/package&
文件下载action改为:
public&class&FileDown&extends&ActionSupport&{
private&String&fileN
public&String&getFileName()&{
&&&return&fileN
public&void&setFileName(String&fileName)&{
&&&this.fileName&=&fileN
public&InputStream&getInputStream(){
&&&HttpServletResponse&response&=&ServletActionContext.getResponse();
&&&&response.setHeader(&Content-Disposition&,&&fileName=&&#43;
&&&&&fileName);
&&&return&ServletActionContext.getServletContext().getResourceAsStream(
&&&&&&/WEB-INF/&&&#43;&fileName);
public&String&execute(){
&&&System.out.println(fileName&#43;&----------&);
&&&return&&success&;
这样就行了。
如果下载文件名称是中文,会出现乱码现象,解决方案:
将上面action相应的改为如下两步
(1)设置:
&&&&&&&&&&&&public&void&setFileName(String&fileName)&throws&UnsupportedEncodingException&{
&&&&&&&&&&&&&&&&&&this.fileName&=&new&String(fileName.getBytes(&ISO-8859-1&),&UTF-8&);
&&&&&&&&&&&}
(2)设置:
&&&&&&&&&&&response.setHeader(&Content-Disposition&,&&fileName=&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&#43;&java.net.URLEncoder.encode(fileName,&UTF-8&));
问题解决。
分享出来。。。希望能帮到大家
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2931383次
积分:29403
积分:29403
排名:第126名
原创:210篇
转载:41篇
评论:3616条
阅读:131215
阅读:64226
文章:12篇
阅读:129326
文章:18篇
阅读:153429
文章:14篇
阅读:133250
阅读:61657
文章:112篇
阅读:1324531
(1)(1)(1)(1)(8)(1)(5)(1)(3)(1)(4)(1)(1)(2)(3)(4)(9)(13)(10)(7)(2)(8)(29)(25)(35)(15)(14)(6)(5)(9)(7)(7)(12)问题:(jsp)Eclipse下使用了Struts2部署JavaWeb项目遇到的问题
使用了struts2的j框架之后,无法正常访问webapps根目录下的资源文件,一直显示404,以下是做过的尝试:
1.删除原有的tomcat,并从磁盘上将其删除,重新解压了一个tomcat,放置到另外的磁盘位置——还是无法访问
2.删除eclipse工作空间下的.metadata文件夹——可以正常访问普通WEB项目的资源文件
3.导入struts2的jar包之后——无法访问webapps根目录下的资源解决方案1:
是否配置了拦截了直接访问jsp&,&&就是&需要请求控制器&然后有控制器返回页面
以上介绍了“(jsp)Eclipse下使用了Struts2部署JavaWeb项目遇到的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:/itwd/1444368.html
上一篇: 下一篇:

我要回帖

更多关于 struts2表单提交乱码 的文章

 

随机推荐