jsp+ajax = 使html页面中的元素可以单独接受响应、发送请求。
数据在前端、Servlet、数据库之间传递,经历转换:
map(提交的表单)映射为对象,用的是BeanUtils工具类。
表数据映射为对象,用的是JdbcTemplate中的RowMapper
JSON数据映射为对象,用的是ObjectMapper
动态代理 = 反射(回调时使用) + 单层嵌套。
装饰者模式 = 多层嵌套(可以灵活组合,但是要定义很多个类)。
弥补HTTP协议无记忆的缺点:cookie(自己记)和session(服务器记)。
Cookie就是由服务器发给客户端的信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。
cookie就是请求头中的一个字段。也可以被持久化储存到文件中。典型应用:记忆用户名和密码。
Session对象中保存的也是键值对,通过getAttribute(Stringkey)和setAttribute(String key,Objectvalue)方法读写客户状态信息。
两个对象都可以用来记录用户的上一次登陆时间。但两个对象的创建方式是不一样的。
键值对就能起到一个数据库的作用。NoSQL就是键值对数据库!
Cookie和Session的方案虽然分别属于客户端和服务端,但是服务端的session的实现对客户端的cookie有依赖关系的:session的id值需要保存在cookie中。因此当我们完全禁掉浏览器的cookie的时候,服务端的session也会不能正常使用。解决的办法是把id值放在URL中。
Cookie
cookie就是http请求头中的一个字段。可以用来保存客户端上的数据,以便服务器使用。弥补了http请求无记忆的缺点。
-
创建
cookie不是9大内置对象,所以使用前需要先创建对象。方式:response.addCookie(new Cookie(String 键, String 值));
-
应用
-
利用cookie在两次请求间共享(传递)数据。
-
记住用户名和密码
默认情况下,cookie放在浏览器的内存中,当浏览器关闭后,Cookie数据被销毁。把Cookie保存到文件中就可以实现,关闭浏览器后,再打开cookie仍然会有效:cookie.setMaxAge()
。 -
购物车
用户在一段时间内在同一个购物网站的不同页面中选择不同的商品,这些信息都可以写入cookie,以便在最后付款时提取信息。 -
统计用户访问习惯
访问什么页面,每个页面停留时间。
-
案例:普通用户自动登录。3分钟之内不需要重新登录。
Session
客户端浏览器可以禁用cookie,于是有必要把数据保存在服务器端。Session就是服务器端创建的对象,用来保存同一客户端多次请求中的数据。
- 创建或查找已有对象:
request.getSession();
- session运行机制
- 服务器接收浏览器请求
- 服务器自动查看cookie中是否有session ID(键的名字叫做JSESSIONID)
- 有,找到对应的session对象(session具有id属性),从而正确的保存数据。没有,创建一个新的session对象,并生成一个session ID,然后将session ID随着本次响应返回给客户端。
- session什么时候被销毁:太长时间没有操作就会自动销毁。因为本身具有
getLastAccessedTime()
方法。
- 客户端关闭后,服务器不关闭,两次获取session是否为同一个?
默认情况下,不是。但是可以利用session的实现机制达到这个目的。既然session ID保存在cookie中,那么只要设置cookie的存活时间(即把cookie保存在文件中),即可达到保存session ID的目的。
如果客户端没有禁用cookie,就使用cookie保存session ID。如果禁用,则把ID写在URL上(像get请求那样)。
在服务端保存Session对象的地方很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移。
- 应用
利用session在两次请求间共享(传递)数据。
application对象:网站上看到的在线人数、访问次数、在线投票等一些全局数据,需要在多个会话,多个页面间共享。
网友评论