Java learning request

Java learning request

0x00 Preface

In B / S architecture, request and response are essential. When visiting the web page, a request will be sent. After receiving the request, the server will respond to the corresponding content according to the setting code.

0x01 request and response concepts

Request and response:

Request inheritance system:


 ServletRequest      --接口
              丨继承
       HttpServlet      --接口
              丨实现
       org.apache.catalina.connector.RequestFacade 类(tomcat)

0x02 request

Common methods:

String getmethod()              获取请求方式
String getContextPath()         获取虚拟路径
String getServletPath()         获取Servlet路径
String getQueryString()         获取get请求方式参数
String getRequestURI()          获取请求uri
StringBuffer getRequestURL()    获取URL
String getProtocol()            获取协议版本
String getRemoteAddr()          获取客户端ip
String getHeader(String name)   通过请求头的名称获取请求头的值
Enumeration<String> getHeaderNames(): 获取所有的请求头名称

code:

package it.Test.servlet;


import javax.servlet.*;
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(urlPatterns = "/demo")
public class servelet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException {
        String header = req.getHeader("user-agent");//获取ua
        System.out.println(header);
        String method = req.getmethod();//获取请求方式
        System.out.println(method);
        String contextPath = req.getContextPath();  //获取虚拟路径
        System.out.println(contextPath);
        String servletPath = req.getServletPath(); //获取servlet路径
        System.out.println(servletPath);
        String queryString = req.getQueryString();//获取get请求参数
        System.out.println(queryString);
        String requestURI = req.getRequestURI();//获取uri路径
        System.out.println(requestURI);
        StringBuffer requestURL = req.getRequestURL();//获取完整url路径
        System.out.println(requestURL);



    }

    @Override
    protected void doPost(HttpServletRequest req,IOException {
        System.out.println("post请求");
    }
}

Get post request data:

*  BufferedReader getReader():获取字符输入流,只能操作字符数据
ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据

To demonstrate the post request, write an HTML code to submit the post data.

Read post request code:





 BufferedReader reader = req.getReader();
        String line = null;
        while ((line = reader.readLine())!=null){
            System.out.println(line);


General method:


String getParameter(String name):根据参数名称获取参数值
String[] getParameterValues(String name):根据参数名称获取参数值的数组
Enumeration<String> getParameterNames():获取所有请求的参数名称
 Map<String,String[]> getParameterMap():获取所有参数的map集合

Code example:

package it.Test.servlet;


import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Enumeration;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

@WebServlet(urlPatterns = "/demo")
public class servelet extends HttpServlet {
    private Object Enumeration;

    @Override
    protected void doGet(HttpServletRequest req,IOException {
        req.setCharacterEncoding("utf-8");  //设置编码
        //getParameter方法
        String username = req.getParameter("username");//获取提交的username的值
        System.out.println(username);

        //getParameterValues方法
        String[] usernames = req.getParameterValues("username");//根据参数获取参数值爆出为数值
        for (String s : usernames) {
            System.out.println(s);
        }

        //getHeaderNames()方法
        Enumeration<String> headerNames = req.getHeaderNames();//获取所有参数名
        while (headerNames.hasMoreElements()){
            String s = headerNames.nextElement();  //遍历参数名
            System.out.println(s);
            String value = req.getParameter(s); //使用getParameter遍历参数的值
            System.out.println(value);


        }

        //parameterMap方法
        Map<String,String[]> parameterMap = req.getParameterMap();
        Set<String> strings = parameterMap.keySet();  //获取所有键名
        for (String name : strings) {
            String[] strings1 = parameterMap.get(name);  //使用get方法,获取所有键的值
            System.out.println(name);
            for (String value : strings1) {
                System.out.println(value);
            }
        }



    }





    @Override
    protected void doPost(HttpServletRequest req,IOException {
       this.doGet(req,resp);
    }
}


After tomcat8, the garbled get request mode has been solved, but it needs to be set manually in post.

Request forwarding

One servlet may have a single function. We can define two servlets to forward the request to another servlet for processing.

Common methods:

 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
 
 使用RequestDispatcher对象来进行转发:forward(ServletRequest request,ServletResponse response) 

Servlet1 Code:

@WebServlet("/demo12")
public class ServletDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req,IOException {
        req.getRequestDispatcher("/demo00").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req,IOException {
        super.doPost(req,resp);
    }
}

Servlet2 Code:

@WebServlet("/demo00")
public class ServletDemo2 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req,IOException {
        System.out.println("demo2被访问");
    }

    @Override
    protected void doPost(HttpServletRequest req,resp);
    }
}

This method can only access the internal resources of the server, and the URL will not jump when the request is forwarded.

shared data

域对象:一个有作用范围的对象,可以在范围内共享数据

request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据

method:

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

Serveret1 Code:

req.setAttribute("name","abc");  //存储数据到request域里面
        req.getRequestDispatcher("/demo00").forward(req,resp);

The domain data is stored before serveret1 forwarding, and then forwarded.

Serveret2 Code:

  Object name = req.getAttribute("name");
        System.out.println(name);

Use the getattribute method to get the request domain shared data.

0x03 end

The general content of the request is so much. You have to type more code, otherwise it's easy to forget. The next article updates the response content.

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>