E015Web学习笔记
E015Web学习笔记
一、ServletContext对象1、概念代表整个web项目,可以和web项目的容器(服务器)通信;2、功能①获取MIME类型;②域对象:共享数据;③获取文件的真实(服务器)路径、获取ServletContext对象①通过request获取:代码语言:javascript代码运行次数:0运行复制req.getServletContext();②通过HttpServlet
E015Web学习笔记
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);
}
();
}
}
运行结果:
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-23 16:25:56
上一篇:E016Web学习笔记
下一篇:【SQL必知必会】004
推荐阅读
留言与评论(共有 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" |