jsp request.getParameter() 和request.getAttribute()方法区别详解

JSP中的request对象是用于客户端到服务器的HTTP请求中传递参数、数据和请求头等信息的。request对象提供了多个方法来获取参数和属性值,其中包括getParameter()和getAttribute()方法。虽然这两个方法都能获取到客户端传输的参数或属性值,但是它们在具体的使用方式上是有所不同的。下面就来详细讲解一下它们的区别。

1. getParameter()方法

getParameter()方法用于获取客户端通过HTTP请求传递的参数值。这些参数值通常是通过表单提交,在HTTP请求体中传递的。getParameter()方法的使用比较简单,只需要指定参数名称即可获取到参数值。例如:

String name = request.getParameter("name");//获取名为name的参数值

需要注意的是,getParameter()方法只能获取到单个参数的值,如果需要获取多个参数的值,可以使用getParameterValues()方法。例如:

String[] hobbies = request.getParameterValues("hobby");//获取名为hobby的多个参数值

2. getAttribute()方法

getAttribute()方法用于获取通过request.setAttribute()方法设置的属性值。这些属性值通常是在服务端中生成的,然后通过request对象传递到客户端的。getAttribute()方法的使用也比较简单,只需要指定属性名称即可获取属性值。例如:

String name = (String) request.getAttribute("name");//获取名为name的属性值

需要注意的是,getAttribute()方法只能获取到通过request.setAttribute()方法设置的属性值,如果需要获取其他对象的属性值,需要使用其他方法。

3. 区别详解

从上面的例子可以看出,getParameter()方法和getAttribute()方法都是获取对象的某个属性或参数值。但是它们之间的区别还是比较大的。

  1. 应用场景不同

getParameter()方法用于获取客户端传输的参数值,而getAttribute()方法用于获取在服务端中生成的属性值。由于这两者的应用场景不同,所以它们的使用方式也略有不同。

  1. 类型转换不同

getParameter()方法返回的是一个字符串类型的参数值,而getAttribute()方法返回的是一个Object类型的对象。因此,需要根据获取到的数据类型进行相应的类型转换。例如:

String ageStr = request.getParameter("age");//获取名为age的参数值
int age = Integer.parseInt(ageStr);//将字符串类型的参数值转换为整型数据
Object obj = request.getAttribute("userInfo");//获取名为userInfo的属性值
UserInfo userInfo = (UserInfo) obj;//将Object类型的属性值转换为UserInfo对象
  1. 获取数据的方式不同

getParameter()方法只能获取客户端传输的参数值,而getAttribute()方法可以获取任意类型的对象属性。具体来说,getParameter()方法只能获取URL和表单参数(即HTTP请求体中传输的参数),而getAttribute()方法可以获取在Java代码中设置的任何属性值,例如request.setAttribute()、session.setAttribute()和application.setAttribute()等。

4. 示例说明

为了更加清晰地理解这两个方法的用法和区别,下面给出两条示例说明。

示例一

假设我们有一个HTML表单页面,其中包含两个文本框和一个下拉框,分别用于输入姓名、年龄和城市。在客户端点击提交按钮后,表单数据会被提交到服务器端,服务器接收到数据后要进行处理并返回结果。

<html>
<head>
    <title>HTML表单页面</title>
</head>
<body>
    <form action="form.do" method="post">
        姓名:<input type="text" name="name"><br>
        年龄:<input type="text" name="age"><br>
        城市:
        <select name="city">
            <option value="beijing">北京</option>
            <option value="shanghai">上海</option>
            <option value="guangzhou">广州</option>
        </select><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

在服务器端的servlet中,我们要获取客户端提交的数据,并进行处理。代码如下:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String name = request.getParameter("name");
    int age = Integer.parseInt(request.getParameter("age"));
    String city = request.getParameter("city");

    String info = "姓名:" + name + "\n年龄:" + age + "\n城市:" + city;

    request.setAttribute("info", info);//将处理结果放入request对象中

    RequestDispatcher rd = request.getRequestDispatcher("/show.jsp");//将request对象转发到show.jsp页面
    rd.forward(request, response);//执行转发
}

在上述代码中,我们使用getParameter()方法获取了客户端传递的参数值,并使用setAttribute()方法将处理结果放入了request对象中。然后使用RequestDispatcher对象将request对象转发到show.jsp页面中。

在show.jsp页面中,我们要获取处理结果并显示在页面上。代码如下:

<html>
<head>
    <title>处理结果显示页面</title>
</head>
<body>
    <%
        String info = (String) request.getAttribute("info");//获取名为info的属性值
        out.print(info);//将属性值输出到页面上
    %>
</body>
</html>

在上述代码中,我们使用getAttribute()方法获取了名为info的属性值,并将其输出到HTML页面上。

示例二

假设我们有一个JavaBean对象UserInfo,其中包含用户姓名、年龄和性别等属性。在客户端访问服务器时,服务器要生成UserInfo对象并将其传递回客户端。

在服务器端的servlet中,我们需要生成一个UserInfo对象,并将其放入request对象中,使其可以在其他页面中使用。代码如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    UserInfo userInfo = new UserInfo();//创建UserInfo对象
    userInfo.setName("张三");
    userInfo.setAge(20);
    userInfo.setSex("男");

    request.setAttribute("userInfo", userInfo);//将UserInfo对象放入request对象中

    RequestDispatcher rd = request.getRequestDispatcher("/info.jsp");//将request对象转发到info.jsp页面
    rd.forward(request, response);//执行转发
}

