在Java中有時會碰見亂碼的狀況,這裏提供了幾種轉換方法html
(一)Java中的編碼轉換java
(二)能夠在web.xml文件中配置的本身寫的過濾器web
第一種方法最簡單也最方便,可是隻能用在少許的地方或是偶爾一兩次轉碼,若是大面積使用就不方便了,也大大增長了編碼量,若是你的項目裏沒有用Spring的框架開發,用web.xml配置自定義過濾器能夠一勞永逸的解決 apache
1.首先要編寫本身的過濾器類(實現了javax.servlet.Filter):瀏覽器
package fck.filter; 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; public class CodeFilter implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filter) throws IOException, ServletException { // TODO Auto-generated method stub request.setCharacterEncoding("utf-8"); filter.doFilter(request, response); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
2.在web.xml文件中編寫過濾器配置:緩存
<filter> <!--CodeFilter是本身隨便取的名字--> <filter-name>CodeFilter</filter-name> <!--寫好對應的過濾器類的路徑--> <filter-class>fck.filter.CodeFilter</filter-class> </filter> <filter-mapping> <filter-name>CodeFilter</filter-name> <!--「/*」表明全部的請求都通過過濾--> <url-pattern>/*</url-pattern> </filter-mapping>
以後不用再作什麼代碼的改變,過濾器就將全部的訪問都轉碼了session
(三)使瀏覽器不緩存頁面的過濾器app
import javax.servlet.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** *//** * 用於的使 Browser 不緩存頁面的過濾器 */ public class ForceNoCacheFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException{ ((HttpServletResponse) response).setHeader("Cache-Control","no-cache"); ((HttpServletResponse) response).setHeader("Pragma","no-cache"); ((HttpServletResponse) response).setDateHeader ("Expires", -1); filterChain.doFilter(request, response); } public void destroy() { } public void init(FilterConfig filterConfig) throws ServletException { } }
(四)檢測用戶是否登錄的過濾器框架
import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.util.List; import java.util.ArrayList; import java.util.StringTokenizer; import java.io.IOException; /** */ /** * 用於檢測用戶是否登錄的過濾器,若是未登陸,則重定向到指的登陸頁面 * 配置參數 * checkSessionKey 需檢查的在 Session 中保存的關鍵字 * redirectURL 若是用戶未登陸,則重定向到指定的頁面,URL不包括 ContextPath * notCheckURLList 不作檢查的URL列表,以分號分開,而且 URL 中不包括 ContextPath */ public class T implements Filter { protected FilterConfig filterConfig = null; private String redirectURL = null; private List notCheckURLList = new ArrayList(); private String sessionKey = null; public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; HttpSession session = request.getSession(); if (sessionKey == null) { filterChain.doFilter(request, response); return; } if ((!checkRequestURIIntNotFilterList(request)) && session.getAttribute(sessionKey) == null) { response.sendRedirect(request.getContextPath() + redirectURL); return; } filterChain.doFilter(servletRequest, servletResponse); } public void destroy() { notCheckURLList.clear(); } private boolean checkRequestURIIntNotFilterList(HttpServletRequest request) { String uri = request.getServletPath() + (request.getPathInfo() == null ? "" : request.getPathInfo()); return notCheckURLList.contains(uri); } public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; redirectURL = filterConfig.getInitParameter("redirectURL"); sessionKey = filterConfig.getInitParameter("checkSessionKey"); String notCheckURLListStr = filterConfig.getInitParameter("notCheckURLList"); if (notCheckURLListStr != null) { StringTokenizer st = new StringTokenizer(notCheckURLListStr, ";"); notCheckURLList.clear(); while (st.hasMoreTokens()) { notCheckURLList.add(st.nextToken()); } } } }
(五)資源保護過濾器 jsp
import javax.servlet.Filter; import javax.servlet.FilterConfig; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Iterator; import java.util.Set; import java.util.HashSet; // import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** */ /** * This Filter class handle the security of the application. * * It should be configured inside the web.xml. * * @author Derek Y. Shen */ public class SecurityFilter implements Filter { // the login page uri private static final String LOGIN_PAGE_URI = "login.jsf"; // the logger object private Log logger = LogFactory.getLog(this.getClass()); // a set of restricted resources private Set restrictedResources; /** */ /** * Initializes the Filter. */ public void init(FilterConfig filterConfig) throws ServletException { this.restrictedResources = new HashSet(); this.restrictedResources.add("/createProduct.jsf"); this.restrictedResources.add("/editProduct.jsf"); this.restrictedResources.add("/productList.jsf"); } /** */ /** * Standard doFilter object. */ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { this.logger.debug("doFilter"); String contextPath = ((HttpServletRequest) req).getContextPath(); String requestUri = ((HttpServletRequest) req).getRequestURI(); this.logger.debug("contextPath = " + contextPath); this.logger.debug("requestUri = " + requestUri); if (this.contains(requestUri, contextPath) && !this.authorize((HttpServletRequest) req)) { this.logger.debug("authorization failed"); ((HttpServletRequest) req).getRequestDispatcher(LOGIN_PAGE_URI) .forward(req, res); } else { this.logger.debug("authorization succeeded"); chain.doFilter(req, res); } } public void destroy() { } private boolean contains(String value, String contextPath) { Iterator ite = this.restrictedResources.iterator(); while (ite.hasNext()) { String restrictedResource = (String) ite.next(); if ((contextPath + restrictedResource).equalsIgnoreCase(value)) { return true; } } return false; } private boolean authorize(HttpServletRequest req) { // 處理用戶登陸 /**//* * UserBean user = * (UserBean)req.getSession().getAttribute(BeanNames.USER_BEAN); * * if (user != null && user.getLoggedIn()) { //user logged in return * true; } else { return false; } */ } }
(六) 利用Filter限制用戶瀏覽權限
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; public class T implements Filter { public void destroy() { } public void doFilter(ServletRequest sreq, ServletResponse sres, FilterChain arg2) throws IOException, ServletException { // 獲取uri地址 HttpServletRequest request = (HttpServletRequest) sreq; String uri = request.getRequestURI(); String ctx = request.getContextPath(); uri = uri.substring(ctx.length()); // 判斷admin級別網頁的瀏覽權限 if (uri.startsWith("/admin")) { if (request.getSession().getAttribute("admin") == null) { request.setAttribute("message", "您沒有這個權限"); request.getRequestDispatcher("/login.jsp").forward(sreq, sres); return; } } // 判斷manage級別網頁的瀏覽權限 if (uri.startsWith("/manage")) { // 這裏省去 } } // 下面還能夠添加其餘的用戶權限,省去。 public void init(FilterConfig arg0) throws ServletException { } }
配置文件寫入:
<!-- 判斷頁面的訪問權限 --> <filter> <filter-name>RightFilter</filter-name> <filter-class>cn.itkui.filter.RightFilter</filter-class> </filter> <filter-mapping> <filter-name>RightFilter</filter-name> <url-pattern>/admin/**//*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>RightFilter</filter-name> <url-pattern>/manage/*</url-pattern> </filter-mapping>
最簡單也是能夠少許用的方法就是在java類中使用的編碼方式轉換
好比在項目中輸出String Name;是「&#()@(¥*@」亂碼,那麼能夠採用:
String strNew = ""; //轉化後的字符串 strNew = new String(str.getBytes("iso8859-1"),"utf-8");
這樣獲得的strNew就是轉換成「utf-8」後的編碼