Http响应协议
1. 服务器端向浏览器端发送的数据
2. 响应
1. 响应行
1. 格式:协议/版本 响应的状态码 状态码的描述 ——————> HTTP/1.1 200 OK
2. 状态码都是三位数字 分类:1xx-5xx
3. 1xx未完成(服务器端没有完成客户端的数据,等待)
4. 2xx 成功
5. 3xx重定向 --->(302) 304-->(访问缓存)
6. 4xx 客户端出现错误 404 请求路径没有对应的资源,405 请求方法错误, get或者post出错
7. 5xx 服务器错误 服务器出现异常
2. 响应头
1. 常见的响应头: Content——Type: text/html ; charset= utf-8-->服务器告诉客户端本次响应的格式和编码
2. Content-dispostion :服务器告诉客户端以什么样的格式打开响应数据
3. 默认值:in-line在当前页面打开 attachment 以附件的形式打开
3. 响应空行
4. 响应体:HTML页面的内容(传输的数据)
Response对象
1. 设置响应消息
2. response.setStatus(int sc) 设置响应码
3. 设置响应体:获得输出流 (字节输出流 和字符输出流)
4. getWriter() getOutputStream()
重定向(response.sendRedirect("资源路径"))
1. 告诉浏览器 状态码(302)
2.告诉浏览器的资源的路径
` System.out.println("demo1 ");
//设置状态码
resp.setStatus(302);
//设置响应头告诉资源路径
resp.setHeader("location","/responseDemo2");
/**
*@描述
*@参数 只需要一个资源路径
*@返回值
*/
resp.sendRedirect("/responseDemo2");
}
`
重定向的特点
# 转发的特点 #
1. 转发的路径不变
2. 只能访问服务器内资源
3. 转发是一次请求
4.
## 从定向的特点 ##
1.重定向地址栏发生变
2.可以访问任何资源路径
3.是两次请求 (不能使用request域对象 共享数据)】
路径的写法
·1. 路径的分类:
1. 相对路径:不能够不可以确定唯一的资源,不以/开头 规则:当前资源和目标资源的相对的位置关系--->(./资源路径)(./可以省略不写)
2. 绝对路径:通过绝对路径可以确定唯一资源 以/开头的就会绝对路径
1. 给浏览器要加上虚拟目录(项目名)(重定向SendRedirect())
2. 给服务器就不用(加上虚拟目录)(转发 forward)
3.动态获取虚拟目录:request.getContextPath();
Response 输出字符数据
- 获取字符输出流
`@WebServlet(value = "/ResponseDemo5")
public class ResponseDemo5 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("gbk");
ServletOutputStream sos = response.getOutputStream();
sos.write("helle".getBytes());
sos.write("中国".getBytes());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);`
验证码
- 本质:图片 目的:是为了防止恶意注册
- 步骤:
- 创建一个画图的对象 2.美化图片 3.输出到客户端
`@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.美化图片
//2.1 填充背景色
Graphics g = image.getGraphics();//画笔对象
g.setColor(Color.PINK);//设置画笔颜色
g.fillRect(0,0,width,height);
//2.2画边框
g.setColor(Color.BLUE);
g.drawRect(0,0,width - 1,height - 1);
String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";
//生成随机角标
Random ran = new Random();
for (int i = 1; i <= 4; i++) {
int index = ran.nextInt(str.length());
//获取字符
char ch = str.charAt(index);//随机字符
//2.3写验证码
g.drawString(ch+"",width/5*i,height/2);
}
//2.4画干扰线
g.setColor(Color.GREEN);
//随机生成坐标点
for (int i = 0; i < 10; i++) {
int x1 = ran.nextInt(width);
int x2 = ran.nextInt(width);
int y1 = ran.nextInt(height);
int y2 = ran.nextInt(height);
g.drawLine(x1,y1,x2,y2);
}
//3.将图片输出到页面展示
ImageIO.write(image,"jpg",response.getOutputStream());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}`
ServletContext对象 #
1. 代表整个web应用,可以程序地容器(服务器)进行通信
2. 功能:
1. 获取MIME类型:可以用servletContext获取
1. 在互联网通信过程中定义的一种文件数据类型()各种格式 text/html image/jpeg
2. String getMimeType(String file() (拓展名)
3. 通过拓展名得到文件的类型
2.域对象
3.获取文件的真实路径
3。获取ServletContext对象--- request.getServletContext() 或者 通过, getServletContext()方法直接获取对象
获取方式
` @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//两种获取方式
ServletContext servletContext = this.getServletContext();
ServletContext servletContext1 = req.getServletContext();
System.out.println(servletContext1==servletContext);// true
System.out.println("----");
System.out.println(servletContext);
System.out.println("___");
System.out.println(servletContext1);
}
`
获取MIME类型
`@WebServlet("/servletContextDemo2")
public class servletContextDemo2 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//两种获取方式
ServletContext context = this.getServletContext();
String filename ="a.jpg";
String mimeType = context.getMimeType(filename);
System.out.println(mimeType);//image/jpeg
}
`## 获取文件的服务器路径 ##
` @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String path = context.getRealPath("/b.txt");//web目录下的资源访问
System.out.println(path);
//F:\IDEAWORKSPACE\ResponseDemo\out\artifacts\ResponseDemo_war_exploded\b.txt
System.out.println("-------------");
String realPath = context.getRealPath("WEB-INF/c.txt");
System.out.println(realPath);//访问WEB—INF目录下的
//F:\IDEAWORKSPACE\ResponseDemo\out\artifacts\ResponseDemo_war_exploded\WEB-INF\c.txt
System.out.println("))))))))))))))) ");
//获取到src路径下的资源路径—————— 放在WEB-INF目录下的classes目录xia
String realPath1 = context.getRealPath("WEB-INF/classes/a.txt");
System.out.println(realPath1);
//F:\IDEAWORKSPACE\ResponseDemo\out\artifacts\ResponseDemo_war_exploded\WEB-INF\classes\a.txt
}
`