在上述代码中,我们使用HttpServletRequest的setAttribute()方法将生成的UserInfo对象放入了request对象中,并进行了转发操作,将request对象转发到info.jsp页面。

在info.jsp页面中,我们要获取UserInfo对象的三个属性(姓名、年龄、性别)并显示在页面上。代码如下:

<html>
<head>
    <title>UserInfo显示页面</title>
</head>
<body>
    <%
        UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");//获取名为userInfo的属性值,并进行类型转换
        out.print("姓名:" + userInfo.getName() + "<br>");//获取用户姓名
        out.print("年龄:" + userInfo.getAge() + "<br>");//获取用户年龄
        out.print("性别:" + userInfo.getSex() + "<br>");//获取用户性别
    %>
</body>
</html>

在上述代码中,我们使用getAttribute()方法获取名为userInfo的属性值,并将其转换为UserInfo对象。然后,我们分别调用UserInfo对象的三个get方法,获取用户姓名、年龄和性别,并将其显示在HTML页面上。

从这两个示例中可以看出,getParameter()方法和getAttribute()方法的主要区别在于使用场景和数据类型上。getParameter()方法主要用于获取客户端提交的参数值,而getAttribute()方法主要用于获取服务端生成的属性值。同时,getParameter()方法返回的是字符串类型的数据,而getAttribute()方法返回的是Object类型的对象属性值。在实际应用中,我们需要根据具体的需求来选择使用getParameter()方法或getAttribute()方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp request.getParameter() 和request.getAttribute()方法区别详解 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Spring Security表单配置过程分步讲解

    下面是关于Spring Security表单配置过程分步讲解的攻略,包含以下几个步骤: 引入Spring Security依赖 要使用Spring Security,需要在项目中引入相应的依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframewor…

    Java 2023年5月20日
    00
  • 详解Java停止线程的四种方法

    详解Java停止线程的四种方法 前言 在Java程序设计中,我们常常需要在一定条件下停止线程的执行,本文将介绍Java中常用的四种停止线程的方法。 方式一:使用标志位 在很多情况下,我们使用一个标志位来控制线程是否应该停止运行。当标志位为真时,线程运行继续;当标志位为假时,线程运行结束。具体代码如下: public class StopThread impl…

    Java 2023年5月18日
    00
  • Jsp中如何让图片在div中居中

    让图片在 DIV 中居中可以使用 CSS 实现。下面是操作步骤和两个示例说明: 步骤 在 JSP 文件中,使用 <div> 标签定义包含图片的容器。 给此 div 标签设置宽度、高度、背景等样式,使其成为一个完整的盒子。 在 div 中嵌套 img 标签,定义图片的地址和大小。 在 CSS 样式文件中,使用 text-align: center;…

    Java 2023年6月15日
    00
  • ExtJS下 Ext.Direct加载和提交过程排错小结

    关于“ExtJS下 Ext.Direct加载和提交过程排错小结”的攻略,我将按照以下内容进行详细讲解: Ext.Direct简介 Ext.Direct的加载过程 Ext.Direct的提交过程 Ext.Direct的常见问题及解决方案 示例1:通过Ext.Direct提交表单数据 示例2:使用Ext.Direct加载列表数据 接下来,让我们逐一进行讲解。 1…

    Java 2023年5月19日
    00
  • Spring Data JPA注解Entity使用示例详解

    Spring Data JPA注解Entity使用示例详解 本文将详细介绍Spring Data JPA注解Entity的使用方法,包括如何定义实体类、如何使用注解配置实体类以及实现一些基本的CRUD操作。下文将通过两个示例演示Spring Data JPA注解Entity的使用方法。 示例一:定义实体类 定义实体类是Spring Data JPA的第一步,…

    Java 2023年6月2日
    00
  • java删除数组中的某一个元素的方法

    下面提供详细的“Java删除数组中的某一个元素的方法”的攻略。 1. 使用System.arraycopy方法删除数组中的元素 System.arraycopy方法能够在保持原数组中其他元素未变的前提下,将需要删除的元素移除,从而实现删除数组中某一元素的目的。 下面是该方式的代码示例: public static void main(String[] arg…

    Java 2023年5月26日
    00
  • springboot 整合canal实现示例解析

    下面我将详细讲解“springboot 整合canal实现示例解析”的完整攻略。 1. 环境准备 首先需要准备相关的环境,包括MySQL、canal和Java开发环境。其中,canal是阿里的开源项目,用于实现MySQL的增量日志同步。 2. MySQL配置 接下来需要配置MySQL,将数据表名、列名、记录内容都存储到binary log中。这可以通过在My…

    Java 2023年6月2日
    00
  • 详解Springboot2.3集成Spring security 框架(原生集成)

    我来为你详细讲解“详解Springboot2.3集成Spring security框架(原生集成)”的完整攻略。 1. 简介 Spring Security是Spring Framework的一个安全框架,为Spring应用程序提供综合的认证(Authentication)和授权(Authorization)解决方案。这个框架提供了一种方式来将应用程序的用户…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部