美文网首页
cookies&session

cookies&session

作者: 杨健kimyeung | 来源:发表于2020-07-18 14:31 被阅读0次

三层调用

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数据

相关文章

  • cookies&session

    三层调用 DAO 数据库关键字 Service 判断登录是否成功 Controller 接受用户请求 响应请求 S...

网友评论

      本文标题:cookies&session

      本文链接:https://www.haomeiwen.com/subject/vmzxkktx.html