采用网址重写的缺点:
在有些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标识答,那都是在后台自动完成的,不需要你去做额外的处理工作。
原文地址:https://www.cnblogs.com/junjie2019/p/10658255.html