HttpServletResponse(response和request)
2013-11-06 15:33
309 查看
客户端每一次请求Web服务器,分别创建一个request对象和response对象,要获取提交的数据找request,向客户机输出数据找response
WEB服务器回送给WEB客户端的HTTP响应分三个部分:
1、状态行(HTTP响应的响应状态行包活HTTP版本、状态代码和提示信息) 2、响应消息头 3、消息正文
addHeader与setHeader方法
addIntHeader与setIntHeader方法
addDateHeader与setDateHeader方法
setContentLength方法
setContentType方法:用于设置Servlet输出内容的MIME类型,对于HTTP协议来说,就是设置Content-Type响应头字段的值。如“text/html;charset=UTF-8”
setCharacterEncoding方法:用于设置输出内容的MIME声明中的字符集编码,对HTTP协议来说,就是设置Content-Type头字段中的字符编码部分。
package www.csdn.net.daya35.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DemoServlet1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置响应的状态码
response.setStatus(response.SC_FOUND);
//重定向
response.sendRedirect("./index.jsp");*/
try {
int i=1/0;
} catch (Exception e) {
e.printStackTrace();
//设置错误
response.sendError(response.SC_NOT_FOUND,e.getMessage());
}
//设置头信息
response.setIntHeader("status", 500);//
response.setHeader("content-length", "10");//内容长度
response.setHeader("date", "2010-10-10");//响应日期
response.setContentType("text/html;charset=UTF-8");
response.setHeader("content-type", "texy/html;charset=UTF-8");
response.setContentLength(20);
response.setCharacterEncoding("UTF-8");
response.getWriter().print("中国,我爱你!!");
//以下载出出现
response.setContentType("text/htmlxx;charset=UTF-8");
response.getOutputStream().write(97);
//response.getWriter().write(98+"");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
response常见应用
向客户端输出中文数据 (分别以OutPutStream和printWriter输出)
package www.csdn.net.daya35.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DemoServlet2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//头响应
response.setContentType("text/html");
response.getOutputStream().write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'>".getBytes());
//"军哥".getBytes() 以gb2312编码打开会乱码
response.getOutputStream().write("军哥".getBytes("UTF-8"));
}
public void test3(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//头响应
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//"军哥".getBytes() 以gb2312编码打开会乱码
response.getWriter().print("军哥x");
}
public void test2(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//头响应
response.setContentType("text/html;charset=UTF-8");
//"军哥".getBytes() 以gb2312编码打开不会乱码
response.getOutputStream().write("军哥xxx".getBytes("UTF-8"));
}
public void test1(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
//"军哥".getBytes() 以gb2312编码打开会乱码
response.getOutputStream().write("军哥xxxx".getBytes("UTF-8"));
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
文件下载(先在WEB-INF建一个res文件夹拷贝一张图片)
package www.csdn.net.daya35.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DemoServlet3 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置编码
response.setCharacterEncoding("UTF-8");
//1.设置响应类型
response.setContentType("image/jpeg");
//2.获取下载的资源
//获取路径
String path = this.getServletConfig().getServletContext().getRealPath("/res/h.jpg");
System.out.println(path);
//获取文件名称
String fileName=path.substring(path.lastIndexOf("\\")+1);
//设置浏览器以下载的方式打开数据
response.setHeader("content-disposition", "attachment;fileName="+URLEncoder.encode(fileName, "UTF-8"));
//URLEncoder.encode 经过URL编码(UTF-8)
//转换成文件对象
File file = new File(path);
//创建流对象
InputStream is = new FileInputStream(file);
//3.写出
//输出流对象
OutputStream os = response.getOutputStream();
//定义读取的长度
int len=0;
//定义缓冲区
byte buffer[]= new byte[1024];
//循环读取
while((len=is.read(buffer))!=-1){
//写入
os.write(buffer, 0, len);
}
//立即写入
os.flush();
//关闭操作
os.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
输出随机图片
package www.csdn.net.day36.servlet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ImgServlet extends HttpServlet {
private static final int WIDTH = 0;
private static final int HEIGHT = 0;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//禁止浏览器缓存
response.setHeader("expires","0" );
response.setHeader("Cache-control", "no-cache");
response.setHeader("Pragma", "no-cache");
//1通知浏览器以图片的方式打开数据
response.setContentType("image/jpeg");
final int WIDTH=40;
final int HEIGHT=20;
//2创建图片
BufferedImage image=new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
//3.得到图形绘制的对象
Graphics g=image.getGraphics();
//设置背景颜色
setBackGroud(g);
//设置边框
setBorder(g);
//绘制内容
drawContent(g);
//绘制干扰线
drawDistbLine(g);
//把图片显示绘制浏览器
ImageIO.write(image, "jpeg", response.getOutputStream());
String resourse="\u7684\u4e00\u4e86\u6211\u4e0d\u5728\u4eec\u6765";
//获取字符的长度
int length=resourse.length();
//随机操作对象
Random r=new Random();
//存储字符的对象
StringBuffer sb=new StringBuffer();
for(int i=0;i<4;i++){
//随机产生数字
int index=r.nextInt(length);
//获取字符
char c=resourse.charAt(index);
//拼接字符
sb.append(c);
}
g.setColor(Color.DARK_GRAY);
g.drawString(sb.toString(), 20, 20);
}
/***
* 绘制内容
* @param g
*/
private void drawContent(Graphics g) {
}
/***
* 绘制干扰线
* @param g
*/
private void drawDistbLine(Graphics g) {
g.setColor(Color.BLACK);
Random r=new Random();
for(int i=0;i<4;i++){
int x1=r.nextInt(WIDTH);
int y1=r.nextInt(HEIGHT);
int x2=r.nextInt(WIDTH);
int y2=r.nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}
private void setBorder(Graphics g) {
g.setColor(Color.black);
g.fillRect(0, 0, WIDTH-2,HEIGHT-2 );
}
private void setBackGroud(Graphics g) {
//绘制矩形
g.setColor(Color.BLUE);
g.fillRect(0, 0, WIDTH, HEIGHT);
}
}
WEB服务器回送给WEB客户端的HTTP响应分三个部分:
1、状态行(HTTP响应的响应状态行包活HTTP版本、状态代码和提示信息) 2、响应消息头 3、消息正文
addHeader与setHeader方法
addIntHeader与setIntHeader方法
addDateHeader与setDateHeader方法
setContentLength方法
setContentType方法:用于设置Servlet输出内容的MIME类型,对于HTTP协议来说,就是设置Content-Type响应头字段的值。如“text/html;charset=UTF-8”
setCharacterEncoding方法:用于设置输出内容的MIME声明中的字符集编码,对HTTP协议来说,就是设置Content-Type头字段中的字符编码部分。
package www.csdn.net.daya35.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DemoServlet1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置响应的状态码
response.setStatus(response.SC_FOUND);
//重定向
response.sendRedirect("./index.jsp");*/
try {
int i=1/0;
} catch (Exception e) {
e.printStackTrace();
//设置错误
response.sendError(response.SC_NOT_FOUND,e.getMessage());
}
//设置头信息
response.setIntHeader("status", 500);//
response.setHeader("content-length", "10");//内容长度
response.setHeader("date", "2010-10-10");//响应日期
response.setContentType("text/html;charset=UTF-8");
response.setHeader("content-type", "texy/html;charset=UTF-8");
response.setContentLength(20);
response.setCharacterEncoding("UTF-8");
response.getWriter().print("中国,我爱你!!");
//以下载出出现
response.setContentType("text/htmlxx;charset=UTF-8");
response.getOutputStream().write(97);
//response.getWriter().write(98+"");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
response常见应用
向客户端输出中文数据 (分别以OutPutStream和printWriter输出)
package www.csdn.net.daya35.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DemoServlet2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//头响应
response.setContentType("text/html");
response.getOutputStream().write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'>".getBytes());
//"军哥".getBytes() 以gb2312编码打开会乱码
response.getOutputStream().write("军哥".getBytes("UTF-8"));
}
public void test3(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//头响应
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//"军哥".getBytes() 以gb2312编码打开会乱码
response.getWriter().print("军哥x");
}
public void test2(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//头响应
response.setContentType("text/html;charset=UTF-8");
//"军哥".getBytes() 以gb2312编码打开不会乱码
response.getOutputStream().write("军哥xxx".getBytes("UTF-8"));
}
public void test1(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
//"军哥".getBytes() 以gb2312编码打开会乱码
response.getOutputStream().write("军哥xxxx".getBytes("UTF-8"));
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
文件下载(先在WEB-INF建一个res文件夹拷贝一张图片)
package www.csdn.net.daya35.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DemoServlet3 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置编码
response.setCharacterEncoding("UTF-8");
//1.设置响应类型
response.setContentType("image/jpeg");
//2.获取下载的资源
//获取路径
String path = this.getServletConfig().getServletContext().getRealPath("/res/h.jpg");
System.out.println(path);
//获取文件名称
String fileName=path.substring(path.lastIndexOf("\\")+1);
//设置浏览器以下载的方式打开数据
response.setHeader("content-disposition", "attachment;fileName="+URLEncoder.encode(fileName, "UTF-8"));
//URLEncoder.encode 经过URL编码(UTF-8)
//转换成文件对象
File file = new File(path);
//创建流对象
InputStream is = new FileInputStream(file);
//3.写出
//输出流对象
OutputStream os = response.getOutputStream();
//定义读取的长度
int len=0;
//定义缓冲区
byte buffer[]= new byte[1024];
//循环读取
while((len=is.read(buffer))!=-1){
//写入
os.write(buffer, 0, len);
}
//立即写入
os.flush();
//关闭操作
os.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
输出随机图片
package www.csdn.net.day36.servlet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ImgServlet extends HttpServlet {
private static final int WIDTH = 0;
private static final int HEIGHT = 0;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//禁止浏览器缓存
response.setHeader("expires","0" );
response.setHeader("Cache-control", "no-cache");
response.setHeader("Pragma", "no-cache");
//1通知浏览器以图片的方式打开数据
response.setContentType("image/jpeg");
final int WIDTH=40;
final int HEIGHT=20;
//2创建图片
BufferedImage image=new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
//3.得到图形绘制的对象
Graphics g=image.getGraphics();
//设置背景颜色
setBackGroud(g);
//设置边框
setBorder(g);
//绘制内容
drawContent(g);
//绘制干扰线
drawDistbLine(g);
//把图片显示绘制浏览器
ImageIO.write(image, "jpeg", response.getOutputStream());
String resourse="\u7684\u4e00\u4e86\u6211\u4e0d\u5728\u4eec\u6765";
//获取字符的长度
int length=resourse.length();
//随机操作对象
Random r=new Random();
//存储字符的对象
StringBuffer sb=new StringBuffer();
for(int i=0;i<4;i++){
//随机产生数字
int index=r.nextInt(length);
//获取字符
char c=resourse.charAt(index);
//拼接字符
sb.append(c);
}
g.setColor(Color.DARK_GRAY);
g.drawString(sb.toString(), 20, 20);
}
/***
* 绘制内容
* @param g
*/
private void drawContent(Graphics g) {
}
/***
* 绘制干扰线
* @param g
*/
private void drawDistbLine(Graphics g) {
g.setColor(Color.BLACK);
Random r=new Random();
for(int i=0;i<4;i++){
int x1=r.nextInt(WIDTH);
int y1=r.nextInt(HEIGHT);
int x2=r.nextInt(WIDTH);
int y2=r.nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}
private void setBorder(Graphics g) {
g.setColor(Color.black);
g.fillRect(0, 0, WIDTH-2,HEIGHT-2 );
}
private void setBackGroud(Graphics g) {
//绘制矩形
g.setColor(Color.BLUE);
g.fillRect(0, 0, WIDTH, HEIGHT);
}
}
相关文章推荐
- servlet (4) HttpServletRequest 和HttpServletResponse
- 解决Maven项目下添加HttpServletRequest 或 HttpServletResponse需引用的依赖包报错
- Struts2中使用HttpServletRequest和HttpServletResponse
- HttpServletRequestWrapper,HttpServletResponseWrapper在过滤器Filter中的使用
- Struts 获取HttpServletRequest和HttpServletResponse的两种方式
- HttpServletRequest和HttpServletResponse详解
- JavaWeb如何将后台数据传递到前台页面HttpServletResponse和HttpServletRequest
- HttpServletRequest和HttpServletResponse
- HttpServletRequest和response的模拟单元测试
- 关于Filter中ServletRequest和ServletResponse强转HttpServletRequest和HttpServletResponse安全问题(向下转型一定不安全吗?)
- Spring集成CXF客户端获取HttpServletRequest,HttpServletResponse
- httpservletrequest和httpservletresponse的理解
- HttpServletResponse HttpServletRequest RequestDispatcher
- JavaWeb学习四(HttpServletResponse和HttpServletRequest)
- JSP网络编程-请求和响应-HttpServletRequest-HttpServletResponse-学习笔记
- 请求重定向与请求转发的比较(HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法)
- (精)高手不得不会的东西--HttpServletRequestWrapper、HttpServletResponseWrapper,HttpSessionWrapper用法
- The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes
- HttpServletResponse.sendRedirect()方法/RequestDispatcher.forward()方法
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别