Java EE學習中問題解決
網頁顯示漢字亂碼
問題描述:在編碼格式都設定為UTF-8後網頁仍然為亂碼。 解決方法:在src的java檔案中添加了以下三行程式碼,重啟伺服器後解決。
response.setCharacterEncoding("UTF-8");//在呼叫getWriter前呼叫
response.setContentType("text/html;charset=UTF-8");//在呼叫getWriter前呼叫
request.setCharacterEncoding("UTF-8");//必須在呼叫getParameter之前呼叫
如果還是沒能解決問題,可以看一下提交表單的方式是不是Get,用Get方法傳遞帶有漢字的請求時,用網頁開啟會很大可能亂碼。可以再嘗試如下方法解決。
本人用的是tomcat伺服器,先在tomcat的安裝目錄下找到名為server.xml
\apache-tomcat-7.0.42\conf
。用記事本開啟該檔案,Ctrl+F
查詢Connector標籤(<Connector />
),並在標籤中新增URLEncoding="UTF-8"
屬性.例如:
< Connector port=“8080” protocol=“HTTP/1.1” connectionTimeout=“20000” redirectPort=“8443” URIEncoding=“UTF-8”/>
目前還不太清楚原理,以後深入學習了後會來補充。
請求轉發方法
Servlet需要實現JSP技術中的include和forward方法,必須 首先獲得RequestDispatcher介面例項。 getRequestDispatcher()與sendRedirect()的部分區別
request.getRequestDispatcher()是請求轉發,前後頁面共享一個request ; response.sendRedirect()是重新定向,前後頁面不是一個request。 request.getRequestDispather();返回的是一個RequestDispatcher物件。
ServletContext sc = getServletContext();//返回上下文物件的引用
RequestDispatcher rd =null;//RequestDispatcher介面物件
rd = sc.getRequestDispatcher("/form.jsp" );//獲取介面例項
rd.forward(request, response);//重定向
過濾器中獲取request與response
doFilter方法中引數型別為ServletRequest
、ServletResponse
與FilterChain
,初學時我會把前兩個引數誤解為HttpServletRequest
、HttpServletResponse
,所以總是找不到需要的方法,其實只要把ServletRequest、和ServletResponse通過型別轉化為HttpServletRequest、HttpServletResponse就可以使用了。
例如:
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse resp=(HttpServletResponse)response;
順便,在實現簡單的登入過濾器
時,絕對不能過濾登入介面(login.jsp
),否則在登入失敗跳轉到登入介面時也同要需要通過過濾器,然而這時你的使用者名稱和密碼還是錯誤的,造成的後果將是…我是這樣解決,在doFilter()
方法中:
String path=request.getRequestURL();//注意這裡的request型別為HttpServletRequest型別,
if(path.indexOf("/login.jsp") > -1){//如果是login.jsp
arg2.doFilter(req, resp);//arg2為FilterChain型別
return;
}