cookies&session
2020-07-18 本文已影响0人
杨健kimyeung
三层调用
DAO
- 数据库关键字
Service
- 判断登录是否成功
Controller
- 接受用户请求
- 响应请求
Servlet
导入相关包
集成HttpServlet
重写doXXX方法
在web.xml文件注册
-
注册报名+类名 (让tomcat实例化Servlet)
-
将url映射到Servlet
HttpServletReqeust
- req.getParamter("key")
- key相当于input中name属性的值
HttpServletResponse
- resp.getWriter.print("字符串")
Session跟Cookie
问题???
http协议是 无状态
作用
记住客服端 (推送系统)
如何记住你
利用cookie
应用场景
- 推送系统
- 登录系统
- 购物车功能(在不登录的情况下加入购车)
组成
- 键
- 值
- 过期时间
- 路径/域名
Session
- Cookie存储数据不安全
- Session存在服务器的内存中
常用操作
-
获取session对象
-
往session设置键值 (键是字符串,值是任何对象)
-
如何获取session的具体值(通过键获取值)
-
设置过期时间
-
-1 表示永不过期
- 0 关闭浏览器session消失
- 正整数 过期时间 单位是秒
-
invalidate() 清除session信息
Session 跟Cookie的区别
- 存储方式不同 一个存在服务器 一个存在客服端
- 存储数据的类型 一个可以存任意类型的数据 一个只能ASC码
- 安全方面 一个存在服务器 一个不安全
重定向
作用
跳转不同的请求地址
response.sendRedirect("url地址")
转发
request.setAttribule(String,Object)
RequestDispatcher rd = request.getRequestDispathcer("url地址")
rd .foward(request,response)
转发 | 重定向 | |
---|---|---|
浏览器 | 发送一次请求 | 发送两次请求 |
地址栏 | 地址栏不变 | 地址栏发生改变 |
跳转不同 | 站内跳转 | 站外站内跳转 |
数据共享 | 共享(request) | 数据不共享 |
文件上传
注意事项
- 必须是post或者put请求
前端组件(form)
- method 必须是post请求
- enctype 必须是 "multipart/form-data"
服务端
- **req.getInputStream() ** 不是通过 req.getParameter("")(只能获取字符串的数据)
利用第三方的包
第一步导入相关jar包
commons-fileupload-1.4.jar
commons-io-2.7.jar
第二步创建文件上传的Servlet
public class UploadServlet extends HttpServlet {
/**
* 技术
* 开发中
* 文件的覆盖的问题
* 通过多级目录实现
* 对图片进行重命名
* images/1/
* word/1/
* pdf/1/
* 命名规则 IMG_20200617153823
*
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 第一步获取客服端上传的图片数据
FileOutputStream fos = null;
//文件名称
FileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
try {
//通过解析req对象获取客服端上传的文件列表
List<FileItem> fileItems = servletFileUpload.parseRequest(req);
for (FileItem fileItem : fileItems) {
// 获取文件的名字
String name = fileItem.getName();
// 创建保存图片的根目录
File saveRootFile = FileUtils.mkRootFile("1");
// 上oos
String imageFile = FileUtils.getImageFile(name);
InputStream inputStream = fileItem.getInputStream();
org.apache.commons.io.FileUtils.copyInputStreamToFile(inputStream, new File(saveRootFile.getAbsolutePath() + "\\" + imageFile));
}
} catch (FileUploadException e) {
e.printStackTrace();
}
resp.getWriter().println("上传成功");
}
工具类
/**
* 创建动态目录
* 给文件重命名
*/
public class FileUtils {
private static final String IMG_ROOT_FILE = "D:\\upload\\images\\";
/**
*
*
* @return 创建保存图片的根路径
*/
public static File mkRootFile(String uid) {
//讲当前服务器的时间转化字符串
String patternDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
String filePath = IMG_ROOT_FILE + uid + "\\" + patternDate;
File file = new File(filePath);
if (!file.exists()) {
file.mkdirs();
}
return file;
}
/**
*
* @param oldImage
* @return
*/
public static String getImageFile(String oldImage) {
// 12313131313afadfsfds.png
// IMG_20200617155711.png
// 获取图片的后缀名 .png
String suffix = oldImage.substring(oldImage.lastIndexOf("."));
String patternDate = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
// IMG_2020061715571
String prefix = "IMG" + patternDate;
return prefix + suffix;
}
}
第四步 在web.xml中注册
<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>com.smart.app.controller.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
第五步前端上传界面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--http://127.0.0.1:8080/upload-->
<form method="post" action="/upload" enctype="multipart/form-data">
<!-- 不写默认是files-->
<input type="file" name="img">
<input type="submit" value="上传图片">
</form>
</body>
</html>
json数据