目录
一、Http响应
1.1 响应行
(1).【Http版本号 状态码 原因叙述】
(2)常见状态码:
<1>.200——表示一切正常
<2>.302(307):页面重新指定向(可用在付款前必须登录、联网前必须登录)
<3>.304:表示文件未修改,使用内存中获取页面资源
<4>.404:表示找不到网页
<5>.500:服务端出错,可能是代码错误
Servlet最主要的作用就是处理客户端的请求,并向客户端作出响应。
URI:统一资源标志符
URL:统一资源定位符,具体的URI,是URI的一个子集,不仅唯一标识资源,而且还提供了定位该资源的信息。
在Servlet APl中,定义了一个HttpServletResponse接口,它继承自ServletResponse 接口,专门用来封装HTTP响应消息。由于HTTP响应消息分为状态行、响应消息头、消息体三部分。因此,在HttpServletResponse 接口中定义了向客户端发送响应状态码、响应消息头、响应消息体的方法。
request对象的学习:
作用:获得request对象中封存了当前请求的所有信息
使用:
获取请求头数据
req.
getMethod();//获取请求方式
req.getRequestURL();//获取请求URL信息
req.getRequestURI();//获取请求URL信息
req.getScheme();//获取协议版本
获取请求行数据:
req.getHeader("键名");//返回指定的请求头信息
req.getHeaderNames();//返回请求头得键名枚举集合
获取用户数据:
req.getParameter("键名");//返回指定的用户健名对应的值,如果没有这个键,不会报错,只会返回null值。
req.getParameterValues("键名");//返回指定的键名对应的多个值,例如返回多选的多个值,如果利用上面的方法,那么只会返回第一个值
req.getParameterNames();//返回所有用户请求数据的键的枚举集合
response对象的学习:
作用:用来响应数据到浏览器的一个对象
使用:
设置响应头:
resp.setHeader(String name,String value);//在响应头中增加响应信息,如果键名相同,会覆盖之前的信息
resp.addHeader(String name,String value);//在响应头中增加响应信息,不会覆盖之前的信息
设置响应状态:
resp.sendError(int code,String name);//自定义错误状态,前面是状态码,后面是状态码的说明
设置响应实体:
resp.getWriter().write(Strin str);//响应具体的数据给浏览器
1.2发送响应消息体相关方法
1.getOutStream()方法获取输出流
2.getWriter()方法发送消息体
package cn.itcast.chapter04.response;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class PrintServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
String data = "dashuj2004Lily";
// 获取字节输出流对象
// OutputStream out = response.getOutputStream();
// out.write(data.getBytes());// 输出信息
PrintWriter print = response.getWriter();
print.write(data); // 输出信息
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
doGet(request, response);
}
}
getOutStream()方法获取输出流对象
注意:虽然response对象的getOutputStreamO和getWriter(O方法都可以发送响应消息体,但是,它们之间互相排斥,不可同时使用,否则会发生IllegalStateException异常
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("收到前端请求");
//设置响应行
//response.sendError(404,"大数据2004--项目请求的资源不存在");
//设置响应行
//response.setstatus(302);//设置响应行
//response.setHeader("Location","/firstservlet/login.html");设置响应头
二、实现重定向
一个web资源收到客户端请求后,他会通知客户端去访问另外一个web资源,这个过程就是重定向。
常见场景:
- 用户登录
void sendRedirect(String var1) throws IOException;
代码测试:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
resp.setHeader("Location","/r/img");
resp.setStatus(302);
*/
resp.sendRedirect("/r/img"); //重定向
}
结果在浏览器中访问效果如下:路径从 /red 自动跳转到 /img