超文本传输协议。
特点:
- 基于TCP/IP的高级协议
- 默认端口:80
- 基于请求响应模型的 一次请求对应一次响应
- 无状态的:每次请求之间相互独立
版本:
1.0版本:每次请求响应都会建立新的连接
1.1版本:复用连接
请求消息数据格式:
-
请求行
请求方式有 7种,常用的有两种
1.get:请求参数在URL后面,不安全,有长度限制
2.post:参数在请求体中,没有长度限制,相对安全 -
请求头
常用的请求头:
1 user-agent:浏览器告诉服务器其版本信息
2 referer:告诉服务器当前的的请求从什么地方来 -
请求空行
-
请求体
封装post请求消息的参数
Request&Response:
1.原理
- request与response对象有服务器来创建,
- request对象是来获取消息的,response对象是来设置响应信息的
2.request对象的继承体系
servletRequest接口 ,HttpServletRequest接口
3.request的功能
- 获取请求消息数据
获取请求行、请求头、请求体数据
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/request01")
public class Demo01Request extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
1.BufferedReader getReader();
2.ServletInputStream getInputStream();
*/
BufferedReader reader = req.getReader();
String line = null;
while ((line = reader.readLine())!=null){
System.out.println(line);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
*1. String getMethod();
*2. String getContextPath();
*3. String getServletPath();
*4. String getQueryString();
*5. String getRequestURL(); String getRequestURI();
*6. String getProtocol();
*7. String getRemoteAddr();
*
* 8. Enumeration getHeaderName();
* 9. String getHeader("user-agent");
*/
String method = req.getMethod();
System.out.println(method);
String contextPath = req.getContextPath();
System.out.println(contextPath);
String servletPath = req.getServletPath();
System.out.println(servletPath);
String queryString = req.getQueryString();
System.out.println(queryString);
StringBuffer requestURL = req.getRequestURL();
System.out.println(requestURL);
String requestURI = req.getRequestURI();
System.out.println(requestURI);
String protocol = req.getProtocol();
System.out.println(protocol);
String remoteAddr = req.getRemoteAddr();
System.out.println(remoteAddr);
Enumeration<String> headerName = req.getHeaderNames();
while (headerName.hasMoreElements()){
String name = headerName.nextElement();
String value = req.getHeader(name);
System.out.println(name+":"+value);
}
String header = req.getHeader("user-agent");
if (header.contains("Chrome")){
System.out.println("llllaaaaa");
}else {
System.out.println("hhhhhhaaaa");
}
}
}
- 其他方法
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;
public class Demo02Request extends HttpServlet {
/*
** 1.String getParameter("username");
* 2.String[] getParameterValues("hobby");
* 3.Enumeration<String> getParameterNames()
* 4.Map<String, String[]> getParameterMap();
*
* 请求转发
* 5.RequestDispatcher requestDispatcher = req.getRequestDispatcher().forward(req,resp);
*
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");//解决乱码问题
String username = req.getParameter("username");
System.out.println(username);
String[] hobbies = req.getParameterValues("hobby");
for (String hobby: hobbies) {
System.out.println(hobby);
}
Enumeration<String> parameterNames = req.getParameterNames();
while (parameterNames.hasMoreElements()){
String name = parameterNames.nextElement();
System.out.println(name);
String value = req.getParameter(name);
System.out.println(value);
}
Map<String, String[]> parameterMap = req.getParameterMap();
Set<String> setKey =parameterMap.keySet();
for(String key :setKey){
String[] values = parameterMap.get(key);
for (String value : values){
System.out.println(value);
}
System.out.println("==========");
}
}
}