HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 101
Date: We02d, 06 Jun 2018 07:08:42 GMT
<html>
<head>
<title>$Title$</title>
</head>
<body>
hello , response
</body>
</html>
设置响应头:setHeader(String name, String value)
package cn.testRep.web.servlet;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
完成重定向
*/
@WebServlet("/responseDemo1")
public class ResponseDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
//访问/responseDemo1,会自动跳转responseDemo2
System.out.println("-------------------demo1-----------------");
//设置状态码
response.setStatus(302);
//设置响应头
response.setHeader("location","/testResp/responseDemo2");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
this.doPost(request,response);
}
}
-----------------------------------------------
package cn.testRep.web.servlet;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
完成重定向
*/
@WebServlet("/responseDemo2")
public class ResponseDemo2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
System.out.println("-------------------demo2-----------------");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
this.doPost(request,response);
}
}
forward 和 redirect 区别
简单的形式,设置编码,是在获取流之前设置
response.setContentType("text/html;charset=utf-8");
response.setContentType("text/html;charset=utf-8");
//获取字节输出流
ServletOutputStream sos = response.getOutputStream();
//输出数据
sos.write("hello".getBytes("utf-8"));
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/*
分析:
点击超链接或者图片,需要换一张
1.给超链接和图片绑定单击事件
2.重新设置图片的src属性值
*/
window.onload = function(){
//1.获取图片对象
var img = document.getElementById("checkCode");
//2.绑定单击事件
img.onclick = function(){
//加时间戳
var date = new Date().getTime();
//加参,欺骗服务器
img.src = "/testResp/checkCodeServlet?"+date;
}
}
</script>
</head>
<body>
<img id="checkCode" src="/testResp/checkCodeServlet" />
<a id="change" href="">看不清换一张?</a>
</body>
</html>
package cn.testRep.web.servlet;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int width = 100;
int height = 50;
//1.创建一个对象,在内存中画图
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//2.美化图片
//填充背景色
Graphics graphics = image.getGraphics();//画笔对象
graphics.setColor(new Color(200,200,169));//设置填充颜色
graphics.fillRect(0,0,width,height);//填充
//画边框
graphics.setColor(Color.darkGray);//设置边框颜色
graphics.drawRect(0,0,width-1,height-1);//画边框
//写验证码
String str = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
for (int i = 0; i < 4 ; i++) {
//生成随机角标
Random ran = new Random();
int index = ran.nextInt(str.length());
char ch = str.charAt(index);
graphics.drawString(ch+"",width/5*(i+1),ran.nextInt(height-8)+5);
}
//画干扰线
graphics.setColor(new Color(131,175,155));
//随机生成干扰线坐标点
graphics.drawLine(20,30,10,10);
//3.输出到页面展示
ImageIO.write(image,"jpg",response.getOutputStream());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
方法:String getRealPath(String path)
String b = context.getRealPath("/b.txt");//访问 web目录下资源
System.out.println(b);
String c = context.getRealPath("/WEB-INF/c.txt");//访问WEB-INF目录下的资源
System.out.println(c);
String a = context.getRealPath("/WEB-INF/classes/a.txt");//访问 src目录下的资源
System.out.println(a);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="/testResp/downloadServlet?filename=刺客伍六七.jpg">图片1</a>
</body>
</html>
package utils;
import sun.misc.BASE64Encoder;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class DownLoadUtils {
public static String getFileName(String agent, String filename) throws UnsupportedEncodingException {
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;
}
}
package cn.testRep.web.servlet;
import 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.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求参数,文件名称
String filename = request.getParameter("filename");
//找到文件真实路径
ServletContext servletContext = this.getServletContext();
String realPath = servletContext.getRealPath("/img/" + filename);
//用字节流进行关联,加载进内存
FileInputStream fis = new FileInputStream(realPath);
//解决下载文件中文乱码
String agent = request.getHeader("user-agent");
filename = DownLoadUtils.getFileName(agent,filename);
//设置响应头类型,弹出对话框
String mimeType = servletContext.getMimeType(filename);
response.setHeader("content-type",mimeType);
//设置响应头打开方式,filename在此为下载文件名
response.setHeader("content-disposition","attachment;filename="+filename);
//将输入流数据写入输出流中
ServletOutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[1024*8];
int len =0;
while ((len=fis.read(buffer)) != -1){
outputStream.write(buffer,0,len);
}
fis.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
原文:https://www.cnblogs.com/huxiaobai/p/12347290.html