什么是http?
客户端和服务器之间发送的数据,需要遵守的规则。http协议中的数据又叫做报文。
客户端给服务器发送数据叫请求,服务器给客户端回传数据叫响应。
请求又分为GET、POST协议
1、GET请求
1.1请求行
(1)请求的方式(“GET”)
(2)请求的资源路径(+?+请求参数)
(3)请求的协议和版本号(HTTP/1.1)
1.2请求头
key:value 组成 不同的键值对表示不同的含义
2、POST请求
2.1请求行
(1)请求的方式(“GET”)
(2)请求的资源路径(+?+请求参数)
(3)请求的协议和版本号(HTTP/1.1)
2.2请求头
key:value 组成 不同的键值对表示不同的含义
空行
2.3请求体
就是发送给服务器的数据
以下时POST请求HTTP协议内容
常用请求头说明:
Accept:表示客户端可以接受的数据类型
Accept-Language:表示客户端可以接受的语言类型
User-Agent:表示客户端浏览器的信息
Host:表示请求时的服务器ip和端口号port
那些是GET请求,哪些是POST请求?
GET请求有哪些?
1、form标签 method=get
2、a标签
3、link标签引入css
4、Script标签引入js文件’
5、img标签引入图片
6、iframe引入html页面
7、在浏览器地址栏中输入地址后回车
POST请求有哪些?
form标签 method=post
响应的HTTP协议格式
1、响应行
(1)响应的协议和版本号 HTTP/1.1
(2)响应状态码 200
(3)响应状态描述符
2、响应头
(1) key:value 不同的响应头有不同的意义
空行
3、响应体 就是服务器给客户端回传的数据
实例:
常用的响应码说明:
200 表示请求成功
302 表示请求重定向
404 表示请求服务器已经收到,但是你要的数据不存在(请求地址错误)
500 服务器已经收到请求,但是服务器内部错误(代码错误)
HttpServletRequest类
1、HttpServletRequest类有什么作用?
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet和doPost)中给我们使用,我们可以通过HttpServletRequest对象,获取到所有请求的信息。
2、HttpServletRequest类的常用方法
(1)getRequestURI() 获取请求的资源路径
(2)getRequestURL() 获取请求的统一资源定位符(绝对路径)
(3)getRemoteHost() 获取客户端的ip地址
(4)getHeader() 获取请求头
(5)getParameter() 获取请求的参数
(6)getParameterValues() 获取请求的参数(多个值的时候使用)
(7)getMethod() 获取请求的方式POST或GET
(8)setAttribute(key,value) 设置域数据
(9)getAttribute(key) 获取域数据
(10)getRequestDispatcher() 获取请求转发对象
请求的转发:
是指服务器收到请求后,从一个资源跳转到另一个资源的操作叫请求转发。
请求转发的特点:
1、浏览器地址栏没有变化
2、他们是一次请求
3、所以他们共享Request域中的数据
4、可以转发到WEB-INF目录下
5、是否可以访问工程以外的资源
base标签
Web中的相对路径和绝对路径
相对路径是:
. 表示当前目录
.. 表示上一级目录
资源名 表示当前目录/资源名
绝对路径:
http://ip:port/工程路径/资源路径
Web中 / 的不同意义
在web中 / 是一种绝对路径
/ 如果被浏览器解析,得到的地址是:http://ip:port
<a href="/">斜杠</a>
/ 如果被服务器解析,得到的地址是:http://ip:port/工程路径
1、<url-pattern>/fc</url-pattern>
2、servletContext.getRealPath("/")
3、request.getRequestDispatcher("/")
特殊情况:
responce.sendRediect(“/”) 把斜杠发送给浏览器解析,得到http://ip:port/
HttpServletResponse类的作用
HttpServletResponse类和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息。我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象进行设置。
两个输出流的说明:
字节流:getOutputStream(); 常用于下载(传递二进制数据)
字符流:getWrite() 常用于回传字符串(常用)
两个流同时只能使用一个。
使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。
如何往客户端回传数据?
要求:往客户端回传 字符串数据
public class ResponseIOServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(resp.getCharacterEncoding()); //默认ISO-8859-1
//设置服务器字符集为UTF-8 方法一:
// resp.setCharacterEncoding("UTF-8");
// //通过响应头,设置浏览器也使用UTF-8
// resp.setHeader("Content-type","text/html;charset-UTF-8");
// 方法二: 它会同时设置服务器和客户端都使用utf-8字符集,还设置了响应头
//注意: 此方法一定要在获取流对象之前调用才有效
resp.setContentType("text/html;charset-UTF-8");
//往客户端回传 字符串数据
PrintWriter writer = resp.getWriter();
writer.write("徐文强");
}
}
请求重定向:
是指客户端给服务器发请求,然后服务器告诉客户端说,我给你一些地址,你去新地址访问。叫请求重定向(因为之前的地址可能已被废弃)。
请求重定向的特点:
1、浏览器地址栏会发生变化
2、两次请求
3、不共享Request内保存的数据
4、不能访问WEB-INF下的资源
5、可以访问工程外的资源
请求重定向第二种方法(推荐使用):
public class Response1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("曾到此一游response1");
//设置响应码302,表示重定向,(已搬迁)
// resp.setStatus(302);
// //设置响应头,说明新的地址在哪里
// resp.setHeader("Location","http://localhost:8080/servlet_08_war_exploded/response2");
resp.sendRedirect("http://localhost:8080");
}
}