栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Servlet学习(3)—— HttpServletRequest类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet学习(3)—— HttpServletRequest类

每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议解析好封装到Request对象中,然后传递到service方法(doGet和doPost)中,我们可以通过HttpServletRequest对象获取到所有请求的信息。

一. HttpServletRequest类的常用方法

1.getRequestURI():获取请求的资源路径

2.getRequestURL():获取请求的统一资源定位符(绝对路径)

3.getRemoteHost():获取客户端的ip地址

4.getHeader():获取请求头

5.getMethod():获取请求的方式()GET或POST

6.setAttribute(key,value):设置域数据

7.getAttribute(key):获取域数据

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 TestRequestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.getRequestURI():获取请求的资源路径
        System.out.println("URI: " + req.getRequestURI() );

        //2.getRequestURL():获取请求的统一资源定位符(绝对路径)
        System.out.println("URL:" + req.getRequestURL());

        //3.getRemoteHost():获取客户端的ip地址
        System.out.println("IP: " + req.getRemoteHost());

        //4.getHeader():获取请求头
        System.out.println("Header: " + req.getHeader("User-Agent"));

        //5.getMethod():获取请求的方式()GET或POST
        System.out.println("Method: " + req.getMethod());

        //6.setAttribute(key,value):设置域数据
        //7.getAttribute(key):获取域数据
        req.setAttribute("key1","value1");
        System.out.println(req.getAttribute("key"));
    }
}



    
        TestRequestServlet
        TestServlet.TestRequestServlet
    

    
        TestRequestServlet
        /requestServlet
    

8.getParameter():获取请求的参数

9.getParameterValues():获取请求的参数(多个值的时候使用)

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 {
        //8.getParameter():获取请求的参数
        System.out.println("username: " + req.getParameter("username"));  //张三
        System.out.println("password: " + req.getParameter("password"));  //123456

        //9.getParameterValues():获取请求的参数(多个值的时候使用)
        String[] hobby = req.getParameterValues("hobby");
        System.out.println("hobby: " + Arrays.asList(hobby));   //hobby: [Java, Python]
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //需要设置字体的字符集为UTF-8,来解决POST请求的中文乱码问题(英文可以正常显示,POST请求和GET请求一致)
        req.setCharacterEncoding("UTF-8");   //要在获取请求参数之前调用才有效

        //8.getParameter():获取请求的参数
        System.out.println("username: " + req.getParameter("username"));  //张三
        System.out.println("password: " + req.getParameter("password"));  //123456

        //9.getParameterValues():获取请求的参数(多个值的时候使用)
        String[] hobby = req.getParameterValues("hobby");
        System.out.println("hobby: " + Arrays.asList(hobby));   //hobby: [Java, Python]
    }
}



    
        ParameterServlet
        TestServlet.ParameterServlet
    

    
        ParameterServlet
        /parameterServlet
    




    
    Title


    
用户名:
密码:
爱好:Java Python C++

10.getRequestDispatcher():获取请求转发对象

        请求转发是指服务器收到请求后,从一个资源跳到另一个资源(例如:当有两个Servlet程序共同执行一个完整的功能时,客户端首先发送请求到Servlet1,Servlet1执行完后请求转发到Servlet2,Servlet2执行完后才相当于把整个请求的任务完成了,然后把响应的数据发送给客户端。其中Servlet1到Servlet2的操作叫请求转发)。

        该请求是一次请求,两个Servlet程序共用请求且共用Request域中的数据,地址栏中的地址一直是Servlet1中的地址。

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 {
        //Servlet1获取请求的参数
        String username = req.getParameter("username");
        System.out.println("Servlet1查看请求内容:" + username);

        //设置数据让Servlet2查看(让Servlet2知道自己已经执行过)
        req.setAttribute("key","Servlet1");

        //请求转发到Servlet2,请求转发的地址是web.xml中为Servlet2配置的地址
        //斜杠表示地址为:http://ip:port/工程名/ ,映射到了工程下的web目录
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");

        //走向Servlet2
        requestDispatcher.forward(req,resp);
    }
}
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 {
        //Servlet1获取请求的参数
        String username = req.getParameter("username");
        System.out.println("Servlet2查看请求内容:" + username);

        //Servlet2查看Servlet1是否执行过
        System.out.println("Servlet1是否执行过:" + req.getAttribute("key"));

        //Servlet2执行自己的操作
        System.out.println("Servlet2执行");
    }
}



    
        Servlet1
        TestServlet.Servlet1
    

    
        Servlet1
        /servlet1
    

    
        Servlet2
        TestServlet.Servlet2
    

    
        Servlet2
        /servlet2
    





    
    Title


    
用户名:
密码:
爱好:Java Python C++
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/763292.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号