關於服務器響應,瀏覽器請求的理解以及javaWeb項目的編碼問題

  

  1.服務器(Server)響應,瀏覽器(Brower)請求:html

  對於B/S的軟件,數據的傳遞體如今,用戶利用瀏覽器請求,以得到服務器響應。在JavaWeb項目中,大體包含.java文件的數據處理模塊,和在瀏覽器展現的.jsp,.html信息展現模塊。這裏還要區分前臺和後臺兩個概念,前臺並不表明瀏覽器端,後臺並不表明服務器端。java

  按上圖的流程中,咱們能夠看到咱們完成編碼工做後,tomcat將會把咱們工程中的WebRoot加載到tomcat的webapps下。瀏覽器請求後,服務器根據.java編碼的數據處理方式進行數據處理,經過jsp將信息展現到瀏覽器。這裏咱們要注意,jsp是從服務器被傳到瀏覽器的,那麼在這個過程當中,就涉及到jsp文件的服務器編碼、傳遞、瀏覽器解碼。同理,瀏覽器的請求也會包含,數據發送的瀏覽器編碼、傳遞、服務器解碼的過程。web

  瀏覽器請求和服務器響應過程,都會涉及編碼與解碼的過程,這也是JavaWeb項目開發中,出現大量亂碼的問題所在。只要出現一個流程的編碼、解碼錯誤,均可能出現亂碼。瀏覽器

 

  這裏引伸另一個問題:當咱們在action中,經過request.setAttribute("name",name)時,按道理映射以後的jsp應該是不能經過request.getAttribute("name")訪問到name的,由於action中,request請求結束後,應該要被銷燬的,不該該被傳到jsp頁面中的。這是爲何呢?tomcat

  經試驗代表,該過程是透過請求轉發(forward)實現的, 而不是重定向(redirect)實現的,由於請求轉發會把(request,response)都轉發到jsp,因此在jsp中能訪問到,在action中經過request.setAttribute("name",name)設的值!服務器

 

  2.如何避免出現亂碼?(參照上圖)app

  (1)對於同一個應用,最好統一編碼,推薦爲 UTF-8 ,固然 GBK 也能夠。webapp

  (2)正確設置 JSP 的三個重要編碼:jsp

     response.setCharacterEncoding("UTF-8")編碼

     contentType="text/html;charset=UTF-8"

     pageEncoding=「UTF-8」

  (3)對於請求,可使用過濾器或者在每一個 JSP/Servlet 中設置request.setCharacterEncoding ("UTF-8") 。同時,要修改 Tomcat 的默認配置,推薦將 useBodyEncodingForURI 參數設置爲 true ,也能夠將 URIEncoding 參數設置爲 UTF-8 (有可能影響其餘應用,因此不推薦.)

相關文章
相關標籤/搜索