2、path:既可以是绝对路径,又可以是相对路径。不以"/"开头就是相对路径(路径必须正确)
二、转发和重定向的细节
1、转发:只能转发到本应用的其他资源
2、请求重定向:可以转发到任何地址。
三、绝对路径的写法(都以/开头)
如果是给客户端用的,要加项目名称,否则(给服务器用的),不加项目名称
转发:request getRequestDispatcher(String path) 不需要加项目名称 /servlet/Demo2
重定向:response sendRedirect(String path) 需要加项目名称 /day06/servlet/Demo2
Refresh=2;URL=path 需要加项目名称 /day06/servlet/Demo2
form表单的action 需要加项目名称 /day06/servlet/Demo2
a的href: 需要加项目名称 /day06/servlet/Demo2
包含:include(String path) 不需要加项目名称 /servlet/Demo2
会话过程中要解决的问题:用户数据的保存问题。保存在ServletContext和ServletRequest的域对象中是不可取的。
解决方案:
1、Cookie
是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器响应消息头Set-Cookie:key=value 请求消息头cookie:key=value
一个cookie必须有name和value,还有以下可选属性
comment: path:默认路径就是访问写写domain:
名为abc的cookie的path:www.sina.com/mail
http://localhost:8080/day06 能不能得到abc这个cookie。不能
www.sina.com/mail 能不能得到abc这个cookie。能
www.sina.com/mail/abc/a.jsp 能不能得到abc这个cookie。能
如果把cookie的路径设置为:localhost/day06 说明day06下面的所有资源都可以访问这个cookie
age:设置cookie的缓存时间。默认的时间是一个负数(浏览器关闭时删除)。如果是0,则是删除该cookie。正整数才是存活的时间。
version:
如何向客户端写一个cookie:
HttpServletResponse.addCookie(javax.servlet.http.Cookie)
注:每个服务器只能存放20 cookie (稀有)
浏览器端最多能存放300cookie
每个cookie的大小不能超过4Kb
服务器如何获取客户端带来的cookie:
HttpServletRequest.getCookies()
注:不同网站向同一个客户端写的cookie的名称一致,可以通过cookie的path属性进行区分
cookie的默认存活时间是会话范围。
Cookie案例:
eg1:记录用户最近一次的访问时间
每次访问页面的时候将系统时间记录下来
Cookie c = new Cookie("lastAccessTime",System.currentTimeMillis()+"");
//设置Cookie有限期
c.setMaxAge(Integer.MAX_VALUE);
c.setPath(request.getContextPath());
//写回Cookie
response.addCookie(c);
//清除上一次访问的时间
//得到所有的Cookies //day06/servlet路径下
Cookie cookies[]= request.getCookies();
//进行遍历查找对应的 Cookie ,并对其进行设置
for(int i =0 ;cookies!=null&&i
public interface MyConstant {
//接口常量,这样可以避免拼写错误
String USERNAME = "username";
}
CookieDemo1中:
//让用户名默认为空,记录用户名被checked时才根据Cookie显示
String username = "";
String checked = "";
//根据Cookie决定是否显示用户名
Cookie cookies[] = request.getCookies();
for(int i = 0;cookies!=null&&i用户登录");
out.print("