2021-08-12 Servlet文件上传下载,Cookie,JSP

Servlet文件的上传|下载

文件上传

在上传界面中:upload.jsp
在做文件上传的时候,会有一个上传文件的界面,首先我们需要一个表单,并且表单的请求方式为
POST;其次我们的 form 表单的 enctype 必须设为"multipart/form-data",即
enctype=“multipart/form-data”,意思是设置表单的类型为文件上传表单。默认情况下这个表单类
型是 “application/x-www-form-urlencoded”, 不能用于文件上传。只有使用了multipart/form-data 才
能完整地传递文件数据。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="uploadServlet" method="post" enctype="multipart/form-data">
        姓名:<input type="text" name="uname">
        <br>
        文件:<input type="file" name="myfile">
        <br>
        <input type="submit" value="上传"/>
    </form>
</body>
</html>

在servlet中:FileLoad:

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;

@WebServlet("/uploadServlet")
@MultipartConfig // 如果是文件上传表单,一定要加这个注解
public class Fileload extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String uname = req.getParameter("uname");
        Part part = req.getPart("myfile");
        String fileName = part.getSubmittedFileName();
        String realPath = req.getServletContext().getRealPath("/");
        //part.write("D:\\"+fileName);可以直接指定路径
        part.write(realPath+fileName);

    }
}

注意点:
1、上传提交方式必须是post,编码格式必须是"multipart/form-data"
method=“post” enctype=“multipart/form-data”
2、Servlet中添加注解:@MultipartConfig
3、注意Servlet版本
4、注意上传位置

文件下载

两种下载方式
1、在html中使用a标签自带的功能下载:
下载

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="test01.txt">a标签测试下载1</a>
    <hr>
    <a href="test01.txt" download>a标签测试下载2</a>
    <hr>
    <a href="test01.txt" download="download">a标签测试下载3</a>
</body>
</html>

2、使用Servlet下载:
a标签中区别:
<a href="downFile?FileName=test01.txt download/>

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="downFile?FileName=test01.txt" download="download">txt文件下载测试</a>
    <hr>
    <a href="downFile?FileName=photo.png" download="download">png文件下载测试</a>
    <hr>
    <a href="downFile?FileName=003.mp4" download="download">mp4文件下载测试</a>
</body>
</html>

Servlet中:FileDown:
注意:

            // 设置响应类型 (浏览器无法使用某种方式或激活某个程序来处理的类型)
            resp.setContentType("application/x-msdownload");
            // 设置头信息
            resp.setHeader("Content-Disposition", "attachment;filename="+file);
           

代码:

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

@WebServlet("/downFile")
public class FileDown extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        //获取文件下载路径
        String path = getServletContext().getRealPath("/");
        //获取下载文件名
        String fileName = req.getParameter("FileName");
        //搭接路径
        File file=new File(path+"/"+fileName);
        //判断文件是否存在,是否是一个文件
        if(file.exists() && file.isFile()){
            // 设置响应类型 (浏览器无法使用某种方式或激活某个程序来处理的类型)
            resp.setContentType("application/x-msdownload");
            // 设置头信息
            resp.setHeader("Content-Disposition", "attachment;filename="+file);
            //流式操作进行文件下载
            FileInputStream in = new FileInputStream(file);
            ServletOutputStream ou = resp.getOutputStream();
            byte[] arr=new byte[1024];
            int len=-1;
            while ((len=in.read(arr))!=-1){
                ou.write(arr,0,len);
            }
            ou.flush();
            ou.close();
            in.close();
            System.out.println("文件下载成功");
        }else {
            System.out.println("文件下载失败");
        }
    }
}

Cookie

1、概述:Cookie是浏览器提供的一种技术,通过服务器的程序能将一些只须保存在客户端,或者在客户端进行
处理的数据,放在本地的计算机上,不需要通过网络传输,因而提高网页处理的效率,并且能够减少服
务器的负载,但是由于 Cookie 是服务器端保存在客户端的信息, 所以其安全性也是很差的。例如常见
的记住密码则可以通过 Cookie 来实现。
2、实现
通过 new Cookie(“key”,“value”);来创建一个 Cookie 对象,
Cookie 的格式:键值对用“=”链接,多个键值对间通过“;”隔开。

Cookie cookie=new Cookie("cookie","zheshiyigeCookie");

同名Cookie问题
如果服务器端发送重复的Cookie那么会覆盖原有的Cookie。
3 存储
浏览器存放Cookie的数量不同的浏览器对Cookie也有限定,Cookie的存储有是上限的。Cookie是存储在客户端(浏览 器)的,而且一般是由服务器端创建和设定。后期结合Session来实现回话跟踪。
4、安全性(不安全)
最大的原因是因为它存储在浏览器端(用户本地),一些别有用心的人能够通过浏览器截获cookie(脚本、利用工具抓取等)
5、cookie分类
瞬时Cookie 【默认,session级别】
持久化Cookie -->可用setMaxAge()来设置持续时间
到期时间的取值
负整数
若为负数,表示不存储该 cookie。
cookie 的 maxAge 属性的默认值就是-1,表示只在浏览器内存中存活,一旦关闭浏览器窗口,那
么 cookie 就会消失。
正整数
若大于 0 的整数,表示存储的秒数。
表示 cookie 对象可存活指定的秒数。当生命大于 0 时,浏览器会把 Cookie 保存到硬盘上,就算
关闭浏览器,就算重启客户端电脑,cookie 也会存活相应的时间。

