比较转发与重定向和Cookie

来源:互联网 发布:互联网软件开发投资 编辑:程序博客网 时间:2024/05/17 05:08
1.比较转发与重定向
(1)能否共享request
转发可以,重定向不行。
注:
容器收到请求之后,会立即创建request,response。
当容器发送完响应之后,会立即删除这两个对象。
(2)浏览器地址栏的地址有无变化
转发不变,而重定向会变。
(3)目的地有无限制
转发有限制(要求是同一个应用),而重定向没有任何限制。
2.容器如何处理请求资源路径?
比如,在浏览器地址栏输入 
http://ip:port/web06/abc.html
浏览器会将"/web06/abc.html"作为请求资源路径
发送给容器(放到请求行里面)。
step1,容器依据"/web06"找到应用所在的文件夹。
step2,容器会先假定访问的是一个servlet,然后去
web.xml文件当中查找对应的servlet是否存在。
即看<url-pattern>是否与"/abc.html"匹配。
(1)精确匹配
即要求<url-pattern>的值必须是"/abc.html"。
(2)通配符匹配
即使用"*"来匹配任意的零个或者多个字符。
比如
<url-pattern>/*</url-pattern>
(3)后缀匹配
   使用"*."开头,后接多个字符。
   比如
    <url-pattern>*.do</url-pattern>
   会匹配所有以".do"结尾的请求。
step3,如果找不到匹配的servlet,容器会查找相应位置的
文件。
3.如何让一个servlet处理多种请求
step1, 使用后缀匹配
比如 <url-pattern>*.do</url-pattern>
step2, 分析请求资源路径
String request.getRequestURI()

4.路径问题
(1)什么是路径问题?
链接,表单提交,重定向和转发如何填写相应的路径
(地址)。
<a href="addEmp.jsp"></a>
<form action="add.do">
response.sendRedirect("list.do");
request.getRequestDispatcher("listEmp.jsp");
(2)相对路径
不以"/"开头的路径
(3)绝对路径
以"/"开头的路径
(4)如何写绝对路径
链接,表单提交,重定向从应用名开始写,
转发从应用名之后开始写。
注:不要将应用名直接写在路径里面,而应该使用
String request.getContextPath()来获得应用名。

5.状态管理
(1)什么是状态管理
将浏览器与web服务器之间多次交互当做一个
整体来看待,并且将多次交互所涉及的数据(也就
是状态)保存下来。
(2)如何进行状态管理
1)将状态保存在浏览器端(cookie)。
2)将状态保存在服务器端(session)。
(3)cookie
1)什么是cookie?
服务器临时保存在浏览器端的少量数据。
2)基本原理
浏览器访问服务器时,服务器可以将少量
数据以set-cookie消息头发送给浏览器,浏览器
会将这些数据临时保存下来;
当浏览器再次访问服务器时,会将这些数据
以cookie消息头的方式发送服务器。
3)如何添加cookie
Cookie cookie = new Cookie(String name,
String value);
response.addCookie(cookie);
4)如何读取cookie
Cookie[] request.getCookies();
注:该方法有可能返回null。
String cookie.getName()
String cookie.getValue()
 5)编码问题
  cookie只能存放合法的ascii字符,对于中文,
  需要将其转换成合法的ascii字符的形式。
  String 
  URLEncoder.encode(String str,String charset);
  String 
  URLDecoder.decode(String str,String charset);
  注:
  在添加cookie时,最好都统一编码处理。
 6)生存时间问题
   a.什么是生存时间问题
    浏览器会将cookie保存多久,缺省情况下,
   浏览器会将cookie保存在内存里面,只要
   浏览器不关闭,cookie会一直存在。
   b.指定生存时间
    cookie.setMaxAge(int seconds);
    注:
    单位是秒。
    seconds > 0时, 浏览器会将cookie保存在硬盘上,
    超过指定的时间,该cookie会被删除。
    seconds < 0时,缺省值。
    seconds = 0时,删除cookie。
    比如,要删除一个名称为"cart"的cookie
    Cookie c = new Cookie("cart","");
    c.setMaxAge(0);
    response.addCookie(c);
   
     
0 0