response对象实现http响应行,http响应头,http响应体,三部分。
手动设置http响应行中的状态码,http响应行
//response.setStatus(302);
设置响应头
//System.out.println("get方法正在运行.........");
//Date date=new Date();
//response.addHeader("name", "zhangsan");
//response.addIntHeader("age",20);
//response.addDateHeader("birthday",date.getTime());
还要setHeader(),setIntHeader(),setDateHeader()方法
用response实现重定向
1设置状态码302
//response.setStatus(302);
2设置响应头location
//response.setHeader("Location","/WEB/servlet2");
重定向封装成了一个方法
response.sendRedirect("servlet2");
设置定时刷新的头
response.setHeader("refresh","5;url=http://www.baidu.com");
//response.setCharacterEncoding("UTF-8");
通过一个头Content-Type告知客户端使用何种码表
//response.setHeader("Content-Type","text/html;charset=UTF-8");
服务器封装了一个方法
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer=response.getWriter();
//writer.write("hello response!1!");
writer.write("中国");
使用response获得字节输出流
浏览器不能解析的文件就下载
2.什么情况下需要在服务器端编写文件下载的代码?
理论上,浏览器可以解析代码需要编写文件下载代码,实际开发中,只要是下载的文件都编写文件下载代码。
download.html
1.response获得的流不需要手动关闭,Tomcat容器会帮助我们关闭
2.getWriter和getOutputStream不能同时调用
手动设置http响应行中的状态码,http响应行
//response.setStatus(302);
设置响应头
//System.out.println("get方法正在运行.........");
//Date date=new Date();
//response.addHeader("name", "zhangsan");
//response.addIntHeader("age",20);
//response.addDateHeader("birthday",date.getTime());
还要setHeader(),setIntHeader(),setDateHeader()方法
用response实现重定向
1设置状态码302
//response.setStatus(302);
2设置响应头location
//response.setHeader("Location","/WEB/servlet2");
重定向封装成了一个方法
response.sendRedirect("servlet2");
设置定时刷新的头
response.setHeader("refresh","5;url=http://www.baidu.com");
js实现定时器跳转
<script type="text/javascript">
window.onload=function(){
var time=5;
var secondEle=document.getElmentById("second");
var timer=setInterval(function(){
secondEle.innerHTML=time;
time--;
if(time==0){
clearInterval(timer);
location.href="http://www.baidu.com";
}
},1000);
}
</script>
</head>
<body>
恭喜你注册成功,<span style="color:red" id="second">5</span>秒钟跳转,如不跳转请点击<a href="http://www.baidu.com">这里!</a>
</body>
设置response查询的码表//response.setCharacterEncoding("UTF-8");
通过一个头Content-Type告知客户端使用何种码表
//response.setHeader("Content-Type","text/html;charset=UTF-8");
服务器封装了一个方法
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer=response.getWriter();
//writer.write("hello response!1!");
writer.write("中国");
使用response获得字节输出流
ServletOutputStream out=response.getOutputStream();
//获得服务器上的图片
String realPath=this.getServletContext().getRealPath("/a.jpg");
InputStream in=new FileInputStream(realPath);
int len=0;
byte[] buffer=new byte[1024];
while((len=in.read(buffer))>0){
out.write(buffer,0,len);
}
in.close();
out.close();
}
1.什么情况下下载?浏览器不能解析的文件就下载
2.什么情况下需要在服务器端编写文件下载的代码?
理论上,浏览器可以解析代码需要编写文件下载代码,实际开发中,只要是下载的文件都编写文件下载代码。
download.html
<body>
<h1>使用a标签直接指向服务器上的资源</h1>
<a href="/WEB/download/a.flv">a.flv</a><br/>
<a href="/WEB/download/a.jpg">a.jpg</a><br/>
<a href="/WEB/download/a.mp3">a.mp3</a><br/>
<a href="/WEB/download/a.mp4">a.mp4</a><br/>
<a href="/WEB/download/a.txt">a.txt</a><br/>
<a href="/WEB/download/a.zip">a.zip</a><br/>
<hr/>
<h1>使用服务器端编码的方式实现文件下载</h1>
<a href="/WEB/downloadServlet?filename=a.flv">a.flv</a><br/>
<a href="/WEB/downloadServlet?filename=a.jpg">a.jpg</a><br/>
<a href="/WEB/downloadServlet?filename=a.mp3">a.mp3</a><br/>
<a href="/WEB/downloadServlet?filename=a.mp4">a.mp4</a><br/>
<a href="/WEB/downloadServlet?filename=a.txt">a.txt</a><br/>
<a href="/WEB/downloadServlet?filename=a.zip">a.zip</a><br/>
</body>
DownloadServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//response.getWriter().append("Served at: ").append(request.getContextPath());
String filename=request.getParameter("filename");
//告诉客户端该文件不是直接解析,而是以附件形式打开(下载)
response.setHeader("Content-Disposition","attachment;filename="+filename);
//客户端通过文件的mime类型区分文件类型
response.setContentType(this.getServletContext().getMimeType(filename));
//获得要下载的文件的名称"
//String filename=request.getParameter("filename");
//获取文件的绝对路径
String path=this.getServletContext().getRealPath("download/"+filename);
//获得该文件的输入流
InputStream in=new FileInputStream(path);
//获得输出流----通过response获得的输出流用于想客户端写内容
ServletOutputStream out=response.getOutputStream();
//文件拷贝的模板代码
int len=0;
byte[] buffer=new byte[1024];
while((len=in.read(buffer))>0){
out.write(buffer,0,len);
}
in.close();
out.close();
}
response细节点:1.response获得的流不需要手动关闭,Tomcat容器会帮助我们关闭
2.getWriter和getOutputStream不能同时调用
验证码例子:
login.jsp:
<body>
<h1>验证码登录</h1>
<form action="http://www.baidu.com" method="post">
用户名: <input type="text" value="" name="username"/><br/>
密码: <input type="password" value="" name="password"/><br/>
验证码:<input type="text" value="" name="check">
<img id="imgId" onclick="changeImg()" src="${pageContext.request.contextPath}/verifyCodeServlet"/>
<a href="javascript:void(0)" onclick="changeImg()">换一张</a><br/>
<input type="submit" value="登录" name="login"/>
<script type="text/javascript">
function changeImg(){
$("#imgId").attr("src","${pageContext.request.contextPath}/verifyCodeServlet?t="+new Date());
}
</script>
</form>
</body>
VerifyCodeServlet.java
public class VerifyCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public VerifyCodeServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// response.getWriter().append("Served at: ").append(request.getContextPath());
int height=30;
int width=60;
String data="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
Random random=new Random();
//创建一个图片
BufferedImage image=new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
//获得画板
Graphics g=image.getGraphics();
//填充一个矩形
g.setColor(Color.BLACK);
g.fillRect(0, 0, width, height);
g.setColor(Color.WHITE);
g.fillRect(1, 1, width-2, height-2);
g.setFont(new Font("宋体", Font.BOLD|Font.ITALIC, 25));
//写随机字
for(int i=0;i<4;i++){
g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
int index=random.nextInt(data.length());
String str=data.substring(index, index+1);
g.drawString(str, width/6*(i+1), 20);
}
//干扰线
for(int i=0;i<3;i++){
g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
g.drawLine(random.nextInt(width), random.nextInt(height), random.nextInt(width), random.nextInt(height));
g.drawOval(random.nextInt(width),random.nextInt(height),2,2);
}
ImageIO.write(image, "jpg", response.getOutputStream());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}