Servlet p3 HttpServletRequest对象

这篇具有很好参考价值的文章主要介绍了Servlet p3 HttpServletRequest对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HttpServletRequest对象

基本介绍

HttpServletRequest对象:HttpServletRequest 对象专门用于封装 HTTP 请求消息,简称 request 对象。主要作用是用来接收客户端发送过来的请求信息,该对象是由Tomcat封装好传递过来。

​ HttpServletRequest接口是ServletRequest的子接口。HTTP 请求消息分为请求行、请求消息头和请求消息体三部分,所以 HttpServletRequest 接口中定义了获取请求行、请求头和请求消息体的相关方法。

在HttpServletRequest对象在Service方法中由容器传入过来,无需自己创建。

接收请求

常用方法

返回值类型 方法声明 描述
StringBuffer getRequestURL() 返回客服端发出请求时的完整URL
String getRequestURI() 该方法用于获取请求行中的资源名称部分,即位于 URL 的主机和端口之后,参数部分之(URL 中“?”以前)的部分。
String getQueryString() 该方法用于获取请求行中的参数部分,也就是 URL 中“?”以后的所有内容。
String getMethod() 该方法用于获取 HTTP 请求方式(如 GET、POST 等)。
String getProtocol() 返回HTTP版本号。
String getContextPath() 返回当前 Servlet 所在的应用的名字(上下文)。对于默认(ROOT)上下文中的 Servlet,此方法返回空字符串""。

代码演示:

package com.xxxx.servlet;

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("/s01")
public class servlet01 extends HttpServlet  {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*常用方法*/
        //输入的地址:http://localhost:8080/ser02/s01
        //获取请求时的完整路径(从http开始,到 "?" 前面结束)
        String url = req.getRequestURL() + "";
        System.out.println("请求时的完整路径:" + url);//请求时的完整路径:http://localhost:8080/ser02/s01
        //获取请求时的部分路径(从项目的站点名开始,到 "?" 前面结束)
        String uri = req.getRequestURI();
        System.out.println("请求时的部分路径:" + uri);//请求时的部分路径:/ser02/s01
        //获取请求时的参数字符串(从 "?" 后面开始,到最后的字符串)
        String queryString = req.getQueryString();
        System.out.println("请求时的参数字符串(从 \"?\" 后面开始,到最后的字符串):" + queryString);//请求时的参数字符串(从 "?" 后面开始,到最后的字符串):null
        //获取请求方式(GET和POST)
        String method = req.getMethod();
        System.out.println("获取请求方式(GET和POST):" + method);//获取请求方式(GET和POST):GET
        //获取当前的协议版本
        String protocol = req.getProtocol();
        System.out.println("当前的协议版本:" + protocol);//当前的协议版本:HTTP/1.1
        //获取项目的站点名(项目的对外访问路径)
        String contextPath = req.getContextPath();//上下文路径
        System.out.println("项目的站点名(项目的对外访问路径):" + contextPath);//项目的站点名(项目的对外访问路径):/ser02
    }
}

获取请求参数

返回值类型 方法声明 描述
String getParameter(String name) 以字符串形式返回指定的请求参数的值,或者如果参数不存在则返回 null。
String[] getParameterValues(String name) 返回一个字符串对象的数组,包含所有指定的请求参数的值,如果参数不存在则返回 null。

代码演示:

package com.xxxx.servlet;

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("/s01")
public class servlet01 extends HttpServlet  {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*获取请求参数*/
        //输入的地址:http://localhost:8080/ser02/s01?uname=abc&upwd=123&hobby=sing&hobby=dance&hobby=rap
        // 获取指定名称的参数值(重点!!!)
        String uname = req.getParameter("uname");
        String upwd = req.getParameter("upwd");
        System.out.println("uname:" + uname + "upwd:" + upwd);//uname:abcupwd:123
        //获取指定名称参数的所有参数值(通常用于复选框)

        String[] hobbies = req.getParameterValues("hobby");
        //判断数组是否为空
        if (hobbies != null && hobbies.length > 0){
            for (String hobby : hobbies) {
                System.out.println("爱好:" + hobby);
            }
        }
        /*
        爱好:sing
        爱好:dance
        爱好:rap
         */
    }
}

