采用网址重写的缺点:
在有些 web 浏览器中, URL 限制为 2000 个字符.
仅当有链接要插入值时, 值才能转换成后面的资源. 此外, 要把值添加到静态页面的链接中, 可不是一件容易的事情.
网址重写必须在服务器端有效. 所有的链接都必须带有值, 这样可能出现一个问题, 即一个页面中可能会有许多个链接.
某些字符, 例如空格,& 符号及问号都必须进行编码.
添加到 URL 中的信息是明显可见的, 这种情况有时可不是我们所期待的.
网址重写案例设计:
1. 访问 top10, 返回一个页面, 该页面中的每个按钮的 url 都被重写了, 加上了 type 参数
2. 点击按钮后, 访问 top10, 并带上 Token, 服务端根据 Token 信息返回相应的页面
3. 服务器根据用户选择的 URL 信息, 返回相应的页面内容
隐藏域案例设计:
1.customer,editCustomer,updateCustomer 用同一个 Servlet 进行处理
2.Customer 上 edit 按钮, 会将用户 id 提交给 CustomerEdit 页面
3.CustomerEdit 上用隐藏域记录当前正在被编辑用户的 id,update 按钮会将信息提交给 updateCustomer
4.updateCustomer 完成更新, 不返回页面
Cookie:
cookie 是自动地在 Web 服务器和浏览器之间来回传递的一小块信息.
cookie 适用于那些需要跨越许多页面的信息.
由于 cookie 是作为 HTTP 标头嵌入的, 因此传输它的过程由 HTTP 协议处理.
可以根据自己的需要设置 cookie 的有效期限.
对于 Web 浏览器而言, 每台 Web 服务器最多可以支持 20 个 cookie.
Cookie 相关方法:
- Cookie(String name, String value)
- httpServletResponse.addCookie(Cookie cookie)
- cookie.getName()
HttpSession 对象:
- getSession()
- getSession(bool create)
- setAttribute(String name, Object value)
- getAttribute(String name)
- getAttributeNames()
getId(): 获得 HttpSession 标识符
invalidate(): 这个方法强制 Session 过期, 并将绑到到 Session 上的所有对象都解除绑定
getMaxInacitveInterval(): 了解一个 HttpSession 在用户最后一次访问之后还可以维持多久.
setMaxInactiveInterval(): 传递 0, 则 Session 永远不过期
添加到 HttpSession 中的值不一定是 String, 可以为任意 Java 对象, 只要它的类实现了 java.io.Serializable 接口即可, 以便当 Servlet 容器认为有必要的时候, 保存的对象可以序列化成一个文件或者保存到数据库中, 例如, 当容器的内存快要用完的时候. 仍然可以将非序列化的对象保存在 HttpSession 中, 但是如果 Servlet 容器试图将它们序列化, 将会以失败告终, 并抛出异常.
HttpSession 中保存的值不发送到客户端, 这与其他的 Session 管理方法不同. 而是 Servlet 容器为它创建的每一个 HttpSession 生成一个唯一标识符, 并将这个标识符作为一个 token 发送给浏览器, 一般是作为一个名为 JSESSIONID 的 cookie, 或者作为一个 jsessionid 参数添加到 URL 后面. 在后续的请求中, 浏览器会将这个 token 发送回服务器, 使服务器能够知道是哪个用户在发出请求. 无论 Servlet 容器选择用哪一种方式传输 session 标识答, 那都是在后台自动完成的, 不需要你去做额外的处理工作.
来源: http://www.bubuko.com/infodetail-3011909.html