java web中url理解
最近在看許令波的《深入分析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");就可以解決中文亂碼問題了
設定響應模式
response.setContentType("text/html;charset=UTF-8");