servlet编码 https://blog.csdn.net/youngstar70/article/details/53998607
请求:
1.写一个jsp:

2.写对应的servlet,配置web.xml
public class HiLogin extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//1.获取前台数据
System.out.println("前台过来的参数是:"+req.getParameter("uname"));
//2.向前台写个数据
resp.getWriter().print("我是后台写过来的数据啊。。");
}
}
前台做请求:

请求后台结果:

前台响应的结果:

那么就出问题了 啥问题:中国特色社会主义编码问题 为啥这么说 外国没中文啊
3.分析原因:

4.解决:

后台结果:

5.缺点及解决办法2:
上面的解决方式缺点是啥?假如表单中有name,password,habbit等等多个元素,那么在后台解决的话每个都要这样转一下啊 ,那有没有更快速的方式呢?
解决办法2:

但是这种方式只针对post方式有效,对get方式仍然无效
原因:post方式,会把请求的数据封装到请求实体中,这个方法只能对请求实体的内容有效,所以对POST有效,对于get方式,参数是放在URI之后的,对get方式无效。
解决:
办法1:对get方式,一直用手动解码,post不用:

办法2:(推荐)
过滤器方式
办法3:
在tomcat的配置文件中server.xml中更改:

就是改变URI后面的编码的,对get方式有效。
但是这种方式是不建议的,为啥?服务器的配置文件不是你想改就能改的。
因为在服务器上不只你一个项目啊 ,别的项目可能就不需要这个编码格式啊
上面是请求,下面说响应的乱码:
原因分析:

所以在servlet中,service方法中,上来你就可以写三句话:
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
java servlet中文乱码总结
一、servlet
1)将接收的内容(参数)进行编码
request.setCharacterEncodeing(String charset);
2)将要输出的转发的内容进行编码
response.setContextType("text/html;charset=utf-8");
二、jsp
<%@page language=“java” import="java.util.*" pageEncoding="utf-8"%>
三、Js
1.传参页面
Javascript代码:
<script type=”text/javascript”>// <![CDATA[
function send(){
var url = "test01.html";
var userName = $("#userName").html();
window.open(encodeURI(url + "?userName=" + userName)); }
// ]]>
</script>
2. 接收参数页面:test02.html
<script>
var urlinfo = window.location.href;//獲取url
var userName = urlinfo.split(“?”)[1].split(“=”)[1];//拆分url得到”=”後面的參數
$(“#userName”).html(decodeURI(userName));
</script>
二:如何获取Url“?”后,“=”的参数值:
A.首先用window.location.href获取到全部url值。
B.用split截取“?”后的全部
C.split(“?”)后面的[1]内数字,默认从0开始计算
escape,unescape,encodeURI,encodeURIComponent区别:
1.传递参数时候使用,encodeURIComponent否则url中很容易被”#”,”?”,”&”等敏感符号隔断。
2.url跳转时候使用,编码用encodeURI,解码用decodeURI。
3.escape()只是为0-255以外 ASCII字符 做转换工作,转换成的 %u****这样的码,如果要用更多的字符如 UTF-8字符库 就一定要用 encodeURIComponent()或encodeURI()转换才可以成 %nn%nn这的码才可以,其它情况下escape,encodeURI,encodeURIComponent编码结果相同,所以为了全球的统一化进程,在用 encodeURIComponent()或 encodeURI()代替 escape()使用吧!
四、struts
设置常量:<contanst name=“struts.i18n.ecording”value="utf-8">
五、spring
在您通过表单向服务器提交数据时,一个经典的问题就是中文乱码问题。虽然我们所有 的 JSP 文件和页面编码格式都采用 UTF-8,但这个问题还是会出现。解决的办法很 简单,我们只需要在 web.xml 中配置一个 Spring 的编码转换过滤器就可以了.
使用在非struts2框架开发:
org.springframework.web.filter.CharacterEncodingFilter
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
六、html
表单中的数据会按照当前页面来进行编码。
<meta http-equiv="content-type" content="text/html;charset=utf-8;">
模拟消息头content-type,让浏览器以utf-8编码打开页面。
确保页面将表单用指定的字符编码进行编码。
七、cookie
cookie的值只能是ascii字符,如果是中文,需要将中文转换成ascii字符形式。
可以使用URLEncoder.encode()方法和URLDecoder.decode()方法来进行这种转换。
一、servlet
1)将接收的内容(参数)进行编码
request.setCharacterEncodeing(String charset);
2)将要输出的转发的内容进行编码
response.setContextType("text/html;charset=utf-8");
二、jsp
<%@page language=“java” import="java.util.*" pageEncoding="utf-8"%>
三、Js
1.传参页面
Javascript代码:
<script type=”text/javascript”>// <![CDATA[
function send(){
var url = "test01.html";
var userName = $("#userName").html();
window.open(encodeURI(url + "?userName=" + userName)); }
// ]]>
</script>
2. 接收参数页面:test02.html
<script>
var urlinfo = window.location.href;//獲取url
var userName = urlinfo.split(“?”)[1].split(“=”)[1];//拆分url得到”=”後面的參數
$(“#userName”).html(decodeURI(userName));
</script>
二:如何获取Url“?”后,“=”的参数值:
A.首先用window.location.href获取到全部url值。
B.用split截取“?”后的全部
C.split(“?”)后面的[1]内数字,默认从0开始计算
escape,unescape,encodeURI,encodeURIComponent区别:
1.传递参数时候使用,encodeURIComponent否则url中很容易被”#”,”?”,”&”等敏感符号隔断。
2.url跳转时候使用,编码用encodeURI,解码用decodeURI。
3.escape()只是为0-255以外 ASCII字符 做转换工作,转换成的 %u****这样的码,如果要用更多的字符如 UTF-8字符库 就一定要用 encodeURIComponent()或encodeURI()转换才可以成 %nn%nn这的码才可以,其它情况下escape,encodeURI,encodeURIComponent编码结果相同,所以为了全球的统一化进程,在用 encodeURIComponent()或 encodeURI()代替 escape()使用吧!
四、struts
设置常量:<contanst name=“struts.i18n.ecording”value="utf-8">
五、spring
在您通过表单向服务器提交数据时,一个经典的问题就是中文乱码问题。虽然我们所有 的 JSP 文件和页面编码格式都采用 UTF-8,但这个问题还是会出现。解决的办法很 简单,我们只需要在 web.xml 中配置一个 Spring 的编码转换过滤器就可以了.
使用在非struts2框架开发:
org.springframework.web.filter.CharacterEncodingFilter
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
六、html
表单中的数据会按照当前页面来进行编码。
<meta http-equiv="content-type" content="text/html;charset=utf-8;">
模拟消息头content-type,让浏览器以utf-8编码打开页面。
确保页面将表单用指定的字符编码进行编码。
七、cookie
cookie的值只能是ascii字符,如果是中文,需要将中文转换成ascii字符形式。
可以使用URLEncoder.encode()方法和URLDecoder.decode()方法来进行这种转换。

浙公网安备 33010602011771号