美文网首页
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

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