Tocmat的中文问题解决方法总结:mxz

解决tomcat中文乱码问题 解决tomcat中文乱码问题,有详细的解释说明,希望对需要的人有所帮助 立即下载

以下内容转自

http://blog.youkuaiyun.com/mxz391/archive/2007/06/27/1668818.aspx

http://blog.youkuaiyun.com/diaokegang/archive/2005/04/25/362653.aspx等文章

及自己的总结

问题描述:

1 表单提交的数据,用request.getParameter(“xxx”)返回的字符串为乱码或者??
2 直接通过url如http://localhost/a.jsp?name=中国,这样的get请求在服务端用request. getParameter(“name”)时返回的是乱码;按tomcat4的做法设置Filter也没有用或者用 request.setCharacterEncoding("GBK");也不管用

原因:
1 tomcat的j2ee实现对表单提交即post方式提示时处理参数采用缺省的iso-8859-1来处理
2 tomcat对get方式提交的请求对query-string 处理时采用了和post方法不一样的处理方式。(与tomcat4不一样,所以设置setCharacterEncoding(“gbk”))不起作用。

解决方法:

一。首先所有的jsp文件都加上: 所有JSP改为<%@ page language="java" pageEncoding="GBK" %>


1 实现一个Filter.设置处理字符集为GBK。(在tomcat的webapps/servlet-examples目录有一个完整的例子。请参考web.xml和SetCharacterEncodingFilter的配置。)

1) 只要把%TOMCAT安装目录%/ webapps/servlets-examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.class 文件拷到你的webapp目录/filters下,如果没有filters目录,就创建一个。

2)在你的web.xml里加入如下几行:


<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3)完成.


import  javax.servlet.Filter;
import  javax.servlet.FilterChain;
import  javax.servlet.FilterConfig;
import  javax.servlet.ServletException;
import  javax.servlet.ServletRequest;
import  javax.servlet.ServletResponse;
import  java.io.IOException;

public   class  SetCharacterEncodingFilter  implements  Filter  {
    
protected String encoding = null;

    
protected FilterConfig filterConfig = null;

    
protected boolean ignore = true;

    
public void init(FilterConfig filterConfig) throws ServletException {
        
this.filterConfig = filterConfig;
        
this.encoding = filterConfig.getInitParameter("encoding");
        String value 
= filterConfig.getInitParameter("ignore");
        
if (value == null)
            
this.ignore = true;
        
else if (value.equalsIgnoreCase("true"))
            
this.ignore = true;
        
else
            
this.ignore = false;
    }


    
public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) 
throws IOException, ServletException {
        
// TODO 自动生成方法存根
        if (ignore || (request.getCharacterEncoding() == null)) {
            String encoding 
= selectEncoding(request);
            
if (encoding != null)
                request.setCharacterEncoding(encoding);
        }

        chain.doFilter(request, response);
    }


    
public void destroy() {
        
// TODO 自动生成方法存根
        this.encoding = null;
        
this.filterConfig = null;
    }


    
protected String selectEncoding(ServletRequest request) {
        
return (this.encoding);
    }

}



 

二、写一个过滤器类,在web.xml中配置(但是这是针对post提交的)。(过滤器类代码如上:)

<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

三、get方式的参数。针对URL的方法就是--修改tomcat的server.xml文件中URIEncoding。这个方法会改变服务器

1) 打开tomcat的server.xml文件,找到区块,加入如下一行:
URIEncoding=”GBK”
完整的应如下:

<Connector
port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="GBK"
/>

2)重启tomcat,一切OK。

四、JSP页编码为UTF-8,web.xml和servel.xml均未做改动

(一)、对于参数为中文的,且不用分析的,如下例:

1.JSP页

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<a href="<%=request.getContextPath() %>/BbsCtrl?page=ShowPersonalPage&username=<%=java.net.URLEncoder.encode(viewUserInfo.getUserName())%>">管理</a>

2.处理的JAVA类

public   class  ShowPersonalPage   extends  HtmlPage  {
 
public String print() throws Exception {
  String n
=req_.getParameter("username"); //取参数 
  String  userName=null;
  
if(n!=null&&!n.equals("")){
   userName 
=  new String(req_.getParameter("userName").getBytes("ISO8859-1"));
  }
 
}

 

(二)、对于参数为中文的,且用分析的,如下例:

JSP页:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<a  href="<%=request.getContextPath() %>/u/<%=viewUserInfo.getUserName() %>">家庭主页</a>

处理的JAVA文件

package  util;
import  javax.servlet.http.HttpServlet;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;
import  javax.servlet.ServletException;
import  java.io.IOException;
import  java.sql.Connection;
import  java.sql.SQLException;
import  util.HtmlPage;
import  util.Mail;
import  util.PubFun;
public   class  Test  extends  HttpServlet  {

    
private static final long serialVersionUID = 8135385272669981701L;

    
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      String jspStr 
= "webapp/sign_in.jsp";
      HtmlPage page 
= null;

