Http协议中的request

1.requset对象和response对象的原理

  1. request和response对象是由服务器创建的。我们使用他们
  2. request对象是来获取请求消息,response对象是来设置响应消息的
    request

2.request:获取请求消息

1.获取请求行数据 Get /day14/demo1?name=zhangsan http/1.1

方法:
1.获取请求方式:GET String getMethod()
2.获取虚拟目录:/day14 String getContextPath()
3.获取servlet路径:/demo1 String getServletPath()
4.获取get方式请求参数:name=zhangsan String getQueryString()
5.获取URL:/day14/demo1 String getRequestURI()
:http://localhost/day14/demo1 StringBuffer getRequestURL
URL:统一资源定位符 URI:统一资源标识符
6.获取协议及版本: HTTP/1.1 String getProtocol()
7.获取客户机的IP地址:String getRemoteAddr()

@WebServlet("/requestDemo1")
public class request extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
        1.获取请求方式:GET   String getMethod()
        2.获取虚拟目录:/day14   String getContextPath()
        3.获取servlet路径:/demo1   String getServletPath()
        4.获取get方式请求参数:name=zhangsan    String getQueryString()
        5.获取URL:/day14/demo1   String getRequestURI()        :http://localhost/day14/demo1  StringBuffer getRequestURL
        6.获取协议及版本: HTTP/1.1  String getProtocol()
        7.获取客户机的IP地址:String getRemoteAddr()
         */
	//1.获取请求方式:GET   String getMethod()
        String method = req.getMethod();
        System.out.println(method);
	//2.获取虚拟目录:/day14   String getContextPath()
        String contextPath = req.getContextPath();
        System.out.println(contextPath);
	//3.获取servlet路径:/demo1   String getServletPath()
        String servletPath = req.getServletPath();
        System.out.println(servletPath);
	//4.获取get方式请求参数:name=zhangsan    String getQueryString()
        String queryString = req.getQueryString();
        System.out.println(queryString);
	//5.获取URL:/day14/demo1   String getRequestURI()        :http://localhost/day14/demo1  StringBuffer getRequestURL
        String requestURI = req.getRequestURI();
        System.out.println(requestURI);
        StringBuffer requestURL = req.getRequestURL();
        System.out.println(requestURL);
	//6.获取协议及版本: HTTP/1.1  String getProtocol()
        String protocol = req.getProtocol();
        System.out.println(protocol);
	//7.获取客户机的IP地址:String getRemoteAddr()
        String remoteAddr = req.getRemoteAddr();
        System.out.println(remoteAddr);
   }
}

2.获取请求头数据:

*方法:
String getHeader(String name) //通过请求头的名称获取请求头的值
Enumeration<String> getHeaderName() //获取所有的请求头名称请求头:
Enumeration<String> headerNames = req.getHeaderNames();
while(headerNames.hasMoreElements()){
    String name=headerNames.nextElement();
    String value=req.getHeader(name);
    System.out.println(name+"---"+value);
}

user-agent: 判断使用的浏览器请求头:referer:判断来源路径

实例:

@WebServlet("/requestDemo3")
public class request2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //演示获取请求头:referer
        String referer = req.getHeader("referer");
        System.out.println(referer);
        if (referer != null) {
            if (referer.contains("/day14")) {
                System.out.println("播放电影");
            }else
                System.out.println("来我们网址吧!!!");
        }
    }
}
@WebServlet("/requestDemo2")
public class request1 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //演示获取请求头:user-agent
        String agent=req.getHeader("user-agent");
        if(agent.contains("Chrome")){
            System.out.println("Chrome棒");
        }else if(agent.contains("firefox")){
            System.out.println("火狐棒");
        }
    }
}

3.获取请求体数据:

*请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
*步骤:

1.获取流对象:

  • BufferedReader getReader() :获取字符输入流,只能操作字符数据
@WebServlet("/requestDemo4")
public class request3 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求消息体 --请求参数
        BufferedReader reader = req.getReader();
        //1.获取字符流
        String line=null;
        while((line = reader.readLine()) != null){
            System.out.println(line);
        }
    }
}
  • ServletInputStream getInputStream(): 获取字节输入流,可以操作所有数据类型

4.其他功能:####

1.获取请求
参数通用方式:(get post都能使用)

1.String getparameter(String name)    //根据参数获取参数值 username=zs&&password=123
2.String[]  getparameterValues(String name)   //根据参数名称获取参数值的数组  hobby=xx&hobby=game
3.Enumeration<String> getParameterNames()  //获取所有的参数名称
4.Map<String,String[]> getParameter()  //获取所有参数的Map集合

2.请求转发: 一种在服务器内部的资源跳转方式
1.步骤;
1.通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
2.使用RequestDispatcher对象来进行转发:forword(ServletRequest request,ServletResponse response)
2.特点:

  • 浏览器地址栏不发生变化
  • 只能转发到当前服务器内部资源中
  • 只发送了一次请求
@WebServlet("/requestDemo5")
public class request4 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("requsetdemo4...");
        req.setAttribute("msg","hello");
        req.getRequestDispatcher("/requestDemo6").forward(req,resp);

    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }
}
@WebServlet("/requestDemo6")
public class request5 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Object msg = req.getAttribute("msg");
        System.out.println(msg);
        System.out.println("requestdemo5...");

    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);  //这样写非必须
    }
}

3.共享资源:

  • 域对象:一个有作用范围的对象,可以在范围内共享数据
  • request域:代表一次请求的范围,一般用于请求转发的多个资源共享数据

方法:

  • void setAttribute(String name,Object obj):存储数据
  • Object getAttitude(String name) :通过键获取值
  • void removeAttribute(String name) :通过键移除键值对

4.获取ServletContext:

ServletContext getServletContext()   //获取Servlet对象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章