一、web项目,是通过response和request对象通信,request封装请求消息,response对象封装返回消息。
1.服务器会根据请求url中的资源路径创建对应的Servlet的对象。
2.服务器会创建request和respones对象。
3.服务器将request和response两个对象传递给service()方法。
4.程序员可以通过request对象获取请求数据,通过respones对象设置响应消息数据。
5.服务器在给浏览器做出响应之前,会从response对象中拿出程序员设置的响应消息数据。
二、request
结构
1.ServletRequest -- 接口
2.HttpServletRequest --接口(实现ServletRequest)
3.org.apache.catalina.connector.RequestFacade (tomCat创建用于实现HttpServletRequest接口)
功能
1.获取请求行数据
1.获取请求方式 String getMethod()
2.获取虚拟目录(项目根目录) String getContexPath()
3.获取Servlet路径(定义的servlet请求路径) String getServletPath()
4.获取get方式请求参数 String getQueryString();
5.获取URI String getRequestURI() --请求的路径
6.获取url StringBuffer getRequestURL(); --http://IP:端口/请求路径
//URL:统一资源定位符;URI:统一资源标识符
7.获取协议及版本 String getProtocol() --http/1.1
8.获取客户机IP String getRemoteAddr()
package com.xiaoqiang.web;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Enumeration;
@WebServlet("/demo/requestDemo")
public class RequestDemoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求行数据
// 1.获取请求方式 String getMethod()
String method = req.getMethod();
System.out.println("获取请求方式 String getMethod():" + method);
// 2.获取虚拟目录(项目根目录) String getContexPath()
String contextPath = req.getContextPath();
System.out.println("获取虚拟目录(项目根目录) String getContexPath():" + contextPath);
//3.获取Servlet路径(定义的servlet请求路径) String getServletPath()
String servletPath = req.getServletPath();
System.out.println("3.获取Servlet路径 String getServletPath():" + servletPath);
//4.获取get方式请求参数 String getQueryString();
String queryString = req.getQueryString();
System.out.println("获取get方式请求参数 String getQueryString():" + queryString);
//5.获取URI String getRequestURI() --请求的路径
String requestURI = req.getRequestURI();
System.out.println("获取URI String getRequestURI() --请求的路径:"+requestURI);
//6.获取url StringBuffer getRequestURL(); --http://IP:端口/请求路径
StringBuffer requestURL = req.getRequestURL();
System.out.println("获取url StringBuffer getRequestURL(); --http://IP:端口/请求路径:" + requestURL.toString());
//7.获取协议及版本 String getProtocol() --http/1.1
String protocol = req.getProtocol();
System.out.println("获取协议及版本 String getProtocol() --http/1.1:" + protocol);
//8.获取客户机IP String getRemoteAddr()
String remoteAddr = req.getRemoteAddr();
System.out.println("获取客户机IP String getRemoteAddr():" + remoteAddr);
//获取请求头数据
// 1.getHeaderNames()获取所有的请求头名称
Enumeration<String> headerNames = req.getHeaderNames();
// 2.遍历获取到的请求头名称,String getHeader(String name) 通过请求头的名称获取请求头的值
while (headerNames.hasMoreElements()){ //hasMoreElements() 迭代标志,是否有下一个请求头
String s = headerNames.nextElement();//获取下一请求头名称
String header = req.getHeade