<Connector port="8180" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" URIEncoding="UTF-8"/>
需要通過filter過濾器設置:response.setContentType("text/html;charset=UTF-8"); 不能這樣設置:
response.setCharacterEncoding(“UTF-8”);讀取.txt文本文件時也使用UTF-8編碼:BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"UTF-8")); FileOutputStream writerStream = new FileOutputStream(filePath, true); BufferedWriter oWriter = new BufferedWriter(new OutputStreamWriter(writerStream, "UTF-8")); .txt文件也要是以UTF-8編碼格式保存的才行,以其他編碼格式保存也會是亂碼。
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"UTF-8"));
- FileOutputStream writerStream = new FileOutputStream(filePath, true);
- BufferedWriter oWriter = new BufferedWriter(new OutputStreamWriter(writerStream, "UTF-8"));
在Tomcat下conf文件夾下server.xml 找<Connector port="8081" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="gbk"/> 這個各個機子不一樣~ 主要是在後面加disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="gbk"
- <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443"
- useBodyEncodingForURI="true"
- IEncoding="utf-8"
- URIEncoding="utf-8"/>
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />
在apache設置
AddDefaultCharset off
AddDefaultCharset utf-8
在apache均出現亂碼,
因此,Apache和Tomcat集成後,要使服務器支持UTF-8的中文地址,應該設置8009端口的<connector>標籤
最後的方法在tomcat的server.conf裏面設置apache和tomcat的連接爲utf-8
設置如下:
<Connector port="8009" URIEncoding="UTF-8" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
useBodyEncodingForURI參數表示是否用request.setCharacterEncoding 參數對URL提交的數據和表單中GET方式提交的數據進行重新編碼,在默認情況下,該參數爲false。
URIEncoding參數指定對所有GET方式請求進行統一的重新編碼(解碼)的編碼。
URIEncoding和useBodyEncodingForURI區別是,
URIEncoding是對所有GET方式的請求的數據進行統一的重新編碼,
而useBodyEncodingForURI則是根據響應該請求的頁面的request.setCharacterEncoding參數對數據進行的重新編碼,不同的頁面可以有不同的重新編碼的編碼
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 以 UTF-8 輸入輸出
*
* @author ZhongHuiQiang
*
*/
public class FilterChar implements Filter {
private String config;
public void destroy() {
this.config = null;
}
/**
* name="FilterChar" <br>
* init-param name="config" value="utf-8"<br>
* mapping url-pattern="/*"<br>
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throwsIOException, ServletException {
HttpServletRequest req;
req = (HttpServletRequest) request;
HttpServletResponse res;
res = (HttpServletResponse) response;
req.setCharacterEncoding(config);
//res.setCharacterEncoding(config);
res.setContentType("text/html;charset=UTF-8");chain.doFilter(req, res);
}
/**
* 獲得web.xml中初始化的參數
*/
public void init(FilterConfig config) throws ServletException {
this.config = config.getInitParameter("chars");
}
}
<filter-name>FilterChar</filter-name>
<filter-class>
com.gtxy.dynaActionForm.web.filter.FilterChar
</filter-class>
<init-param>
<param-name>chars</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FilterChar</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
簡單配置步驟:
1.在項目web.xml文件添加過濾器標記<filter>和<filter-mapping>;
2.實現過濾器代碼;
3.對Tomcat服務器conf目錄裏的Server.xml文件配置URIEncoding;
4.前臺頁面設置contentType的charset值與web.xml裏設置的值一致。
詳細配置步驟:
1.配置web.xm文件,在web-app標籤內添加過濾器的配置<filter>和<filter-mapping>
- <!--中文亂碼處理過濾-->
- <filter>
- <filter-name>EncodingFilter</filter-name><!--過濾器名稱,自己起 -->
- <filter-class>com.filters.SetCharacterEncodingFilter</filter-class><!--過濾器類名稱,包括包名一致、寫全 -->
- <init-param><!--初始化參數,要指定的字符集編碼 -->
- <param-name>encoding</param-name><!--參數名稱 -->
- <param-value>GBK</param-value><!--參數值 -->
- </init-param>
- <init-param><!--初始化參數,指定是否忽略大小寫 -->
- <param-name>ignore</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>EncodingFilter</filter-name>
- <url-pattern>/*</url-pattern> <!--“/*”表示項目下所有資源 -->
- </filter-mapping>
- <!--中文亂碼處理過濾 -->
2.實現過濾器代碼,創建一個SetCharacterEncodingFilter類
- package com.filters;
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- /**
- * 自定義字符處理過濾器
- * 參考自Tomcat目錄webapps\examples\WEB-INF\classes\filters
- * @author coderlu
- * @since 2012-12-10
- */
- public class SetCharacterEncodingFilter implements Filter {
- protected FilterConfig filterConfig = null; //初始化配置
- protected String encoding = null; //接收字符編碼
- protected boolean ignore = true; //是否忽略大小寫
- /* 析構函數
- * @see javax.servlet.Filter#destroy()
- */
- @Override
- public void destroy() {
- this.encoding = null;
- this.filterConfig = null;
- }
- /* 執行過濾操作
- * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
- */
- @Override
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- if (ignore || (request.getCharacterEncoding() == null)) {
- String encoding = selectEncoding(request); //如果爲空先從web.xml中得到
- if (encoding != null){
- request.setCharacterEncoding(encoding); //設置字符集編碼
-
response.setContentType("text/html;charset="+encoding);
- }
- }
- chain.doFilter(request, response);
- }
- /* 初始化過濾器
- * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
- */
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- this.filterConfig = filterConfig;
- this.encoding = filterConfig.getInitParameter("encoding"); //從web.xml文件中讀取encoding的值
- String value = filterConfig.getInitParameter("ignore"); //從web.xml文件中讀取ignore的值
- //以下三種情況均爲忽略大小寫
- if (value == null)
- this.ignore = true;
- else if (value.equalsIgnoreCase("true"))
- this.ignore = true;
- else if (value.equalsIgnoreCase("yes"))
- this.ignore = true;
- else
- this.ignore = false;
- }
- /**
- * 得到字符編碼
- * @param request
- * @return
- */
- protected String selectEncoding(ServletRequest request) {
- return (this.encoding);
- }
- }
3.修改Tomcat服務器conf\Server.xml文件,加入一個URIEncoding="GBK"
- <!--URIEncoding 配置服務器反應編碼集-->
- <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443"
- URIEncoding="GBK"/>
4.設置前臺頁面字符編碼集
- <%@ page contentType="text/html;charset=GBK" %>
圓心(0,0) 半徑1 已知圓上某點座標 x y 延圓心旋轉θ後 新的座標是多少?
解:設原來點(x,y)對應的角爲α,則x=cosα,y=sinα. 設所求的新座標爲(m,n),對應的角應爲α-θ,所以m=cos(α-θ),n=sin(α-θ) 展開得m=cos(α-θ)=cosαcosθ+sinαsinθ=xcosθ+ysinθ n=sin(α-θ)=sinαcosθ-cosαsinθ=ycosθ-xsinθ 所以所求的座標爲(xcosθ+ysinθ,ycosθ-xsinθ)