      resp.setContentType(
"text/html; charset=UTF-8");
      
//获取uri      
      String requestUri = "";
      requestUri 
= java.net.URLDecoder.decode(new String(req.getRequestURI().getBytes("ISO8859_1")),"utf-8");
      
int isPos = requestUri.indexOf("/u/");
      
if (isPos == -1) {
          resp.sendRedirect(
"http://www.xxx.com");
          
return;
      }
 else {
          
//截取userName
          int beginPos = isPos + 3;
          String userName 
= requestUri.substring(beginPos);
          
int endPos = userName.indexOf("/");
          
if (endPos > 0) {
              userName 
= userName.substring(0, endPos);
          }

          
if (userName.equals("")) {
              resp.sendRedirect(
"http://www.xxx.com");
              
return;
          }
 else {
            req.setAttribute(
"userName",userName);
            System.out.println(userName);
            page 
= (HtmlPage) new page.user.ShowPersonHomePage();
          }

      }

      
      
if (page == null) {
        resp.sendRedirect(jspStr);
        
return;
      }

      Connection conn 
= null;
      
try {
        conn 
= PubFun.getConn(true);
        page.prepare(conn, req, resp);
        jspStr 
= page.print();
      }
 catch (Exception e) {
          Mail.send(
"xxx@sohu.com", "xxx@sohu.com",req.getRequestURI()+"?"+ req
                    .getQueryString(), e.getMessage(), 
null, "xxx@sohu.com",
                    
"xxx");
        req.setAttribute(
"inf", e.toString());
        jspStr 
= "/webapp/view_inf.jsp?for_user=1";
      }
 finally {
        
if (conn != null) {
          
try {
            conn.close();
          }
 catch (SQLException e2) {
            System.out.println(
"HomeMapCtrl conn.close() falied");
          }

        }

      }

      
if(jspStr!=null){
          req.getRequestDispatcher(jspStr).forward(req, resp); 
      }

  }


  
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      doGet(req, resp);
  }



}

 

