servlet笔记

1.response的重定向

request.setAttribute("msg","response");

//动态获取虚拟目录

String contextPath = request.getContextPath();

//简单的重定向方法

response.sendRedirect(contextPath+"/ResponseDemo2");

//重定向是从客户端定向的,需要加虚拟目录

 

2.Servlet的转发

request.getRequestDispatcher("/ResponseDemo2").forward(request,response);

//转发是给服务器使用的,常不加虚拟目录

 

3.response输出字符流

//获取流对象之前,设置的默认编码:

response.setCharacterEncoding("utf-8");

//告诉浏览器,消息发送的消息体数据的编码。建议浏览器使用该编码解码

response.setHeader("content-type","text/html;charset=utf-8");

//1.获取字符输出流

PrintWriter pw = response.getWriter();

//2.输出数据

pw.write("<h1>你好 hello response<h1/>");

 

4.response输出字节流

response.setContentType("text/html;charset=utf-8");

//1.获取字节输出流

ServletOutputStream sos = response.getOutputStream();

//2.输出数据

sos.write("你好".getBytes("utf-8"));

 

5.ServletContext对象:代表整个web应用,可以和程序的容器(服务器)来通信

//1.通过request对象获取

ServletContext context1 = request.getServletContext();

//2.通过HttpServlet获取

ServletContext context2 = this.getServletContext();

 

//获取MiME类型

String mimeType = context.getMimeType(filename);

//保存数据

context.setAttribute("msg","haha");

//获取数据

Object msg = context.getAttribute("msg");

 

String realPath = context.getRealPath("/b.txt");//web目录下的资源访问

String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问

String a = context.getRealPath("/WEB-INF/classes/a.txt");//src的文件WEB-INF目录下的classes

 

6.文件下载

<!--1.定义页面,编辑超链接href属性,指向Servlet,传递资源名称filename-->

a href="/Pro09/downloadServlet?filename=2.jpg">图片1</a>

<a href="/Pro09/downloadServlet?filename=1.avi">视频</a>

 

//Servlet部分

//1.获取请求参数,文件名称

String filename = request.getParameter("filename");

//2.使用字节输入流加载文件进内存

//2.1找到文件服务器路径

ServletContext servletContext = this.getServletContext();

String realPath = servletContext.getRealPath("/img/" + filename);

//2.2用字节流关联

FileInputStream fis = new FileInputStream(realPath);

 

//3.设置response的响应头

//3.1设置响应头类型:content-type

String mimeType = servletContext.getMimeType(filename);//获取文件的mime类型

response.setHeader("content-type",mimeType);

//3.2设置响应头打开方式:content-disposition

 

//解决中文文件名问题

//1.获取user-agent请求头、

String agent = request.getHeader("user-agent");

//2.使用工具类方法编码文件名即可

filename = DownLoadUtils.getFileName(agent, filename);

 

response.setHeader("content-disposition","attachment;filename="+filename);

//4.将输入流的数据写出到输出流中

ServletOutputStream sos = response.getOutputStream();

byte[] buff = new byte[1024 * 8];

int len = 0;

while((len = fis.read(buff)) != -1){

sos.write(buff,0,len);

}

 

fis.close();

 

//工具类

if (agent.contains("MSIE")) {

// IE浏览器

filename = URLEncoder.encode(filename, "utf-8");

filename = filename.replace("+", " ");

} else if (agent.contains("Firefox")) {

// 火狐浏览器

BASE64Encoder base64Encoder = new BASE64Encoder();

filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";

} else {

// 其它浏览器

filename = URLEncoder.encode(filename, "utf-8");

}

return filename;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值