Tomcat9 Get请求中含有汉字中文

本文介绍如何在Tomcat 9.0.27版本中解决GET请求中中文参数的乱码问题。通过使用URLEncoder.encode和URLDecoder.decode方法,将中文参数编码为UTF-8格式,确保前后端数据传输正确无误。
部署运行你感兴趣的模型镜像

网上的教程都是以Tomcat以前版本为例子的!

下面说的是::最新版的Tomcat  9.0.27

在Java Web项目中:
JSP客户端网页需要给Tomcat服务器传递Get请求(参数中有中文):

有俩中情况:
一是:<form  action=”/AServlet?name=张三你好”     method=”get”>   其余省略!

而是:在浏览器栏里直接输入:http://localhost:8080/day21_5/AServlet?name=张三你好   

 

由于最新版本的Tomcat严格遵循《 RFC 7230 and RFC 3986》这两个标准!

Get请求时,get的URL参数中不能有:中文,或者其他不被允许的字符!

但是我们为了方便,硬是要传递中文get参数!那么怎么解决乱码问题??

 

客户端JSP页面最好使用 UTF-8 编码格式!

Tomcat服务器上的后台代码的Java源文件,也要使用UTF-8格式!

而且已经知道了:最新版本的Tomcat的URI传输的格式也是UTF-8哦!

 

那么:在客户端的JSP页面中,把get请求参数中的中文汉字,使用URLEncoder.encode(“张三你好”,”UTF-8”);把这几个汉字强制编码成为UTF-8编码!

<%@ page   import="java.net.*" %>

<%

String   user="张三你好";

user = URLEncoder.encode(user,"UTF-8");

pageContext.setAttribute("user",user);

%>

<form  action=”/AServlet?name=${user}”     method=”get”>  

 

在Tomcat服务器后台的代码中:再使用URLDecoder.decode(“”,”UTF-8”);即可!

String  value=request.getParameter(user);

try {

value=URLDecoder.decode(value, "UTF-8");

} catch (UnsupportedEncodingException e) {

throw  new  RuntimeException(e);

}

System.out.println("乱码解决后用户名:" + value);

 

即可解决乱码问题!

Tomcat越来越方便啦!

注意:URLEncoder类与URLDecoder类都在java.net包中!

强烈建议:要在编程中使用英文!

您可能感兴趣的与本文相关的镜像

Seed-Coder-8B-Base

Seed-Coder-8B-Base

文本生成
Seed-Coder

Seed-Coder是一个功能强大、透明、参数高效的 8B 级开源代码模型系列,包括基础变体、指导变体和推理变体,由字节团队开源

Tomcat作为Apache的一个开源Web应用服务器,默认情况下处理GET请求中的中文字符可能会遇到编码问题,因为HTTP协议默认使用的是ASCII,对于非英文字符如中文,需要进行正确的编码转换。以下是处理这种情况的步骤: 1. **设置URL Encoding**: 在`web.xml`文件的`<servlet-mapping>`标签内,添加`url-pattern`时指定 `?`, 然后在后面加上 `&useBodyEncodingForURI=true`,这会告诉Tomcat使用请求体的编码来解析URI,而不是默认的ISO-8859-1。 ```xml <servlet-mapping> <servlet-name>yourServletName</servlet-name> <url-pattern>/path/*?useBodyEncodingForURI=true</url-pattern> </servlet-mapping> ``` 2. **设定请求编码**:如果你希望统一处理所有来自客户端的请求,可以在`Connector`配置中设置`URIEncoding`属性,例如在`server.xml`中的`<Connector>`元素里: ```xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8"> </Connector> ``` 3. **处理请求时解码**:在处理请求的Servlet或Filter中,使用`HttpServletRequest`的`getInputStream()`和`getCharacterEncoding()`方法获取并解码POST数据,如果请求GET,则可以直接从查询字符串中获取。 ```java InputStream inputStream = request.getInputStream(); String charset = request.getCharacterEncoding(); // 获取请求的字符编码 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, charset)); // 使用Reader读取和处理请求内容 ``` 4. **响应编码**:在返回给客户端的响应中,确保使用正确的字符集编码,可以设置`HttpServletResponse`的`setContentType()`和`setCharacterEncoding()`方法。 ```java response.setContentType("text/html; charset=UTF-8"); response.setCharacterEncoding("UTF-8"); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值