若为 0,表示删除该 cookie。
cookie 生命等于 0 是一个特殊的值,它表示 cookie 被作废!也就是说,如果原来浏览器已经保存
了这个 Cookie,那么可以通过 Cookie 的 setMaxAge(0)来删除这个 Cookie。 无论是在浏览器内
存中,还是在客户端硬盘上都会删除这个 Cookie。
6、Cookie的路径

//与路径绑定
cookie.setPath("/");

7、Cookie中的各种方法

//创建cookie
        Cookie cookie=new Cookie("cookie","zheshiyigeCookie");
        //设置cookie持久性
        cookie.setMaxAge(1*24*60*60);
        //添加cookie
        resp.addCookie(cookie);
        //与路径绑定
        cookie.setPath("/");
        //获取cookie
        Cookie[] cookies = req.getCookies();
        for (Cookie ck :
                cookies) {
            System.out.println(ck.getName()+"----"+ck.getValue());
        }
        //响应到服务器
        resp.sendRedirect("cookieTest.jsp");

注意:

  1. Cookie保存在当前浏览器中。
    在一般的站点中常常有记住用户名这样一个操作,该操作只是将信息保存在本机上,换电脑以后这
    些信息就无效了。而且 cookie 还不能跨浏览器。
  2. Cookie存中文问题
    Cookie 中不能出现中文,如果有中文则通过 URLEncoder.encode()来进行编码,获取时通过
    URLDecoder.decode()来进行解码。
String name = "姓名";
String value = "张三";
// 通过 URLEncoder.encode()来进行编码
name = URLEncoder.encode(name);
value = URLEncoder.encode(value);
// 创建Cookie对象
Cookie cookie = new Cookie(name,value);
// 发送Cookie对象
response.addCookie(cookie);
// 获取时通过 URLDecoder.decode()来进行解码
URLDecoder.decode(cookie.getName());
URLDecoder.decode(cookie.getValue());

JSP

MVC模式

  • M:model javaBean
  • V:view html,jsp.freemarker
  • C:controller servlet…

JSP java server page
jsp就是一种特殊的Servlet
1、三种脚本

  • <%! 成员变量%>
  • <% 局部变量 %>
  • <%= 原样输出 %>

2、页面包含
静态包含(包含多个页面会出错)
<%@ include file="……"%>

<html>
<head>
    <title>Title</title>
</head>
<body>
       <%@ include file="common.jsp"%>
        <hr>
        <%--<%@ include file="common.jsp"%>--%>
        <hr>
        <%
            //int age=200;
        %>
        include.jsp!
</body>
</html>
	动态包含(可以包含多个页面,包含页面和被包含页面是2个文件)
		<jsp include file="……"/>
<html>
<head>
    <title>Title</title>
</head>
<body>
        <jsp:include page="common.jsp"/>
        <jsp:include page="common.jsp"/>
        <jsp:include page="common.jsp"/>
        <jsp:include page="common.jsp"/>
        <hr>
        jsp include 动态包含
</body>
</html>

3、EL表达式
1、 所 有 E L 表 达 式 的 格 式 都 是 以 “ {} 所有EL表达式的格式都是以“ EL {}”表示。
2、作用域取值
默认从最小作用域查找
可以指定作用域,在指定的作用域查找
3、四个内置对象
- pageScope
- requestScope
- sessionScope
- applicationScope

<html>
<head>
    <title>Title</title>
</head>
<body>

<%
    request.setAttribute("name","lisi"); // request作用域
    pageContext.setAttribute("uname","zhangsan"); // page作用域
    session.setAttribute("uname","wangwu"); // session作用域
    application.setAttribute("uname","zaholiu"); // application
%>
<hr>
    ${requestScope.uname }<<<<<
</body>
</html>

4、jsp九大内置对象
1.PageContext javax.servlet.jsp.PageContext JSP的页面容器
2.request javax.servlet.http.HttpServletrequest 获取用户的请求信息
3.response javax.servlet.http.HttpServletResponse 服务器向客户端的回应信息
4.session javax.servlet.http.HttpSession 用来保存每一个用户的信息
5.application javax.servlet.ServletContext 表示所有用户的共享信息
6.config javax.servlet.ServletConfig 服务器配置信息,可以取得初始化参数
7.out javax.servlet.jsp.jspWriter 页面输出
8.page java.lang.object)
9.exception java.lang.Throwable

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

faharciki

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值