JavaWeb 中 Request 乱码问题及解决方案(含代码示例)
JavaWeb 中 Request 产生乱码的原因可能有多种,最常见的是因为字符集不匹配。例如在表单中提交的数据使用了 UTF-8 编码,但是在后台处理请求时使用了 ISO-8859-1 等其他编码格式,就会导致乱码问题。
解决方法一般有以下几种:
- 设置请求和响应的编码方式为 UTF-8
在 Servlet 中可以通过设置 request 和 response 对象的编码方式来解决乱码问题。
示例代码:
request.setCharacterEncoding('UTF-8');
response.setContentType('text/html;charset=UTF-8');
- 使用过滤器
在 web.xml 文件中配置一个过滤器,设置请求和响应的编码方式为 UTF-8。
示例代码:
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 在 Tomcat 的 server.xml 文件中设置全局编码方式为 UTF-8
在 Tomcat 的 server.xml 文件中的 Connector 标签中添加 URIEncoding='UTF-8' 属性,设置全局编码方式为 UTF-8。
示例代码:
<Connector port='8080' protocol='HTTP/1.1'
connectionTimeout='20000'
redirectPort='8443'
URIEncoding='UTF-8' />
实例代码:
@WebServlet('/test')
public class TestServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置请求和响应的编码方式为 UTF-8
request.setCharacterEncoding('UTF-8');
response.setContentType('text/html;charset=UTF-8');
// 获取表单中的数据
String name = request.getParameter('name');
String message = request.getParameter('message');
// 输出表单数据
PrintWriter out = response.getWriter();
out.println('您提交的数据为:');
out.println('姓名:' + name);
out.println('留言:' + message);
}
}
在上述示例中,我们首先设置了请求和响应的编码方式为 UTF-8,然后获取了表单中的数据,并将其输出到页面上。如果不设置编码方式为 UTF-8,则输出的内容将会是乱码。
原文地址: https://www.cveoy.top/t/topic/ozNI 著作权归作者所有。请勿转载和采集!