public   class  ShowPersonHomePage  extends  HtmlPage  {

 
public String print() throws Exception {

//这个类根据逻辑需具体处理工作

}

---------------------------------------------------------------------------------------------------------------------------------------------------

五、同时介绍另一个将长访问地址转为短访问地址的示例:(与上例/u/的访问形式相仿,与本文中文编码解决方式没有关联)

JSP页

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<a href="<%=request.getContextPath()%>/msg/<%=thr.getThreadId()%>" class="zifont"><%=topic.getHeading()  %></a>
即http://www.xxx.com/msg/2212这种访问方式

JAVA文件处理

 

/**
 * 迈兴志 2006-12-4 解析URL地址 BBS-->Msg
 
*/

import  java.io.IOException;

import  util.Mail;
import  javax.servlet.ServletException;
import  javax.servlet.http.HttpServlet;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;

public   class  MsgCtrl  extends  HttpServlet  {

    
private static final long serialVersionUID = 0;

    
public void doGet(HttpServletRequest req, HttpServletResponse resp)
            
throws ServletException, IOException {
        String jspStr 
= "webapp/sign_in.jsp";

        resp.setContentType(
"text/html; charset=UTF-8");
        String requestUri 
= req.getRequestURI();
        String id 
= requestUri.substring(requestUri.indexOf("/msg/") + 5,
                requestUri.length());
        String info
="您查看的页不存在,请确定";
        
long tid2 = -1;

        
try {
            tid2
=this.getLongParameter(id,-1);
            
if(tid2==-1){
                req.setAttribute(
"inf", info);
                req.getRequestDispatcher(
"/webapp/view_inf.jsp").forward(req,resp);
                
return ;
            }

        }
 catch (Exception e) {
            e.printStackTrace();
            
return ;
        }

        jspStr 
= "/BbsCtrl?page=ShowMessagePage&fid=0&tid=" + tid2;        
//        jspStr = "/webapp/bbs/bbs_thread.jsp?tid="+tid2+"&fid="+fid;
        

        
if (jspStr != null) {
            req.getRequestDispatcher(jspStr).forward(req, resp);
        }

    }


    
public void doPost(HttpServletRequest req, HttpServletResponse resp)
            
throws ServletException, IOException {
        doGet(req, resp);
    }


    
protected long getLongParameter(String key, long i)
            
throws Exception {        
        
if ((key == null) || (key.trim().length() == 0)) {
            
return i;
        }

        
try {
            
return Long.parseLong(key.trim());
        }
 catch (NumberFormatException exc) {
            System.out.println(
"格式转换错误,不是真正的长整型"+"--------------------MsgCtrl类");
            
return -1;            
            
        }

    }


    
}

 

 

十五、SAP-物料需求计划(MRP) 业务逻辑、功能讲解、图文解析、章节总结 阅读详情

相关推荐

Oracle PLM Agile936 单点登录配置方式

Oracle PLM Agile936 单点登录配置方式

Jay的个人博客 824

tomcat乱码的几种解决

查看是否ConsoleHandler.encoding=utf-8,如果是则说明tomcat编码没有问题,出问题的是idea编码,如果不等于utf-8,则改为utf-8.一般情况下此时可以正常输出tomcat日志信息。***乱码原因:***服务器发给浏览器的数据默认是按照ISO-8859-1编码,浏览器接收到数据后按照默认的字符集进行解码后显示,如果浏览器的默认解码字符集不是ISO-8859-1,就出现乱码。查看浏览器端发送的JSP/HTML的编码格式是否为UTF-8,若不是,改为UTF-8。

qq_45093483的博客 9万+

SECS/GEM协议库及开源代码

以下是在开发SECS/GEM协议过程中,在网络上搜集协议实现资源,希望对SECS/GEM协议感兴趣的同学能有所帮助。 开源代码 freesecs FREESECS 是一个开源的SEMI SECS协议库,采用C++语言实现,可运行于Linux, MacOS X, NetBSD。 实现协议:E37.1、E5 开源地址:freesecs download | SourceForge.net 下载地址:https://download.youkuaiyun.com/download/BT_LEO/24305429

码农的历程 9936

tomcat乱码问题解决

方式2 : 设置Tomcat10.1.7的URI解析字符集和GET请求发送时所使用URL转码时的字符集一致即可,修改conf/server.xml中 Connecter 添加 URIEncoding="GBK" (不推荐,会导致部署到其他设备无法运行)GET方式提交参数的方式是将参数放到URL后面,如果使用的不是UTF-8,那么会对参数进行URL编码处理。当GET方式提交的参数URL编码和tomcat10.1.7默认的URI编码不一致时,就会出现乱码。POST请求乱码与GET请求处理方法一致,不再赘述。

2301_77408322的博客 7578

UReport2 报表设计器 在线表格

UReport2官网 一、UReport2报表设计器 UReport2是一个开源的可视化报表设计器,功能强大,操作简单,可以实现复杂的报表统计,有各种各样的导出和打印功能,支持导入Excel表格! 1、报表设计器 2、设计一个简单的用户列表展示 二、可编辑表格 扩展了layui的表格,支持多元化数据编辑(单选,多些、日期、下拉联动),开发简单、高效、便捷。有了它就可以轻松开发类似进销存系统的表格录入功能了,用户拿来即用! 三、主从表录......

ejinxian的专栏 2万+

FPGA波束形成:从算法到硬件的艺术之旅

本文深入探讨了FPGA在波束形成技术中的应用,从算法原理到Verilog硬件实现的全过程。文章详细分析了FPGA并行处理、低延迟和可重构特性如何优化波束形成系统性能,并提供了Verilog关键模块代码示例和资源优化策略,为工程师实现高效FPGA波束形成解决方案提供实用指导。

tea88的博客 1044

Tomcat解决中文乱码

一、中文乱码原因 Tomcat默认是按ISO-8859-1进行URL解码,ISO-8859-1并未包括中文字符,中文字符不能被正确解析了。 二、配置编码 在tomcat的conf/server.xml下的connetor属性中增加URIEncoding或者useBodyEncodingForURI属性 (1)URIEncoding This specifies the c...

angji2879的博客 373

保姆级教程:在S32K312上配置C40驱动,实现Flash读写(基于RTD 4.4.2)

本文详细介绍了在S32K312微控制器上配置C40驱动实现Flash读写的全流程,基于RTD 4.4.2库。内容涵盖环境搭建、外设配置、Flash操作实战代码及高级应用场景,特别针对LLD驱动和FLS存储操作中的常见问题提供了解决方案,帮助开发者快速掌握嵌入式Flash存储技术。

weixin_28684757的博客 255

tomcat9 中文乱码

问题描述 tomcat9启动后会有中文乱码,比如 控制台乱码: startup.bat启动时乱码: 解决方法 打开“/apache-tomcat-9.0.20/conf/logging.properties”文件 把java.util.logging.ConsoleHandler.encoding = UTF-8改成java.util.logging.ConsoleHandler.encod...

Death Note 2万+

Open3D点云数据处理(五):点云、mesh可视化(draw_geometries方法)

本文介绍了Open3D中的draw_geometries可视化方法,可以用于可视化点云和mesh。详细讲述了该方法的各个参数的作用,给出了代码示例。

孙悟空 3138

计算机网络实验报告实验七可靠传输TCP协议分析

计算机网络实验报告实验七可靠传输TCP协议分析

m0_56638814的博客 966

Tomcat 乱码问题彻底解决

直接执行“chcp 65001”,即可临时修改当前命令行窗口的编码方式。输入chcp 即可查看到当前系统编码方式,(我这里已测试过编码设置)。快捷键 win+R,进入。

qq_56725871的博客 5001

【AUTOSAR-E2E】-1.4-详述E2E Transformer解决方案

共13页精讲 目录 1“Data Transformation”介绍 1.1 基于SOME/IP Transformer 1.2 基于COM Based Transformer 2 ComXf(COM Based Transformer)介绍 2.1 ComXf(COM Based Transformer)功能规范 2.2 ComXf(COM Based Transformer)提供的服务 2.3 配置注意事项 3 E2EXf(E2E Transformer)介绍 3.1 E2EX...

「汽车电子助手」的博客 4700

解决Tomcat各种问题,中文乱码、闪退、404等

中文乱码等问题解决

小飞飞的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

很详细的解决Tomcat乱码问题

解决Tomcat乱码问题一、问题提出二、乱码原因三级目录 一、问题提出 相信很多初始Tomcat的小伙伴都会遇到下面的情况,启动Tomcat是一大堆看不懂的文字,比如。。。 相信很多有强迫症的同学,看到这些很不爽,我也是,接下来我就来说一下解决方案。 二、乱码原因 三级目录 .........

Monkey_King_GL的博客 17万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

JSP中文问题解决方案

中文问题-技术篇JSP中文问题解决方案 只需要保持下面几处地方设置统一,你的JSP就不会有中文问题 1、JSP的charset, 2、你的JSP SERVER编译JSP是使用的字符集,默认和操作系统是一样的。你可能需要进行修改 3、你的BEAN编译时候所采用的字符集,一般用JAVAC编译,都是和操作系统一样的,但你可以通过带参数来改变。如果用其它的编程工具,可以编译的话,你可能需要修改其默认参数。

望月思灵 3418

Devexpress16.2.6破解工具

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

IE6的“以UTF-8发送URL”选项设置对请求页面字符编码有影响吗?

