您现在的位置是:首页 > 编程 > 

E015Web学习笔记

2025-07-24 11:25:27
E015Web学习笔记 一、ServletContext对象1、概念代表整个web项目,可以和web项目的容器(服务器)通信;2、功能①获取MIME类型;②域对象:共享数据;③获取文件的真实(服务器)路径、获取ServletContext对象①通过request获取:代码语言:javascript代码运行次数:0运行复制req.getServletContext();②通过HttpServlet

E015Web学习笔记

一、ServletContext对象

1、概念

代表整个web项目,可以和web项目的容器(服务器)通信;

2、功能

①获取MIME类型;

②域对象:共享数据;

③获取文件的真实(服务器)路径

、获取ServletContext对象

①通过request获取:
代码语言:javascript代码运行次数:0运行复制
req.getServletContext();
②通过HttpServlet获取:
代码语言:javascript代码运行次数:0运行复制
getServletContext();
因为MyServlet extends HttpServlet

备注:两种方式获取的是同一个ServletContext对象

4、ServletContext获取MIME类型

MIME类型:

在互联网通信过程中定义的一种文件数据类型;

格式:

大类型/小类型 比如:text/html、image/jpeg

5、域对象

方法:
代码语言:javascript代码运行次数:0运行复制
1、void setAttribute(String name, Object value);
2、Object getAttribute(String name);
、void removeAttribute(String name);
ServletContext对象范围:

所有用户所有请求的数据;

备注:使用的时候很谨慎!

6、获取文件的真实(服务器)路径

String getRealPath(String path);

读取文件代码示例:
代码语言:javascript代码运行次数:0运行复制
package com.zibo.servlet;

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

@WebServlet("/my")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletRespe resp) throws ServletException, IOException {
        println("doGet……");
        println("转到doPost……");
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletRespe resp) throws ServletException, IOException {
        println("doPost……");
        ServletContext servletContext = req.getServletContext();
        //
        String realPath_b = servletContext.getRealPath("/");
        println(realPath_b);
        //D:\MyFiles\IdeaProjects\web\out\artifacts\web_war_exploded\
        File file_b = new File(realPath_b);
        FileInputStream fileInputStream_b = new FileInputStream(file_b);
        byte[] bytes_b = fileInputStream_b.readAllBytes();
        println("读取到内容:"+new String(bytes_b));
        //
        String realPath_c = servletContext.getRealPath("/WEB-IF/");
        println(realPath_c);
        //D:\MyFiles\IdeaProjects\web\out\artifacts\web_war_exploded\WEB-IF\
        File file_c = new File(realPath_c);
        FileInputStream fileInputStream_c = new FileInputStream(file_c);
        byte[] bytes_c = fileInputStream_c.readAllBytes();
        println("读取到内容:"+new String(bytes_c));
        //
        String realPath_a = servletContext.getRealPath("/WEB-IF/classes/");
        println(realPath_a);
        //D:\MyFiles\IdeaProjects\web\out\artifacts\web_war_exploded\WEB-IF\classes\
        File file_a = new File(realPath_a);
        FileInputStream fileInputStream_a = new FileInputStream(file_a);
        byte[] bytes_a = fileInputStream_a.readAllBytes();
        println("读取到内容:"+new String(bytes_a));
    }
}
运行结果:
文件位置备注:
二、文件下载

1、说明

如果超链接指向的资源可以被浏览器解析,则会展示在浏览器里面,否则弹出下载框,询问下载;

2、通过响应头设置资源的打开方式

代码语言:javascript代码运行次数:0运行复制
conten-disposition:attachment;filename=xxx

、步骤

第一步:定义页面,编辑超链接href属性,指向Servlet,传递资源名称filename;

第二步:定义Servlet

代码语言:javascript代码运行次数:0运行复制
第一步:获取文件名称;

第二步:使用字节输入流,加载文件进内存;

第三步:指定respe的响应头:content-disposition:attachment;filename=xxx;

第四步:将数据写到respe输出流;

4、代码演示

html文件代码:
代码语言:javascript代码运行次数:0运行复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <a href="/my?filename=1.jpg">下载图片</a>
</body>
</html>
服务器代码:
代码语言:javascript代码运行次数:0运行复制
package com.zibo.servlet;

import javax.servlet.ServletContext;
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.HttpServletRespe;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

@WebServlet("/my")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletRespe resp) throws ServletException, IOException {
        println("doGet……");
        println("转到doPost……");
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletRespe resp) throws ServletException, IOException {
        println("doPost……");
        ServletContext servletContext = req.getServletContext();
        //1、获取文件名称——取参数
        String filename = req.getParameter("filename");
        //2、使用字节输入流,加载文件进内存——将文件读取到内存
        //1.jpg
        String realPath = servletContext.getRealPath("/img/"+filename);
        File file = new File(realPath);
        FileInputStream fileInputStream = new FileInputStream(file);
        //、指定respe的响应头:content-disposition:attachment;filename=xxx
        //设置响应头类型
        String mimeType = servletContext.getMimeType(filename);
        resp.setHeader("content-type",mimeType);
        //设置响应头打开方式
        resp.setHeader("content-disposition","attachment;filename="+filename);
        //4、将输入流中的数据写到输出流中
        ServletOutputStream stream = resp.getOutputStream();
        byte[] bytes = new byte[1024 * 8];
        int len = 0;
        while ((len = fileInputStream.read(bytes))!=-1){
            stream.write(bytes,0,len);
        }
        ();
    }
}
运行结果:
文件位置备注:

