`

request.setCharacterEncoding(reqEnc)的作用问题

 
阅读更多
request.setCharacterEncoding(reqEnc);
 
这个方法要在获取参数之前调用才会有效,也就是说,如果在getParameter()或者  getReader ()之后调用,会失效。
 
jsp的动作指令<jsp: include page="relative.jsp">是在请求运行中执行,把编译之后生成的servlet代码嵌入原页面中。
 
每一个request请求访问一个jsp页面的时候,如果不手动设置request请求的编码字符,那么jsp容器都会自动设置默认的编码字符。
 
比如说当前服务器的默认编码为GBK,有一个页面common.jsp如下,想把对这个页面的请求参数转为UTF-8编码
<%@ page contentType="text/html;charset=GBK" errorPage="/common/errorPage.jsp" %><%@ 
page trimDirectiveWhitespaces="true" %>
<%@include file="/common/setCharset.jsp"%>
<jsp:include page="/common/config.jsp" /><%!
static boolean validate(HttpServletRequest request) {
if (!request.getMethod().equalsIgnoreCase("POST")) {
   return false;//false;  //TODO 正式使用时放开
}
return true;
}
%>
 
在/common/setCharset.jsp里面设置了 request.setCharacterEncoding("UTF-8");此时访问common.jsp的这个request请求的编码方式变成了UTF-8,
当执行到<jsp:include page="/common/config.jsp" />的时候,因为config.jsp里面没有手动设置编码方式,也没有进行getParameter()或者  getReader ()操作,所以,jsp容器又会把访问common.jsp的这个request请求在动态访问加载config.jsp生成的servlet代码之后,编码方式变成了GBK。
 
解决方案:
(1)在config.jsp文件的开头,手动设置请求编码为UTF-8
(2)在<%@include file="/common/setCharset.jsp"%>这句后面加一些getParameter()方法,让setCharacterEncoding()方法生效。
 
 
 
另外:
我们来总结一下两种include 两种用法的区别,主要有两个方面的不同: 
一、执行时间上: 
<%@ include file=”relativeURI”%> 是在翻译阶段执行 
<jsp:include page=”relativeURI” flush=”true” /> 在请求处理阶段执行。 
二、引入内容的不同: 
<%@ include file=”relativeURI”%> 引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起。 
<jsp:include page=”relativeURI” flush=”true” /> 引入执行页面或servlet所生成的应答文本。
 
 
 
 
 
 
 

 

分享到:
评论

相关推荐

    JAVA过滤器filter request.setCharacterEncoding仅对POST提交起作用,对GET提交还是会出现乱码问题

    JAVA过滤器filter request.setCharacterEncoding仅对POST提交起作用,对GET提交还是会出现乱码问题

    java 的乱码教程

    首先,说说JSP/Servlet中的几个编码...charset=UTF-8"、request.setCharacterEncoding("UTF- 8")和response.setCharacterEncoding("UTF-8"),其中前两个只能用于JSP中,而后两个可以用于JSP和 Servlet中。 。。。。。

    对Servlet 中 request.setEncoding("utf-8")的分析

    首先要知道这里的request为HttpServletRequest,如果我们打印request的话,发现打印出的类型为 RequestFacade(package org.apache.catalina.connector; public class RequestFacade implements HttpServletRequest )...

    对Django 中request.get和request.post的区别详解

    Django 中request.get和request.post的区别 POST和GET差异: POST和GET是HTTP协议定义的与服务器交互的方法。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。另外,还有PUT和DELETE方法。 POST和GET都...

    网上购物系统设计与实现

    request.setCharacterEncoding("gb18030"); HttpServletResponse response=(HttpServletResponse)res; response.setCharacterEncoding("gb18030"); chain.doFilter(req, res); } 2、Servlet代码:[只要doPost...

    request.getParameter() 和request.getAttribute() 区别

    request.getParameter() 和request.getAttribute() 区别

    用户管理系统(ums)

    request.setCharacterEncoding("GB18030"); //调用业务逻辑 UserDAO userDAO = new UserDAO(); // 返回的list值 ArrayList list=userDAO.queryAll(); //重点。。。HttpSession的用处??? HttpSession...

    jsp连接MySQL实现插入insert操作功能示例

    下午终于实现了jsp连接MySQL执行插入操作的功能。在index.jsp页面输入数据,提交到mysql——insert.jsp页面进行插入... request.setCharacterEncoding(“UTF-8”); response.setCharacterEncoding(“UTF-8”); respo

    简单的注册页面

    &lt;% request.setCharacterEncoding("UTF-8");%&gt; 您的姓名是:&lt;%=request.getParameter("name")%&gt; 您的密码是:&lt;%=request.getParameter("pwd")%&gt; 你的职业是:&lt;%=request.getParameter("career")%&gt; ...

    JSP对浏览器发送来的数据进行重新编码的两种方式

    charset=GB18030″、request.setCharacterEncoding(“GB18030”)和 response.setCharacterEncoding(“GB18030”),其中前两个只能用于JSP中,而后两个可以用于JSP和Servlet 中。 这里,我们只谈一

    request.js

    request.js request.js request.js request.js request.js request.js request.js

    Request、Request.Form和Request.QueryString的区别

    Request、Request.Form和Request.QueryString的区别

    数据库测试test.sql

    // request.setCharacterEncoding("utf-8"); // //接收method属性的值 // String methodName = request.getParameter("method"); // // //根据method属性的值调用相应的方法 // if("login".equals(methodName)){ // ...

    北大青鸟U2项目完全版

    request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); String canshu=request.getParameter("canshu"); YonghuService yhs=new YonghuServiceImpl(); if(canshu.equals(...

    Request.QueryString 乱码问题

    Request.QueryString 获取的中文变乱码了,解决方法如下 1、html中,可以用js的 encodeURI() 方法将要传的中文处理,例如 encodeURI("I am 乱码") ,处理之后,字符串中的中文 “乱码” 两字将会被被十六进制的转义...

    jsp解析

    jsp指令:... request.setCharacterEncoding("utf-8"); 获取页面数据: String name=request.getParameter(""); String[] names=request.getParameterValues(""); 转发,可以保留值:

    多文件上传例子(解决中文乱码)

    2、写过滤器,设置request.setCharacterEncoding("UTF-8")。 3、javascript脚本里用encodeURI(str)。 4、适当的时候,在jsp里用java.net.URLDecoder.decode(request.getParameter("str"),"UTF-8")。 5、最容易忽略的...

    jsp传值中文乱码问题解决方法示例介绍

    request.setCharacterEncoding(“UTF-8”);%&gt;这个方法来保证中文的正确输出,下面举个例子吧, 我们要接住表单的值或者把数据库数据打印出来的之前,先把&lt;&#37;request.setCharacterEncoding(“UTF-8”);%&gt;放在...

    用户登录信息的源代码

    request.setCharacterEncoding("gbk"); if(request.getAttribute("err")!=null) { %&gt; &lt;h2&gt;&lt;%=request.getAttribute("err")%&gt; } %&gt; &lt;form method="post" action="login-conf.jsp"&gt; 用户名:...

    聊天室程序下载

    request.setCharacterEncoding(encoding); response.setContentType("text/html; charset="+encoding); } chain.doFilter(request, response); } public void destroy() { this.encoding = null; this....

Global site tag (gtag.js) - Google Analytics