1.下载中文文件
如果文件的名字带有中文,那么需要对这个文件进行编码处理
如果是IE或者是谷歌使用URLEncoding编码
如果是火狐,使用Base64编码
//获取来访的客户端类型(即判断是哪种浏览器)
//String clientType=request.getHeader("User-Agent");
//if(cliehtType.contains("Firefox")){
// filename=DownLoadUtil.base64EncodeFileName(filename);
//}else {
// IE或者谷歌
// filename=URLEncoder.encode(filename, "UTF-8");
//}
2.重定向
// 设置状态 重新定位状态码
response.setStatus(302);
// 定位跳转的位置是哪一个页面
response.setHeader("Location", "loginsuccess.html");
System.out.println("-----------------------");
// 上面是早期的写法,下面是重定向写法
response.sendRedirect("loginsuccess.html");
- 1.地址上显示的是最后那个资源的路径地址
- 2.请求次数最少有两次,服务器在第一次请求后,会返回302以及一个地址,浏览器在根据这个地址,执行第二次的访问
- 3.可以跳转到任意路径,不是自己的工程也可以跳
- 4.效率上低一点,因为只执行两次请求
- 5.后续的请求,没法使用上一次的request存储的数据,或者没法使用上一次的request对象,因为这是两次不同的请求
3.请求转发
// 请求转发的写法
// request.getRequestDispatcher("loginsuccess.html").forward(request, response);
- 1.地址上显示的是请求servlet的地址,返回200
- 2.请求次数只有一次,因为是服务器内部帮客户端执行了后续的工作
- 3.只能跳转自己项目的资源路径
- 4.效率上高一点,因为只执行一次请求
- 5.可以使用上一次的request对象
4.Cookie
是一份小数据,是服务器给客户端,并且存储在客户端上的一份小数据
- 应用场景:自动登录、浏览记录、购物车
- 为什么要有这个cookie?
http的请求是无状态的,第二次就不认识了,客户端与服务器在通讯的时候,是无状态的,其实就是客户端在第二次来访的时候,服务器根本就不知道这个客户端以前有没有来访问过,为了更好的收集用户习惯【大数据】
5.cookie的简单使用 - 1.在响应的时候添加cookie给客户端
Cookie cookie =new Cookie("aa","bb");
response.addCookie(cookie);
response.getWriter().write("请求成功了。。。。");
-
2.客户端收到的信息里面,响应头中多了一个字段set-cookie
-
3.获取客户端带过来的cookie
Cookie[] cookies = request.getCookies(); if (cookies!=null) { for (Cookie c : cookies) { String name = c.getName(); String value = c.getValue(); System.out.println("name="+name+"====value="+value); }
6.cookie的有效期
默认情况下,关闭浏览器后,cookie就没有了(针对没有设置cookie的有效期)
expiry//有效
// 正值表示在这个数字过后,cookie失效
// 负值表示关闭浏览器后失效,默认值-1
cookie.setMaxAge(10);
// 用于指定只有请求了指定的域名,才会带上该cookie
cookie.setDomain(".itheima.com");
// 只有访问该域名下的cookiedemo的这个路径地址才会带cookie
cookie.setPath("/Cookiedemo");
// www.itheima.com/Cookiedemo
7.注:写servlet的名字不能用汉字
8.例子cookie显示最近访问的时间
-----1.判断账号是否正确
-----2.如果正确,则获取cookie,但是得到的cookie是一个数组,我们要从数组里找到我们想要的cookie对象
-----3.如果找到的对象为空,表明是第一次登录,那么要添加cookie
-----4.如果不为空,表明不是第一次登录
response.setContentType(“text/html;charset=utf-8”);
String username = request.getParameter(“username”);
String password = request.getParameter(“passwd”);
if ("admin".equals(username) && "123".equals(password)) {
// new Cookie("last", 1379217497234);
// 获取cookie
Cookie[] cookies = request.getCookies();
// 从一个cookie数组中找到我们具体想要的cookie对象
Cookie cookie=Cookieutil.findCookie(cookies, "last");
// 第一次登录没有cookie
if (cookie==null) {
Cookie c = new Cookie("last", System.currentTimeMillis()+"");//名字+值
c.setMaxAge(60*60);//有效期一个小时
response.addCookie(c);
response.getWriter().write("登陆成功");
}else {
// 1.取以前的cookie第二次登录有cookie
long lastVisitTime=Long.parseLong(cookie.getValue());//字符串转成long类型,与integer.parseint(s)一样
// 2.输出到界面
response.getWriter().write("欢迎您"+"上次来访时间:"+new Date(lastVisitTime));
// 3.重置登录时间
cookie.setValue(System.currentTimeMillis()+"");//更新当前时间
response.addCookie(cookie);
}
}else {
response.getWriter().write("登陆失败");
}
9.JSP里面使用Java代码
jsp全称Java server pager —>最终会翻译成一个类,就是一个servlet
定义全局变量
<%! int a = 99; %>
定义局部变量
<% int b = 999; %>
在jsp页面上,显示a和b的值
<%=a %>
<%= b %>
10.清除cookie即清楚浏览记录
Cookie cookie=new Cookie("history","");
cookie.setMaxAge(0);//设置立即删除
cookie.setPath("/CookieDemo02");//路径
response.addCookie(cookie);
11.Cookie的安全问题
由于Cookie会保存在客户端上,所以有安全隐患问题,而且cookie的大小与个数有限制
限定4KB,不超过300个cookie。为了解决这个问题---->session
12.session (会话)
session是基于cookie的一种会话机制,cookie是服务器返回一小份数据给客户端,并且存放在
客户端上,session是数据存放在服务器端
-----常用API
// 得到会话id
String id = session.getId();
// 取值
session.getAttribute(name);
// 存值
session.setAttribute(name, value);
// 移除值
session.removeAttribute(name);
--------session何时创建、何时销毁
创建:在servlet里面调用request.getsession()
销毁:session是存放在服务器中的一份数据,即使关闭了浏览器,session也不会销毁
--------1.关闭服务器 2.session会话过期,默认有效期:30分钟
13.session购物车例子
response.setContentType("text/html;charset=utf-8");
// 1.获取要添加到购物车的商品id
int id = Integer.parseInt(request.getParameter("id"));
String [] names= {"iphone7","小米6","魅族7","华为9","vivo x21"};
// 取到id对应的商品名称
String name=names[id];
// 2.获取购物车存放东西的session Map<string,integer> iphone7 3
// 把一个map对象存放到session里面去,并且保证只存一次
Map<String, Integer>map=(Map<String, Integer>) request.getSession().getAttribute("cart");
// session里面没有存放任何东西
if (map==null) {
map=new LinkedHashMap<String, Integer>();
request.getSession().setAttribute("cart", map);
}
// 3.判断购物车中有没有该商品
if (map.containsKey(name)) {
// 原来值的基础上+1
map.put(name, map.get(name)+1);
} else {
// 没有购买过该商品,当前值为1
map.put(name, 1);
}
// 4.输出界面,跳转
response.getWriter().write("<a href='product_list.jsp'><h3>继续购物</h3></a><br>");
response.getWriter().write("<a href='cart.jsp'><h3>去购物车结算</h3></a><br>");
}
14.清除购物车
//两种方式清空购物车
HttpSession session = request.getSession();
//1.强制干掉会话,让会话失效
session.invalidate();
//2.从session中移除数据会话还在
session.removeAttribute("cart");
response.sendRedirect("cart.jsp");//重新跳转到该界面
15.总结
请求转发、重定向(面试常问)
什么时候有cookie? cookie服务器给客户端 response.addcookie();
- cookie分类
会话cookie:关闭浏览器就失效
持久cookie:存放在客户端上,在指定的期限内有效 setMaxAge();