`
dyllove98
  • 浏览: 1409631 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:39191
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:80270
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:133394
社区版块
存档分类
最新评论

tomcat setCharacterEncoding 实现原理

阅读更多
仅仅作为日常笔记用~~
tomcat的HttpServletRequest实现类为 RequestFacade

package org.apache.catalina.connector; 
public class RequestFacade implements HttpServletRequest

RequestFacade 中使用了 
org.apache.catalina.connector.Request类来处理数据比如:
getParameter();获取属性 
setCharacterEncoding(String env) 设置编码格式

例如:
当用户在过滤器中设置了 res.setCharacterEncoding ("GBK");
tomcat执行的时候会 调用RequestFacade.setCharacterEncoding (String env);
RequestFacade.setCharacterEncoding (String env);方法内部会调用
Request.setCharacterEncoding(String env)把编码传递给Request
Request.setCharacterEncoding(String env);方法内部会调用
org.apache.coyote.Request类的setCharacterEncoding(String env);
把编码保存在 org.apache.coyote.Request 的charEncoding属性中


那程序时如何使用这个编码的呢?
当用户在过滤器或者servlet中调用getParameter(String name)来获取属性的时候
方法调用如下流程---->RequestFacade.getParameter(String name)--->
org.apache.catalina.connector.Request的getParameter(String name)--->此处会先调用parseParameters把编码传递给coyoteRequesorg.apache.coyote.Request.coyoteRequest的getParameters().getParameter(name); 先获取org.apache.tomcat.util.http.Parameters然后调用getParameter----->转码------>getParameterValues(name)---->最后从HashTable中取值





分享到:
评论

相关推荐

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

    首先,`HttpServletRequest`对象的`setCharacterEncoding`方法是用来设置请求体的字符编码,也就是用于处理POST请求中的数据编码。当你在过滤器中调用`request.setCharacterEncoding("UTF-8")`时,它会确保POST请求...

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

    当调用`request.setEncoding("utf-8")`时,实际上是调用了`Request`类的`setCharacterEncoding`方法。这个方法首先检查一个布尔变量`usingReader`。如果`usingReader`为`true`,则意味着已经调用了`getReader()`...

    软件工程答辩常见问题总结.doc

    如果通过表单提交的数据出现乱码,可以在Servlet中设置请求的字符编码,如`request.setCharacterEncoding("gb2312")`。为了全局解决这个问题,可以使用过滤器(Filter)。 过滤器是Java Web应用中处理请求和响应的...

    java表单提交中文乱码的解决方法

    创建一个自定义过滤器,实现`Filter`接口,并在`doFilter`方法中调用`setCharacterEncoding`。过滤器可以捕获所有的HTTP请求,确保无论请求来自哪里,都能正确处理编码。 5. **服务器配置**:尽管不推荐,但也可以...

    JSP入门学习手册

    通常,需要在`<%@ page...%>`指令中设置`pageEncoding`属性,并在处理请求时使用`request.setCharacterEncoding()`方法。 **与数据库通信**: JSP可以通过JDBC(Java Database Connectivity)与数据库进行交互,...

    Java/J2EE中文问题终极解决之道

    req.setCharacterEncoding("UTF-8"); chain.doFilter(req, res); } } ``` 在`web.xml`中配置过滤器: ```xml <filter-name>setCharacterEncoding <filter-class>...

    JSP中文乱码问题解决办法

    Tomcat服务器在处理GET请求时,会按照ISO-8859-1编码处理,POST请求则默认也是ISO-8859-1,但可以通过`request.setCharacterEncoding("GBK")`来改变编码方式。 解决JSP中文乱码问题主要有两种方法: 1. 方法一:...

    servlet实现用户登录的小型服务器

    对于POST请求,我们使用`getParameter()`方法同样可以获取参数,但需要先调用`request.setCharacterEncoding("UTF-8")`设置字符编码,防止中文乱码问题。 在处理完登录验证后,Servlet会生成一个JSON字符串作为响应...

    中文字符过滤器

    request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); chain.doFilter(request, response); } ``` 这段代码首先通过`setCharacterEncoding`方法将请求的字符编码设置为...

    解决web项目开发中常见的中文乱码问题.pdf

    在JSP页面中,可以通过`request.setCharacterEncoding("GBK")`来设置请求编码,确保数据在被处理前能正确转换为指定编码(如GBK)。同时,使用`response.setCharacterEncoding("GBK")`设定响应编码,保证返回给...

    javaweb servlet(jsp)的乱码问题原理及解决

    - 由于GET方式的参数直接包含在URL中,无法通过`request.setCharacterEncoding()`来改变其编码方式。一种常见的解决方案是手动解析URL中的参数,并使用合适的编码重新构建参数字符串。 3. **服务器输出响应**: -...

    JavaWeb开发中文乱码问题解决方案

    - 对于请求乱码,可以在`doFilter`方法中获取请求参数,然后通过`setCharacterEncoding`设置请求的编码格式,如`request.setCharacterEncoding("UTF-8")`。 - 对于响应乱码,可以通过`response.setContentType(...

    过滤器,Jsp开发中的避免中文乱码

    例如,使用`HttpServletRequest`的`setCharacterEncoding()`方法设置请求编码,`HttpServletResponse`的`setContentType()`方法设置响应的Content-Type和charset。 4. **示例代码**: ```java public void ...

    struts原理与实践(四)

    为了避免这种情况,开发者需要在接收请求数据时明确指定编码,如使用request.setCharacterEncoding("UTF-8")。 此外,为了实现页面显示的正确性,HTML和JSP页面的`<meta>`标签也需要指定正确的字符集,例如`...

    XX大学Javaweb期末试卷总结版.doc

    - 当POST请求中包含GBK字符集的汉字时,需在Servlet中通过`request.setCharacterEncoding("GBK")`设置请求编码。 - Servlet API主要包含`javax.servlet`和`javax.servlet.http`两个包。 - Servlet生命周期不包括`...

    使用servlet实现注册&登录&解决注册乱码&beanutils;的使用

    确保在`<form>`标签中设置`accept-charset="UTF-8"`,并在Servlet中设置请求和响应的编码,如`request.setCharacterEncoding("UTF-8");`和`response.setContentType("text/html;charset=UTF-8");`。 3. **用户登录*...

    HttpServletRequest源码 HttpServletResponse源码

    5. 编码控制:`setCharacterEncoding()`设定字符编码,确保正确处理请求和响应中的文本数据。 源码分析: 理解`HttpServletRequest`和`HttpServletResponse`的源码有助于深入学习Servlet的工作原理。在Servlet容器...

    jsp笔记资料大全

    9. **注意事项**:确保页面输出的字符集与接收请求时的编码一致,如通过`request.setCharacterEncoding()`设置POST请求的编码。如果需要全局处理编码问题,可以使用Filter。 总结,JSP是Java Web开发中的重要组件,...

    面试题java

    - POST请求中,需确保表单编码为UTF-8,可通过在表单内添加`<meta charset="utf-8">`或在服务器端使用`req.setCharacterEncoding("utf-8")`设置编码。 7. **Servlet输出中文**: 避免乱码,可以在输出响应前设置...

    actionPKservlet

    request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); // 接收客户端发送的用户名和密码 String username = request.getParameter("username"); username = new String(username....

Global site tag (gtag.js) - Google Analytics