1. 程式人生 > 實用技巧 >c++_獲取系統安裝字型

c++_獲取系統安裝字型

過濾器Filter

過濾器實際上就是對web資源進行攔截,做一些處理後再交給下一個過濾器或servlet處理
通常都是用來攔截request進行處理的,也可以對返回的response進行攔截處理

應用到的場景一般有自動登入、統一設定編碼格式、訪問許可權控制和敏感字元過濾等

在我的專案中,新建一個角色

王五

會出現亂碼

資料庫中也顯示亂碼

這就是由於沒有設定過濾器導致,所以需要設定過濾器來解決

首先在資料庫連線的bd中設定字元編碼

String DB_URL ="jdbc:mysql://localhost:3306/test?useUnicode=true";
告訴MySQL這裡要用到我們自己定義的編碼,而非系統自帶的編碼(如ios等)


然後修改Tomcat,在conf目錄的service.xml檔案中修改connecter

Tomcat如果不作這一步修改,在以後的專案中會遇到本電腦顯示正常,專案到其他電腦就顯示亂碼的情況

在servlet中新建EncodeFilter

public class EncodeFilter implements Filter 

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

}

@Override
public void destroy() {

}

在web.xml中配置filter
<filter>
<filter-name>encodeFilter</filter-name>
<filter-class>com.dpb.servlet.servlet.EncodeFilter</filter-class> //這裡是servlet的路徑
<init-param>
<param-name>encode</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodeFilter</filter-name>
<url-pattern>/*</url-pattern>//“/*”的意義是所有檔案編碼都要經過此過濾
</filter-mapping>

編寫filter
private String encode = "utf-8";

@Override
public void init(FilterConfig filterConfig) throws ServletException {
if (filterConfig.getInitParameter("encode") != null) {
encode = filterConfig.getInitParameter("encode");

}

}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
request.setCharacterEncoding(encode);
response.setCharacterEncoding(encode);
filterChain.doFilter(request, response);
(加粗部分是filter的核心編碼,即實現request和response的互相轉換)

再次新增的新使用者角色不再產生亂碼,資料庫中也不再顯示亂碼