Response对象
功能:设置响应消息。
- 设置响应行
格式:HTTP/1.1 200 ok
设置状态码:setStatus(int sc)
- 设置响应头:setHeader(String name, String value)
- 设置响应体:
步骤:
1.获取输出流。
字符输出流:PrintWriter getWriter()
字节输出流:ServletOutputStream getOutputStream()
2.使用输出流:将数据输出到客户端浏览器。
具体应用:
1.重定向:资源跳转的方式
response.sendRedirect("要跳转的地址");
重定向和转发的区别
重定向的特点 :redirect
1.地址栏发生变化。
2.重定向可以访问其他服务器的资源。
3.重定向是两次请求。不能使用request域来共享数据。转发的特点:forward
1.地址栏没有变化。
2.转发只能访问当前服务器下的资源。
3.转发是一次请求,可以使用request对象来共享数据。
相对路径和绝对路径的写法
a.相对路径:不能确定唯一资源。
如:./index.html 不以/开头,以.开头路径
规则:找到当前资源和目标资源之间的相对位置关系
./:当前目录
…/:后退一级目录
b.绝对路径:可以确定唯一资源。
如:http://localhost/responseDemo2 以/开头的路径
规则:判断定义的路径是给谁用的?判断请求将来从哪儿发出
给客户端浏览器使用:需要加虚拟目录(项目的访问路径)
建议虚拟目录动态获取:request.getContextPath()
给服务器使用:不需要加虚拟目录
2. 服务器输出字符数据到浏览器
步骤:
a. 获取字符输出流
b. 输出数据
需要注意的问题:乱码
- PrintWriter pw = response.getWriter();获取的流的默认编码是ISO-8859-1
- 设置该流的默认编码
- 告诉浏览器响应体使用的编码
在获取流之前设置编码,简单形式:
response.setContentType("text/html;charset=utf-8");
3. 服务器输出字节数据到浏览器(与输出字符数据同理)
4. 验证码(我们手动写出一个验证码,代码只需要了解即可)
a.本质是一张图片
b.目的是为了防止表单恶意注册
//2.美化图片
Graphics g = image.getGraphics(); //画笔对象
//2.1画背景
g.setColor(Color.pink);
g.fillRect(0,0,width,height);
//2.2画边框
g.setColor(Color.blue);
g.drawRect(0,0,width-1,height-1);
//2.3如何随机写验证码
String str="ABCDEFGHIGKLMNabsdfghjkl123456";
//生成随机角标
Random random=new Random();
for (int i = 1; i <=4; i++) {
int index = random.nextInt(str.length());
//获取字符
char c = str.charAt(index);
//写验证码
g.drawString(c+"",width/5*i,height/2);
}
//2.4画干扰线
g.setColor(Color.green);
for (int i = 1; i <=10 ; i++) {
//随机生成坐标点
int x = random.nextInt(width);
int x1=random.nextInt(width);
int y = random.nextInt(height);
int y1=random.nextInt(height);
g.drawLine(x,y,x1,y1);
}
//3.将图片输出到页面展示
ImageIO.write(image,"jpg",response.getOutputStream());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/*
* 点击超链接 或者图片换一张
* 1.给超链接和图片绑定单击事件
* 2.重新设置src 属性值*/
window.onload=function () {
var img = document.getElementById("checkCode");
//绑定单击事件
img.onclick=function () {
//时间戳
var time = new Date().getTime();
img.src="/login/checkCode?"+time;
}
}
window.onload=function () {
var href = document.getElementById("click");
//绑定单击事件
href.onclick=function () {
//时间戳
var time = new Date().getTime();
img.src="/login/checkCode?"+time;
}
}
</script>
</head>
<body>
<img id="checkCode" src="/login/checkCode" />
<a id="click" href="">看不清换一张</a>
</body>
</html>