请求乱码问题

  • 基本介绍

    由于现在的request属于接收客户端的参数,所以必然有其默认的语言编码,主要是由于在解析过程中默认使用的编码方式为ISO-8859-1(此编码不支持中文),所以解析时一定会出现乱码。要想解决这种乱码问题,需要设置request中的编码方式,告诉服务器以何种方式来解析数据。或者在接收到乱码数据以后,再通过相应的编码格式还原。

  • 实现方式

    • 方式一:
      request.setCharacterEncoding("UTF-8");
      这种方式只针对POST有效(必须在接收所有的数据之前设定)
    • 方式二:
      new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8");
      借助了String对象的方法,该种方式对任何请求有效,是通用的。

Tomcat8起,以后的GET方式请求是不会出现乱码的。

请求转发

  • 基本介绍

    请求转发,是一种服务器行为,当客户端请求达到后,服务器进行转发,此时会将请求对象进行保存,地址栏中的URL地址不会改变,得到响应后,服务器端再将响应发送个客服端,从始至终只有一个请求发出

  • 特点

    1. 服务器行为
    2. 地址栏不发生改变
    3. 从始至终只有一个请求发出
    4. request数据可以共享
  • 实现方式

    req.getRequestDispatcher(url).forward(request, response);

  • 代码演示:

    package com.xxxx.servlet;
    
    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;
    
    /**
     * @author: 86199
     * @date: 2023/6/16 9:00
     * Description: 请求转发,可以让请求从服务端跳转到客户端(或则跳转到指定Servlet)
     *
     * 特点:
     *  1. 服务端行为
     *  2. 地址栏不发生改变
     *  3. 从始至终都只有一个请求,s03的请求
     *  4. req数据可以共享
     */
    @WebServlet("/s03")
    public class Servlet03 extends HttpServlet {
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //接收客户端请求的参数
            String uname = req.getParameter("uname");
            System.out.println("Servlet03 uname = " + uname);
    
            //请求转发跳转到Servlet04(另一个Servlet对象)
    //        req.getRequestDispatcher("s04").forward(req, resp);
    
            //请求转发跳转到jsp页面
            req.getRequestDispatcher("login.jsp").forward(req, resp);
    
            //请求转发跳转到html页面
            req.getRequestDispatcher("login.html").forward(req, resp);
        }
    }
    
    

request作用域

  • 基本介绍

    通过该对象可以在请求中传递数据,作用范围:在一次请求中有效,即服务器跳转有效。

  • 实现方式

    //设置域对象内容
    request.setAttribute(String name, Object o);
    //获取域对象内容
    request.getAttribute(String name);
    //删除域对象内容
    request.removeAttribute(String name);
    

    request 域对象中的数据在一次请求中有效,经过请求转发,request域中的数据依然存在,即在请求转发的过程中可以通过 request 来传输/共享数据。

  • 代码演示

    package com.xxxx.servlet;
    
    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.ArrayList;
    
    @WebServlet("/s05")
    public class Servlet05 extends HttpServlet {
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("Servlet05...");
    
            //设置域对象内容
            req.setAttribute("name", "admin");
            req.setAttribute("age", 18);
            ArrayList<String> list = new ArrayList<>();
            list.add("aaa");
            list.add("bbb");
            req.setAttribute("list", list);
    
            //请求转发
    //        req.getRequestDispatcher("s06").forward(req, resp);//共用一个req对象,这里只能有一个请求转发
    
            //请求转发跳转到jsp,并通过域对象传递数据
            req.getRequestDispatcher("index.jsp").forward(req, resp);
    
        }
    }
    
    

    index.jsp文件代码:文章来源地址https://www.toymoban.com/news/detail-506001.html

    <%@ page import="java.util.List" %><%--
      Created by IntelliJ IDEA.
      User: 86199
      Date: 2023/6/12
      Time: 11:28
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
        <h2>index页面</h2>
        <%-- 如果要在jsp中写Java代码,需要写在脚本段中--%>
        <%
          //获取域对象内容
          String name = (String) request.getAttribute("name");
          System.out.println("name = " + name);
          Integer age = (Integer) request.getAttribute("age");
          System.out.println("age = " + age);
          List<String> list = (List<String>) request.getAttribute("list");
          System.out.println("list = " + list);
        %>
      </body>
    </html>
    