5、中文文件名乱码问题

DownloadUtils:
代码语言:javascript代码运行次数:0运行复制
package com.zibo.servlet.utils;

import java.io.UnsupportedEncodingException;
import java.URLEncoder;
import StandardCharsets;


public class DownloadUtils {

    public static String getFileame(String agent, String filename) throws UnsupportedEncodingException {
        if (("MSIE")) {
            // IE浏览器
            filename = (filename, StandardCharsets.UTF_8);
            filename = filename.replace("+", " ");
        }else {
            // 其它浏览器
            filename = (filename, StandardCharsets.UTF_8);
        }
        return filename;
    }
}
改造后的服务器代码:
代码语言:javascript代码运行次数:0运行复制
package com.zibo.servlet;

import com.zibo.servlet.utils.DownloadUtils;

import javax.servlet.ServletContext;
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.HttpServletRespe;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

@WebServlet("/my")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletRespe resp) throws ServletException, IOException {
        println("doGet……");
        println("转到doPost……");
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletRespe resp) throws ServletException, IOException {
        println("doPost……");
        ServletContext servletContext = req.getServletContext();
        //1、获取文件名称——取参数
        String filename = req.getParameter("filename");
        //2、使用字节输入流,加载文件进内存——将文件读取到内存
        //1.jpg
        String realPath = servletContext.getRealPath("/img/"+filename);
        File file = new File(realPath);
        FileInputStream fileInputStream = new FileInputStream(file);
        //、指定respe的响应头:content-disposition:attachment;filename=xxx
        //设置响应头类型
        String mimeType = servletContext.getMimeType(filename);
        resp.setHeader("content-type",mimeType);
        //设置响应头打开方式
        //解决中文乱码问题
        //1、获取user-agent请求头
        String header = req.getHeader("user-agent");
        //2、使用工具类方法编码文件名
        filename = DownloadUtils.getFileame(header, filename);
        resp.setHeader("content-disposition","attachment;filename="+filename);
        //4、将输入流中的数据写到输出流中
        ServletOutputStream stream = resp.getOutputStream();
        byte[] bytes = new byte[1024 * 8];
        int len = 0;
        while ((len = fileInputStream.read(bytes))!=-1){
            stream.write(bytes,0,len);
        }
        ();
    }
}
运行结果:
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent 删除数据学习笔记request对象服务器

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1199699.html

相关标签:无
上传时间: 2025-07-23 16:25:56
留言与评论(共有 16 条评论)
本站网友 爽肤水有什么用
6分钟前 发表
原始发表:2025-01-06
本站网友 中华企管网
13分钟前 发表
Object getAttribute(String name);
本站网友 儿童不吃早餐的危害
4分钟前 发表
Object value); 2
本站网友 聂文星
17分钟前 发表
IOException { println("doPost……"); ServletContext servletContext = req.getServletContext(); // String realPath_b = servletContext.getRealPath("/"); println(realPath_b); //D
本站网友 egoistic
23分钟前 发表
通过响应头设置资源的打开方式代码语言:javascript代码运行次数:0运行复制conten-disposition
本站网友 兰州旅行社
20分钟前 发表
image/jpeg5
本站网友 文件属性
5分钟前 发表
IOException { println("doPost……"); ServletContext servletContext = req.getServletContext(); //1
本站网友 嘉里
26分钟前 发表
mimeType); //设置响应头打开方式 //解决中文乱码问题 //1
本站网友 农场牧场助手
21分钟前 发表
获取user-agent请求头 String header = req.getHeader("user-agent"); //2
本站网友 嘉实稳健070003
1分钟前 发表
传递资源名称filename;第二步:定义Servlet代码语言:javascript代码运行次数:0运行复制第一步:获取文件名称; 第二步:使用字节输入流
本站网友 发底牌
23分钟前 发表
filename); resp.setHeader("content-disposition"
本站网友 传真平台
23分钟前 发表
获取文件名称——取参数 String filename = req.getParameter("filename"); //2
本站网友 水手之家
10分钟前 发表
使用工具类方法编码文件名 filename = DownloadUtils.getFileame(header
本站网友 什么粥养胃
21分钟前 发表
\MyFiles\IdeaProjects\web\out\artifacts\web_war_exploded\WEB-IF\classes\ File file_a = new File(realPath_a); FileInputStream fileInputStream_a = new FileInputStream(file_a); byte[] bytes_a = fileInputStream_a.readAllBytes(); println("读取到内容:"+new String(bytes_a)); } }运行结果:文件位置备注:二
本站网友 可望
13分钟前 发表
attachment;filename=xxx //设置响应头类型 String mimeType = servletContext.getMimeType(filename); resp.setHeader("content-type"