5.HttpServletRequest类

HttpServletRequest类

一、作用

每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。

然后传递到service方法(doGet 和 doPost)中给我们使用。

可以通过HttpServlerRequest对象,获取到所有请求的信息

 

二、常用方法

  1. getRequestURI() —> 获取请求的资源路径
  2. getRequestURL() —> 获取请求的统一资源定位符(绝对路径)
  3. getRemoteHost() —> 获取客户端ip地址
  4. getHeader() —> 获取请求头
  5. getParameter() —> 获取请求的参数
  6. getParameterValues() —> 获取请求的参数(多个值的时候使用)
  7. getMethod() —>获取请求的方式GET 或 POST
  8. setAttribute(key,value) —>设置域数据
  9. getAttribute(key) —>获取域数据
  10. getRequestDispatcher() —> 获取请求转发对象

演示代码:

package servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RequestAPIServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //i. getRequestURI() 获取请求的资源路径
        System.out.println("URI->"+req.getRequestURI());
        //ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)
        System.out.println("URL->"+req.getRequestURL());
       //iii. getRemoteHost() 获取客户端的 ip 地址
        /*
        * 在IDEA中,使用localhost访问时 得到的客户端ip地址是0:0:0:0:0:0:0:1
        * 如果使用真实ip访问时,得到的客户端ip地址是真实的客户端ip地址
        * */
        System.out.println("客户端IP地址:"+req.getRemoteHost());
        //iv. getHeader() 获取请求头
        System.out.println("请求头User-Agent-->"+req.getHeader("User-Agent"));
        //v. getParameter() 获取请求的参数

        //vi. getParameterValues() 获取请求的参数(多个值的时候使用)
        //vii. getMethod() 获取请求的方式 GET 或 POST
        System.out.println("请求的方式:"+req.getMethod());
    }
}

三、获取请求参数

1. 新建html文件,创建表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/07_servlet/parameterServlet" method="post">
    username: <input type="text" name="username"><br>
    password: <input type="password" name="password"><br>
    hobby: <input type="checkbox" name="hobby" value="cpp">C++
    <input type="checkbox" name="hobby" value="Java">Java
    <input type="checkbox" name="hobby" value="JS">JS
    <input type="submit">
</form>
</body>
</html>

2. 创建java类获取请求参数

package servlet;

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.Arrays;

public class ParameterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String[] hobby = req.getParameterValues("hobby");
        System.out.println("密码:"+password);;
        System.out.println("用户名:"+username);
        System.out.println("爱好:"+ Arrays.asList(hobby));

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求体的字符集为UTF-8,从而解决post请求的中文乱码问题,也要在获取请求参数之前调用才有效
        req.setCharacterEncoding("UTF-8");
        System.out.println("----------doPost");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String[] hobby = req.getParameterValues("hobby");
        System.out.println("用户名:"+username);
        System.out.println("密码:"+password);
        System.out.println("爱好:"+ Arrays.asList(hobby));
    }
}

四、请求转发

定义:指服务器收到请求后,从一次资源跳转到另一次资源的操作

请求转发过程解析:

  1. 客户端通过 http://ip:port/工程名/servlet1 访问 servlet1程序
  2. servlet1程序执行如下操作:
    1. 获取请求的参数
    2. 处理完业务,给请求的参数设置一个object 让servlet2知道是从servlet1转发过来的
    3. 通过servlet1找到servlet2的程序地址
    4. 跳转到servlet2
  3. servlet2程序执行如下操作:
    1. 获取请求参数
    2. 检验servlet1的标记(object)
    3. 处理业务

演示代码:

servlet1中的代码:

package servlet;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Servlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求的参数
        String username = req.getParameter("username");
        System.out.println("在Servlet1中查看参数:"+username);

        //给请求的参数设置object,并传递到Servlet2去查看
        req.setAttribute("Key","柜台1的章");
        

        //设置Servlet2的地址
        /*
        请求转发必须要以斜杠开始,斜杠表示地址为;http://ip:port/工程名/, 映射到IDEA代码的web目录

        * */
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");
        //跳转servlet2
        requestDispatcher.forward(req,resp);
    }
}

servlet2中的代码:

package servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        System.out.println("在servlet2中查看参数:"+username);

        //查看servlet1是否有“章”
        Object key1 = req.getAttribute("key1");
        System.out.println("servlet1是否有章:"+ key1);

        //处理自己的业务
        System.out.println("servlet2处理自己的业务");
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值