Cookie对象 浏览器技术,存放在本地,一般存放账户密码
cookie
/**
service方法中创建一个Cookie对象,设置数据到cookie对象中,将对象通过response.addCookie传递,cookie到期时间可以通过setMax方法设置到期时间
cookie的到期时间有三种状态
负整数只在浏览器中内存中存活关闭浏览器失效
正整数存活秒数默认30s
setMaxAge(0)
删除这个 Cookie,当场死亡
可以设置cookie.setpath路径(表示服务器访问的范围)**/
request对象 数据在一次请求中有效
session对象 可以多次请求,session对象默认在浏览器内存中存活,关闭浏览器或服务器时失效,session底层是依赖cookie的
session对象有默认事件单位为分钟,默认30分钟(30分钟无操作)
session
可以标识一个会话,也可以标识一个用户
标识符 JSESSIONID
Session 既然是为了标识一次会话,那么此次会话就应该有一个唯一的标志,这个标志就是 sessionId。
每当一次请求到达服务器,如果开启了会话(访问了 session),服务器第一步会查看是否从客户端回传一个名为 JSESSIONID 的cookie,如果没有则认为这是一次新的会话,会创建 一个新的session 对象,并用唯一的 sessionId 为此次会话做一个标志。如果有 JESSIONID 这 个cookie回传,服务器则会根据 JSESSIONID 这个值去查看是否含有id为JSESSION值的session 对象,如果没有则认为是一个新的会话,重新创建一个新的 session 对象,并标志此次会话; 如果找到了相应的 session 对象,则认为是之前标志过的一次会话,返回该 session 对象,数据达到共享。这里提到一个叫做 JSESSIONID 的 cookie,这是一个比较特殊的cookie,当用户请求服务器时,如果访问了 session,则服务器会创建一个名为 JSESSIONID,值为获取到的 session(无论是获取到的还是新创建的)的 sessionId 的 cookie 对象,并添加到response 对象中,响应给客户端,有效时间为关闭浏览器
。
获取Session域对象
request.getSession();
session对象默认存活30分钟(无操作)
// 销毁session对象死亡的5种方式
关闭浏览器
关闭服务器
时间到期,
设置最大不活动时间
session.invalidate();
servletContext对象(随服务器同生共死)
// 设置客户端与服务端的编码
response.setContentType("text/html;charset=UTF- 8");
// 重定向跳转到index.jsp
response.sendRedirect("index.jsp");
// 设置客户端与服务端的编码
response.setContentType("text/html;charset=UTF- 8");
response.setHeader("content-type","text/html;charset=UTF-8");
Servlet的工作流程(客户端请求到后端响应的流程‘)
1. 通过请求头获知浏览器访问的是哪个主机
2. 再通过请求行获取访问的是哪个一个
web
应用
3. 再通过请求行中的请求路径获知访问的是哪个资源
4. 通过获取的资源路径在配置中匹配到真实的路径,
5. 服务器会创建
servlet对象,(如果是第一次访问时,创建 servlet
实例,并调用
init方法进初始化操作)
6. 调用
service(request
,
response)方法来处理请求和响应的操作
7. 调用
service
完毕后返回服务器 由服务器讲
response缓冲区的数据取出,以
http
响应的格式发送给浏览器
/**
重定向和请求转发的区别
重定向 请求转发
2次请求数据在request对象域中不共享 1次请求数据在request对象域中共享
客户端行为 服务端行为
地址栏发生变化 地址栏不发生变化
绝对地址可写到http:// 到绝对地址定位到站点后
*/
文件上传
表单的请求方式为 POST
;其次我们的
form
表单的 enctype 必须设为
"multipart/form-data",即 enctype="multipart/form-data",意思是设置表单的类型为文 件上传表单。默认情况下这个表单类型是 "application/x-www-form-urlencoded",
不能用于文件上传。只有使用了
multipart/form-data 才能完整地传递文件数据
实现HTTPServlet的类需要加上@MultipartConfig注解如果是文件数据上传一定要加上此注解才能实现,servlet将multipart/form-data的POST请求封装成一个Part,通过Part对文件进行操作
通过request.getpart获取part对象
使用part获取文件名,获取ServletContext.getPath得到文件存放路径
然后设置放置文件的路径
// 通过 getPart(name) 方法获取Part对象(name代表的是页面中file文件域的name属性值)
Part part = request.getPart("myfile");
// 通过Part对象,获取上传的文件名
String fileName =part.getSubmittedFileName();
// 获取上传文件需要存放的路径 (得到项目存放的真实路径)
String realPath =request.getServletContext().getRealPath("/");
// 将文件上传到指定位置
part.write(realPath +"/"+ fileName);
文件下载-超链接下载
前台设置download属性
后台项目设置资源目录(Deployment 点击加号设置资源路径),再设置外部访问路径
监听器Filter
可以设置多个过滤器
先配置的先执行
@WebFilter("/设置拦截路径,/*为拦截所有")
public class 实现类implements Filter{
@Override
inut{}//方法开始拦截
@Override
pubblic void doFileter{
//设置放行的资源路径
}
}
监听器
实体类实现HttpSessionListener{
重写sessionDestroyed()方法}
监听生命周期
监听变化值
针对session对象