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 (有可能影响其余应用,因此不推荐.)