      最近又碰到了中文乱码问题,这里我没有把数据库牵扯进来,先说下我的环境,servlet容器使用Tomcat6.0,浏览器FireFox3.0、IE6,涉及字符编码设置的地方我的思路就是编码的地方都统一使用UTF-8,具体配置如下: 1.所有页面的charset设置为UTF-8。 2.Tomcat的URIEncoding默认是ISO-8859-1,而我设置为UTF-8,主要是想解决中文...

战隼 536

docker 容器配置tocmat时间不统一

1、在tomcat配置文件bin下 vim setenv.sh #!/bin/bashCATALINA_OPTS='-Duser.timezone=Asia/Shanghai'export CATALINA_OPTS:wq ---------------------------重新启动tomcat 就可以解决问题----------------------------- 转载于:htt...

weixin_30951743的博客 85

解决tomcat启动时的中文乱码问题

我们第一次下载或者打开Tomcat时可能在控制台会出现中文乱码问题 解决办法 1.打开你安装Tomcat的所在目录,本文以7.0.92为例。 2. 打开后选择conf目录。 3. 将里面的logging.properties文件用编辑器打开,本例子是使用“Notepad++”编辑器打开。 4. 打开后大约在50行左右找到java.util.logging.ConsoleHandler.enco...

JF_OnTheWay的博客 7万+

解决tomcat乱码的问题

解决tomcat乱码问题 将 全部改为GBK 控制台的乱码全部解决

qq_40285312的博客 421

解决Tomcat中文乱码问题

前言 Tomcat7及以前的版本默认的编码格式是ISO-8859-1,因为这个字符集中没有包含中文,所以当Tomcat服务器响应的页面中出现中文时,会出现乱码问题,Tomcat8以后的版本默认的编码格式是UTF-8(万国码),则没有这种问题 解决方法 打开Tomcat配置文件目录conf文件夹中的server.xml,找到配置http协议的标签,即:配置Tomcat默认端口号的标签。在标签中...

沐风于林的博客 5487

tomcat 乱码

tomcat中request.setCharacterSet对post有用,对get无用,需要设置URIEncoding 在tomcat/conf/server.xml中找到 Connector 在后面加上 URIEncoding="UTF-8" 即可

╱/.进oоΟ的专栏 930

正确版本!!!彻底解决tomcat中文乱码问题

在网上搜索后,不管我们更改 Server.xml 的 URIEncoding 还是编译器的编码方式都没用,最终我找到了彻底解决的办法: ① — >>> 打开 tomcat 文件 ② — >>> 打开 conf 文件夹 ③ — >>> 打开 logging.properties 文件 ④ — >>> 找到第 50 行的位...

Mr_OO的博客 6074
上一篇: select语句的用法--oracle
下一篇: 两个日期之间的where写法
mxz391
博客等级 码龄20年 3粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值