1. 程式人生 > >Java EE學習中問題解決

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方法中引數型別為ServletRequestServletResponseFilterChain,初學時我會把前兩個引數誤解為HttpServletRequestHttpServletResponse,所以總是找不到需要的方法,其實只要把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;
}