程序员社区

【Servlet-0】Request对象的功能(获取请求参数,请求转发,共享数据,获取ServletContext对象)

文章目录

    • 1.获取请求参数的通用方式
    • 2.Request对象实现请求转发功能
    • 3.Requset对象实现共享数据
    • 4.Request对象获取ServletContext对象

1.获取请求参数的通用方式

不管是get和post方式都可以用的方式:
 1.根据参数名称获取参数值:
  String getParameter(String name)
 2.根据参数名称获取参数值的数组
  String[] getParameterValues(String name)
  3.获取所有请求参数的名称
  getParameterNames()
 4.获取所有参数的map集合
   Map<Stirng,String[]> getParameterMap()

<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--<a href="/15-Http-Request/RequestDemo4">demo4...</a>-->
<form action="/15-Http-Request/RequestDemo6" method="get">
    请输入用户名: <input type="text" name="username"><br>
    请输入密码:<input type="text" name="password"><br>
    <input type="submit" value="注册">
</form>
</body>
</html>
package 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;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

/**
 * 演示获取请求体
 */
@WebServlet("/RequestDemo7")
public class RequsetDemo7 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //post方式获取请求参数

        //根据参数名称获取参数值
        String username = request.getParameter("username");
        System.out.println("post");
        System.out.println(username);
        System.out.println("===========");

        //根据参数名称获取参数值的数组
        String[] hobbies = request.getParameterValues("hobby");
        for(String hobby:hobbies){
            System.out.println(hobby);
        }
        System.out.println("===========");

        //获取所有请求的参数名称
        Enumeration<String> parameterNames = request.getParameterNames();
        while(parameterNames.hasMoreElements()){
            String name = parameterNames.nextElement();
            System.out.println(name);
            String value = request.getParameter(name);
            System.out.println(value);
            System.out.println("............");
        }
        System.out.println("===============");

        //获取所有参数map集合
        Map<String,String[]> parameterMap = request.getParameterMap();
        //将键存储在一个set集合中,遍历集合根据建获取值
        Set<String> keyset = parameterMap.keySet();
        for(String name:keyset){
            //根据键获取值
            String[] values = parameterMap.get(name);
            for(String value:values){
                System.out.println(value);
            }
            System.out.println("-------");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
        //get方式获取请求参数
        String username = request.getParameter("username");
        //根据参数名称获取参数值
        System.out.println("get");
        System.out.println(username);
         */

        //因为两个方法相同,所以只需要调用doPost()方法即可
        this.doPost(request,response);
    }
}

2.Request对象实现请求转发功能

一种在服务器内部的资源跳转方式
1.步骤:
 通过request对象获取请求转发器对象
  RequestDispatcher getRequestDispatcher(String path)
 使用RequestDispatcher这个对象进行转发
  forward(ServletRequest request,ServletResponse response)
2.特点:
 1.浏览器地址栏的路径没有发生变化
 2.只能转发到当前服务器内部资源中
 3.转发只是一次请求

package Request;

import javax.servlet.RequestDispatcher;
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("/RequestDemo10")
public class RequsetDemo10 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo10被访问了。。。");

        //转发到demo11的资源
//      RequestDispatcher requestDispatcher = request.getRequestDispatcher("/RequestDemo11");
//      requestDispatcher.forward(request,response);
        request.getRequestDispatcher("/RequestDemo11").forward(request,response);

    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}
package 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("/RequestDemo11")
public class RequsetDemo11 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo11被访问了。。。");
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

在这里插入图片描述

3.Requset对象实现共享数据

域对象:一个有作用范围的对象,可以在范围内共享数据
request域:代表一次请求的范围,一般用于请求转发的多个资源中去共享数据
方法:
 1.存储数据:
  void setAttribute(String name,,Object obj)
 2.通过键获取值
  Object getAttribute(String name)
 3.通过键移除键值对
  void removeAttribute(String name)

package Request;

import javax.servlet.RequestDispatcher;
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("/RequestDemo10")
public class RequsetDemo10 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo10被访问了。。。");
        //存储数据到request域中
        request.setAttribute("msg","hello");
        //转发到demo11的资源
        request.getRequestDispatcher("/RequestDemo11").forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}
package 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("/RequestDemo11")
public class RequsetDemo11 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo11被访问了。。。");
        //获取demo10中的数据
        Object msg = request.getAttribute("msg");
        System.out.println(msg);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

在这里插入图片描述

4.Request对象获取ServletContext对象

package Request;
import javax.servlet.ServletContext;
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("/RequestDemo12")
public class RequsetDemo12 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       ServletContext servletContext = request.getServletContext();
        System.out.println(servletContext);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

在这里插入图片描述

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 【Servlet-0】Request对象的功能(获取请求参数,请求转发,共享数据,获取ServletContext对象)

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区