数据从浏览器传输到服务器的过程:
1.用户在浏览器的form表单中提交数据,经过post/get方法提交
2.这时的数据都是String类型,然后浏览器将数据转成二进制通过HTTP协议传输到服务器
3.服务器接收传输过来的数据,先转成String类型,然后再转成各自需求的类型,这个过程可以在浏览器端进行过滤
3.根据特定页面传过来的数据,提交各自的servlet处理
4.最后服务器再将servlet处理后的数据包含到jsp中
5.jsp先解析这个结果,然后将解析好的数据传输给浏览器
6.浏览器将接收到的jsp页面解析成html页面展现给用户
浏览器如何对接收的数据进行存储,数据保存在不同的域中使用范围也不一样,这个过程是如何实现的
四个域对象:
1.page域( pagecontext )
范围:数据仅在当前jsp页面有效,跳转到别的页面则无法访问到该数据
存储:服务器内存
2.request域( 或response域)
范围:一次请求范围内有效,有效范围是请求周期,刷新页面后重新计算,转发有效,重定向无效
存储:服务器缓存,没有存取操作,这个域中的数据只存在request和response的传输过程中
3.session域
范围:一次回话(从打开浏览器开始到关闭浏览器结束),或浏览器进程,只有浏览器不关闭或规定时间内产生请求,session范围内的数据一直有效
存储:服务器内存,每次回话都会产生一个sessionId,客户端cookie中一个,服务器内存中一个,如果浏览器没有禁用cookie,那么sessionid存在于cookie中,每次超过,如果浏览器禁用cookie,那么sessionid存在浏览器中
4.application域( 或applicationcontext,servletcontext)
范围:整个web应用,从服务器开启到服务器结束,application域中的数据是共享的,其它域中的数据时隔离的,只要web服务器不重启,一直有效
存储:服务器内存
现在就有个问题,这些数据都存储在服务器内存中,他们是如何存储的,服务器是如何区分数据时哪个域中的
关于web应用的编码
jsp------二进制-------html
第一个过程:pageEncoding="UTF-8"或者response.setCharactorEncoding("utf-8");
第二个过程:<meta name="content-type" content="text/html; charset=UTF-8">request.setCharactorEncoding("utf-8");
面向B/S的数据传输