到了这里,关于Servlet p3 HttpServletRequest对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaWeb:Servlet、ServletContext、HttpServletResponse、HttpServletRequest 的详细内容

    Servlet 是 Sun 公司开发动态 Web 的一门技术,在这些 API 中提供了一个接口就是:Servlet,开发一个 Servlet 程序需要 两个步骤 : 编写一个类,实现 Servlet 接口; 把开发好的 java 类部署到 Web 服务器中。 把实现了 Servlet 接口的 Java 程序叫做 Servlet 。 创建一个普通的 Maven 项目,注

    2024年02月03日
    浏览(46)
  • Type javax.servlet.http.HttpServletRequest not present

    运行环境  Swagger 3.0.0、springboot 3.0.0  产生原因: Swagger 3.0.0不支持spring3.0.0     两个解决方案:     1.降低springboot版本为2.x     2.放弃Swagger,使用  springdoc-openapi-starter-webmvc-ui 第二种解决方案: @Tag 用来设置 Controller 的名称和描述,类似于给 Postman 的 Collections 命名; @A

    2024年02月06日
    浏览(104)
  • idea导入import javax.servlet.http.HttpServletRequest;爆红

    1、问题描述: 2、解决办法: 第一步: 选中左侧项目 → 右键 → 选择 Open Module Settings  第二步: 在 Project Structure 窗口, 选择左侧的 Modules ,在选中中间的项目,点击右侧的+号,选择Library 第三步: 在Choose Libraries 窗口,选择New Library... ,在下拉框选择Java 第四步: 在Selec

    2024年02月11日
    浏览(37)
  • springmvc出现requestjava.lang.ClassNotFoundException: jakarta.servlet.http.HttpServletRequest异常

    在springmvc框架下引入request,如图 出现如下异常:    解决方法: 将HttpServletRequest改为javax包下的类  

    2024年02月13日
    浏览(82)
  • 关于IDEA在写文件上传时,找不到javax.servlet.http.HttpServletRequest如何解决

            当我们在使用IDEA是,发现需要使用javax.servlet包下类时,IDEA无法识别类或是方法,会在控制台提示,无法找到javax.servlet.http.HttpServletRequest。此时我们需要按照一下的步骤进行导包即可。 1、选中项目所在的Module或工程名,右键单击Open Module Settings或者单击File——Pro

    2024年02月15日
    浏览(46)
  • SpringBoot项目报错:java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapp

    技术版本: SpringBoot2.04 错误场景描述: 项目可以正常启动,但后台接口一被请求就报下面这个错误: 原因分析: 1、Tomcat版本问题。 2、jar包冲突,具体是servlet-api这个jar包。 解决方案: 1、SringBoot项目使用的是内置Tomcat,如果本地的pom文件中引入了servlet-api依赖,删掉这个

    2024年02月12日
    浏览(46)
  • SpringBoot 项目整合启动报错:javax.servlet.http.HttpServletRequest.getHttpServletMapping()Ljavax/ser

    报错信息如下:java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapping()Ljavax/ser 历经此坑的心路历程,就是一个简单的服务项目整合到web项目中,期间并没有在意jar包依赖的问题,此问题只是简单登录跳转的问题,没有太在意,除了访问登录页的时候报错外,其

    2024年02月11日
    浏览(48)
  • No primary or default constructor found for interface javax.servlet.http.HttpServletRequest

    前言: 前不久在写开放平台项目中,想直接在微服务网关Gateway中写对外接口,并想通过传统的HttpServlet方式去拿请求里面的数据,在Controller的方法参数上加上HttpServerRequest却发现报错。 1、问题复现 在我们使用spring-boot-starter-web依赖的时候,我们可以在controller的接口类的方法

    2024年02月16日
    浏览(44)
  • spring boot3.x集成swagger出现Type javax.servlet.http.HttpServletRequest not present

    spring boot3.x版本依赖于jakarta依赖包,但是swagger依赖底层应用的javax依赖包,所以只要一启动就会报错。 移除 swagger2依赖 添加 新依赖 @Api(tags = “”) → @Tag(name = “”) @ApiModel(value=“”, description=“”) → @Schema(name=“”, description=“”) @ApiModelProperty(value = “”, required = true) →

    2024年02月09日
    浏览(42)
  • SpringBoot3.1.2 引入Swagger报错Type javax.servlet.http.HttpServletRequest not present解决办法

    1.问题描述: 引入swagger2.X版本后,导致SpringBoot3.1.2启动报错 2.原因分析: SpringBoot3.1.2版本依赖于jakarta依赖包,但是Swagger依赖底层应用的javax依赖包,所以只要一启动就会报错。 3.解决办法: pom.xml文件,移除swagger2 加入 代码修改 SwaggerConfig.java 实体类 controller类 遇到报错:

    2024年02月04日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包