cookies&session

2020-07-18  本文已影响0人  杨健kimyeung

三层调用

DAO

Service

Controller

Servlet

导入相关包

集成HttpServlet

重写doXXX方法

在web.xml文件注册

HttpServletReqeust

HttpServletResponse

Session跟Cookie

问题???

http协议是 无状态

作用

记住客服端 (推送系统)

如何记住你

利用cookie

应用场景

组成

Session

常用操作

Session 跟Cookie的区别

重定向

作用

跳转不同的请求地址

response.sendRedirect("url地址")

转发

request.setAttribule(String,Object)

RequestDispatcher rd = request.getRequestDispathcer("url地址")

rd .foward(request,response)

转发 重定向
浏览器 发送一次请求 发送两次请求
地址栏 地址栏不变 地址栏发生改变
跳转不同 站内跳转 站外站内跳转
数据共享 共享(request) 数据不共享

文件上传

注意事项

前端组件(form)

服务端

利用第三方的包

第一步导入相关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数据

上一篇下一篇

猜你喜欢

热点阅读