一、文件的上传介绍(重点)
1、要有一个form标签,method=post请求
2、form标签的encType属性值必须为multipart/form-data值
3、在form标签中使用input type = file添加上传的文件
4、编写服务器代码(Servlet程序)接收、处理上传的数据
<form action="" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"><br>
头像:<input type="file" name="photo"><br>
<input type="submit" value="上传">
</form>
encType = multipart/form-data表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼接,然后以二进制的形式发送给服务器
上传会用到的类和方法
ServletFileUpload类,用于解析上传的数据
FileItem类,表示每一个表单项
boolean ServletFileUpload.isMultipartContent(HttpServletRequest request);
判断当前上传的数据格式是否是多段的格式
public List<FileItem> parseRequest(HttpServletRequest request)
解析上传的数据
boolean FileItem.isFormField()
判断当前这个表单项,是否是普通的表单项,还是上传的文件类型
true表示普通类型的表单项
false表示上传的文件类型
String FileItem.getFieldName()
获取表单项的name属性值
String FileItem.getString()
获取当前表单项的值
String FileItem.getName();
获取上传的文件名
void FileItem.write(file);
将上传的文件写到参数file所指向的磁盘位置
二、Cookie
1、定义
Cookie是服务器通知客户端保存键值对的一种技术
客户端有了Cookie后,每次请求都发送给服务器
每个Cookie的大小不能超过4kb
2、如何创建Cookie
3、服务器如何获取Cookie
服务器获取客户端的Cookie只需要一行代码:
req.getCookies():Cookie[]
4、Cookie值的修改
方案一:
①先创建一个要修改的通明的Cookie对象
②在构造器,同时赋予新的Cookie值
③调用response.addCookie(Cookie);
//①先创建一个要修改的通明的Cookie对象
//②在构造器,同时赋予新的Cookie值
Cookie cookie = new Cookie("key1","newValue1");
//③调用response.addCookie(Cookie);
resp.addCookie(cookie);
方案二:
①先查找到需要修改的Cookie对象
②调用setValue()方法赋予新的Cookie值
③调用response.addCookie()通知客户端保存修改
//①先查找到需要修改的Cookie对象
Cookie cookie = CookieUtils.findCookie("key2",req.getCookies());
if(cookie != null){
//②调用setValue()方法赋予新的Cookie值
cookie.setValue("newValue2");
//③调用response.addCookie()通知客户端保存修改
resp.addCookie(cookie);
}
resp.getWriter().write("key1的Cookie已经修改好");
5、Cookie生命控制
Cookie的生命控制指的是如何管理Cookie什么时候被销毁(删除)
setMaxAge()
正数:表示在指定的秒数后过期
负数:表示浏览器一关,Cookie就会被删除
0:表示马上删除Cookie
protected void deleteNow(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
//先找到要删除的Cookie对象
Cookie cookie = CookieUtils.findCookie("key4",req.getCookie());
if(cookie != null){
//调用setMaxAge(0)
cookie.setMaxAge(0);//表示马上删除,不需要等待浏览器关闭
//调用response.addCookie(cookie)
resp.addCookie(cookie);
resp.getWriter().write("key4的Cookie已经被删除");
}
}
protected void defaultLife(HttpServletRequest req,HttpServletRequest resp) throws ServletException,IOException{
Cookie cookie = new Cookie("defaultLife","defaultLife");
cookie.setMaxAge(-1);//设置存活时间
resp.addCookie(cookie);
}
6、Cookie有效路径Path的设置
Cookie的path属性可以有效的过滤哪些Cookie可以发送给服务器,哪些不发
path属性是通过请求的地址来进行有效的过滤
7、Cookie练习–免输入用户名登录
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
if ("wj168".equals(username) && "123456".equals(password)){
//登录成功
Cookie cookie = new Cookie("username",username);
cookie.setMaxAge(60*60*24*7);//当前Cookie一周内有效
resp.addCookie(cookie);
System.out.println("登录成功!");
}else {
//登录失败
System.out.println("登录失败!");
}
}
}
<form action="" method="get">
用户名:<input type="text" name="username" id=""><br>
密码:<input type="password" name="password" id=""><br>
<input type="submit" value="登录">
</form>
三、Seesion会话
1、定义
是一个接口(HttpSeesion)
是会话,用来维护一个客户端和服务器之间关联的一种技术
每个客户端都有自己的Session会话
Session会话中,经常用来保存用户登录之后的信息
2、如何创建Session和获取(id号,是否为新)
request.getSeesion();
第一次调用:创建Seesion会话
之后调用都是:获取前面创建好的Session会话对象
isNew():判断到底是不是刚创建出来的(新的)
true:表示刚创建
false:表示获取之前创建
每个会话都有一个ID值,且唯一,
getId()得到Session的会话id值
3、Session域数据的存取
4、Session生命周期控制
public void setMaxInactiveInterval(int interval)
设置Session的超时时间,超过指定时长,Session就会被销毁
值为正数时,设定Session的超时时长
负数表示永不超时(极少使用)
public void getMaxInactiveInterval()
获取Session的超时时间
Session默认的超时时长是多少?
30分钟
因为在Tomcat服务器的配置文件web.xml中默认有以下的配置,表示配置了当前Tomcat服务器下所有的Session超时配置默认时长为:30分钟
<session-config>
<session-timeout>30</session-timeout>
</session-config>
session.setMaxInactiveInterval(int interval)
单独设置超时时长
Session超时的概念介绍:
protected void life(HttpServletRequest req,HttpServletRequest resp) throws ServletException,IOException{
//先获取Session对象
HttpSeesion session = req.getSession();
//设置当前Session3秒后超时
session.setMaxInactiveInterval(3);
resp.getWriter().write("当前Session已经设置为3秒后超时");
}