您的位置:首页 > Web前端 > JavaScript

解决JSP页面传参乱码的问题

2014-05-29 17:42 197 查看
1.1.jsp 代码如下

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>



<body>

<form action="2.jsp" method="get">

用户名:<input type="text" name="username"><br>

密 码:<input type="password" name="password"><br>

<input type="submit" value="注册">



</form>



</body>

</html>

2. 2.jsp代码如下

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

</head>



<%String name = new String(request.getParameter("username").getBytes("iso-8859-1"),"gbk");

String password = request.getParameter("password");

%>

<body>

<h1>你的注册信息是</h1>

<p>

用户名:<%=name %><br>

密 码<%=password %>



</body>

</html>





如果你要从一页面传过来的中文不是乱码的话,

String name = new String(request.getParameter("username").getBytes("iso-8859-1"),"gbk");

这样的接受参数的方法是一个通用的方法,不管是对get或post提交的方法都有效

象request.setCharacterEncoding("gbk");只能对post提交的方法管用









第二种方法就是写一个过滤器





Xml代码

<filter>
<filter-name>encoding</filter-name>
<filter-class>
filter.FilterEncoding
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gbk</param-value>
</init-param>
</filter>

[xml] view
plaincopy

<filter>

<filter-name>encoding</filter-name>

<filter-class>

filter.FilterEncoding

</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>gbk</param-value>

</init-param>

</filter>

[xml] view
plaincopy

<filter-mapping><br> <filter-name>set character encoding</filter-name><br> <url-pattern>/*</url-pattern><br> </filter-mapping>





Java代码

package filter;




import java.io.IOException;


import javax.servlet.Filter;


import javax.servlet.FilterChain;


import javax.servlet.FilterConfig;


import javax.servlet.ServletException;


import javax.servlet.ServletRequest;


import javax.servlet.ServletResponse;


public class FilterEncoding implements Filter


{

protected String
encoding; // 接收字符编码

protected boolean ignore; //
是否忽略大小写

protected FilterConfig
filterConfig; // 初始化配置



public void init(FilterConfig
filterConfig) throws ServletException


{

// 从web.xml文件中读取encoding的值

encoding = filterConfig.getInitParameter("encoding");

// 从web.xml文件中读取ignore的值

String value = filterConfig.getInitParameter("ignore");

// 以下三种情况均为忽略大小写

if(value
== null)


{

ignore = true;


}

else if(value.equalsIgnoreCase("yes"))


{

ignore = true;


}

else if(value.equalsIgnoreCase("true"))


{

ignore = true;


}

}

// doFilter方法

public void doFilter(ServletRequest
request, ServletResponse response, FilterChain chain)throws IOException,
ServletException

{

if(ignore
|| request.getCharacterEncoding() == null)


{

// 如果为空先从web.xml中得到

String encoding = selectEncoding(request);

if(encoding
!= null)


{

// 设置字符集编码

request.setCharacterEncoding(encoding);

}

}

// 继续执行

chain.doFilter(request, response);

}

// 得到字符编码

private String
selectEncoding(ServletRequest request)

{

return encoding;


}

public void destroy()


{



}

}

[java] view
plaincopy

package filter;



import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

public class FilterEncoding implements Filter

{

protected String encoding; // 接收字符编码

protected boolean ignore; // 是否忽略大小写

protected FilterConfig filterConfig; // 初始化配置



public void init(FilterConfig filterConfig) throws ServletException

{

// 从web.xml文件中读取encoding的值

encoding = filterConfig.getInitParameter("encoding");

// 从web.xml文件中读取ignore的值

String value = filterConfig.getInitParameter("ignore");

// 以下三种情况均为忽略大小写

if(value == null)

{

ignore = true;

}

else if(value.equalsIgnoreCase("yes"))

{

ignore = true;

}

else if(value.equalsIgnoreCase("true"))

{

ignore = true;

}

}

// doFilter方法

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

{

if(ignore || request.getCharacterEncoding() == null)

{

// 如果为空先从web.xml中得到

String encoding = selectEncoding(request);

if(encoding != null)

{

// 设置字符集编码

request.setCharacterEncoding(encoding);

}

}

// 继续执行

chain.doFilter(request, response);

}

// 得到字符编码

private String selectEncoding(ServletRequest request)

{

return encoding;

}

public void destroy()

{



}

}



如果是url的get提交参数带中文的

可以改下面这个文件,加入一个URIEncoding="GBK"

X:/Tomcat 5.5/conf/Server.xml

Xml代码

<Connector

port="8080"

redirectPort="8443"

minSpareThreads="25"

connectionTimeout="30"

maxThreads="150"

maxSpareThreads="75"

URIEncoding="GBK">

[xml] view
plaincopy

<Connector

port="8080"

redirectPort="8443"

minSpareThreads="25"

connectionTimeout="30"

maxThreads="150"

maxSpareThreads="75"

URIEncoding="GBK">



jsp头文件

Html代码

<%@
page contentType="text/html;charset=
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: