怎么學習Java Web?今天粵嵌要為大家講的是有關Cookie存儲中文問題。很多人在學習JavaWeb過程中都會用到Cookie技術,但是在使用Cookie技術的時候,我們更多的是用來存儲非中文的數據,在使用過程都不會遇到什么問題,但是你有沒有試過Servlet Cookie用來直接存儲中文會是什么樣的效果呢?其實Cookie技術的value值是不支持直接存儲中文的,那么如果在開發中確實有需求,要存儲中文怎么辦呢?下面就交大家的個方法,輕松解決這個問題:
1.問題所在,直接存儲中文出現的結果會是
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 創建一個Cookie對象,直接將value值設置為中文 Cookie cookie = new Cookie("username", "張三"); //設置cookie有效時間 cookie.setMaxAge(60); //設置cookie路徑 cookie.setPath("/GZ182135day04"); response.addCookie(cookie); request.getRequestDispatcher("/CookieChinese2").forward(request, response); }
2.會出現以下異常
嚴重: Servlet.service() for servlet [cn.yueqian.zuoye.CookieChinese] in context with path [/GZ182135day04] threw exception java.lang.IllegalArgumentException: Control character in cookie value or attribute. at org.apache.tomcat.util.http.LegacyCookieProcessor.needsQuotes(LegacyCookieProcessor.java:412) at org.apache.tomcat.util.http.LegacyCookieProcessor.generateHeader(LegacyCookieProcessor.java:284) at org.apache.catalina.connector.Response.generateCookieString(Response.java:940) at org.apache.catalina.connector.Response.addCookie(Response.java:888) at org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:392) at cn.yueqian.zuoye.CookieChinese.doGet(CookieChinese.java:39) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
3.解決思路,將中文先編碼后再寫入Cookie中,在取出Cookie的時候再解碼操作,代碼如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //解決Cookie存入中文: //存入之前編碼后再存入 //取出來,過后解碼 Cookie cookie = new Cookie("username", URLEncoder.encode("張三", "UTF-8")); cookie.setMaxAge(60); cookie.setPath("/GZ182135day04"); response.addCookie(cookie); request.getRequestDispatcher("/CookieChinese2").forward(request, response); }
4.完成解碼操作:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 解決Cookie存入中文:
// 存入之前編碼后再存入
// 取出來,過后解碼
Cookie[] cookies = request.getCookies();
Cookie cookie = CookieUtil.getCookieByName(cookies, "username");
if (cookie != null) {
String cookieValue = cookie.getValue();
String value = URLDecoder.decode(cookieValue, "UTF-8");
System.out.println("username---》" + value);
}
}
5.這樣寫了過后再去訪問就不再會報錯了,問題成功解決!!
以上就是有關怎么學習Java Web中的一個小問題。當前Java應用范圍越來越廣,Java工程師需要提高自身技術能力,從而為自己贏得更多的機會。因此進行專業化的Java學習極為重要,粵嵌培訓機構在JAVA領域有十多年的教學經驗,課程體系結合真實大型項目,讓學員在實戰中掌握JAVA干貨技能。