最近在看许令波的《深入分析java web技术内幕》看到url的编解码时深有感触,现记录如下:
1、首先分析一下url的组成
http://localhost:8080/examples/servlet/小二?name=小二
localhost是域名,8080为端口号,examples是contextPath,servlet是servletpath,小二是pathinfo,后面的参数为querystring
2、相关的配置文件
端口号port在tomcat的<Connector port="8080" /> 中配置,contextPath在<ContextPath="/examples" />中配置 servletPath在web对应的
web.xml的<url-pattern>中配置Pathinfo是我们具体请求的servlet,Querypath是要传递的参数。
3.url的编解码问题
对url的uri(同一资源标识符)部分进行解码的是在connector的<Connector URIEncoding="UTF-8"/>中定义的,如果要用head中的Context定义的
Charset对queryString进行解码需要将connector的<Connector URIEncoding="UTF-8" useBodyEncodingForURI="true" />中的useBodyEncodingForURI的值设为true,他仅仅是对querystring进行解码而不是整个uri。使用不同的方式解码是因为浏览器对pathinfo和querystring进行了不同方式的编码
4.jsp页面内对接收或发送中文进行编解码
request.setCharacterEncoding()是你设置获得数据的编码方式。
response.setCharacterEncoding()是你响应时设置的编码。
response.setContentType()是设置你响应时的MIME及编码。
如果tomcat中设置了uri的解码格式为UTF-8,那么在jsp页面上添加request.setCharacterEncoding("UTF-8");就可以解决中文乱码问题了
设置响应模式