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()方法来进行这种转换。

posted @ 2020-05-27 02:11  *Tesla*  阅读(17)  评论(0)    收藏  举报
       [00:00.000] 作词 : 陈信荣
    [00:01.000] 作曲 : 周传雄
    [00:02.000] 编曲 : 周传雄
    [00:03.000] 制作人 : 周传雄
    [00:29.259]过完整个夏天
    [00:34.742]忧伤并没有好一些
    [00:41.185]开车行驶在公路无际无边
    [00:47.320]有离开自己的感觉
    [00:52.453]
    [00:53.347]唱不完一首歌
    [00:59.370]疲倦还剩下黑眼圈
    [01:05.596]感情的世界伤害在所难免
    [01:11.703]黄昏再美终要黑夜
    [01:18.292]依然记得从你口中说出再见坚决如铁
    [01:24.732]昏暗中有种烈日灼身的错觉
    [01:30.171]黄昏的地平线
    [01:33.230]划出一句离别
    [01:36.313]爱情进入永夜
    [01:42.165]
    [01:42.881]依然记得从你眼中滑落的泪伤心欲绝
    [01:49.290]混乱中有种热泪烧伤的错觉
    [01:54.774]黄昏的地平线
    [01:57.816]割断幸福喜悦
    [02:00.915]相爱已经幻灭
    [02:07.171]
    [02:19.647]唱不完一首歌
    [02:25.497]疲倦还剩下黑眼圈
    [02:31.753]感情的世界伤害在所难免
    [02:37.881]黄昏再美终要黑夜
    [02:42.994]
    [02:44.363]依然记得从你口中说出再见坚决如铁
    [02:50.872]昏暗中有种烈日灼身的错觉
    [02:56.291]黄昏的地平线
    [02:59.393]划出一句离别
    [03:02.507]爱情进入永夜
    [03:08.340]
    [03:09.205]依然记得从你眼中滑落的泪伤心欲绝
    [03:15.531]混乱中有种热泪烧伤的错觉
    [03:20.937]黄昏的地平线
    [03:23.991]割断幸福喜悦
    [03:27.025]相爱已经幻灭
    [03:34.375]
    [03:58.563]依然记得从你口中说出再见坚决如铁
    [04:04.694]昏暗中有种烈日灼身的错觉
    [04:10.141]黄昏的地平线
    [04:13.156]划出一句离别
    [04:16.228]爱情进入永夜
    [04:21.297]
    [04:22.863]依然记得从你眼中滑落的泪伤心欲绝
    [04:29.401]混乱中有种热泪烧伤的错觉
    [04:34.714]黄昏的地平线
    [04:37.774]割断幸福喜悦
    [04:40.913]相爱已经幻灭
    [05:39.200] 配唱制作人 : 吴佳明
    [05:39.533] 钢琴 : 周传雄
    [05:39.866] 吉他 : 许华强
    [05:40.199] 鼓 : Gary Gideon
    [05:40.532] 贝斯 : Andy Peterson
    [05:40.865] 弦乐编写 : 吴庆隆
    [05:41.198] 弦乐 : 孔朝晖/顾文丽/隋晶晶/梁中枢/尹淑占/王言/关旗
    [05:41.531] 和声编写 : 周传雄
    [05:41.864] 和声 : 周传雄
    [05:42.197] 录音师 : 林世龙/沈文钏/Geoffrey Lee
    [05:42.530] 混音师 : 王晋溢
    [05:42.863] 录音室 : 强力/HASAYAKE/Atomic & Audioplex (Singapore)
    [05:43.196] 混音室 : 白金
    [05:43.529] OP : Sony/ATV Music Publishing Taiwan/哈萨雅琪有限公司
    [05:43.862] SP : Sony/ATV Music Publishing Taiwan​