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日

相关文章

  • 递归法求最大公约数和最小公倍数的实现代码

    递归法求最大公约数和最小公倍数的实现代码,可以分为以下两个步骤: 1.实现求最大公约数的递归函数 我们可以使用辗转相除法(又称欧几里得算法)来求解最大公约数,其核心代码如下: def gcd(a, b): if b == 0: return a else: return gcd(b, a % b) 该函数的原理是,若a和b的最大公约数为c,则有以下结论:a …

    Java 2023年5月26日
    00
  • Java算法之最长公共子序列问题(LCS)实例分析

    Java算法之最长公共子序列问题(LCS)实例分析 算法简介 最长公共子序列(Longest Common Subsequence,LCS)问题是指:给定两个序列X和Y,找出X和Y的最长公共子序列。 例如,若X=a,b,c,b,d,a,b,Y=b,d,c,a,b,a,则X和Y的最长公共子序列为b,c,a,b,长度为4。 算法思想 LCS问题可以使用动态规划的…

    Java 2023年5月19日
    00
  • 使用spring aop 统一捕获异常和写日志的示例demo

    使用Spring AOP统一捕获异常和写日志可以提高程序的健壮性和可维护性,下面是示例demo的详细攻略: 一、添加依赖 在pom.xml中添加Spring AOP和Spring Boot Starter Logging的依赖: <dependency> <groupId>org.springframework.boot</gr…

    Java 2023年5月27日
    00
  • 详解Java集合类之List篇

    详解Java集合类之List篇攻略 1. List概述 List是Java集合框架中的基本接口之一,代表了一组有序的数据,可以包含重复的元素。List扩展了Collection接口,所以继承了所有Collection接口的方法,同时还有一些操作有序数据的特定方法。常用的List实现包括ArrayList和LinkedList。 2. List常用方法 2.1…

    Java 2023年5月26日
    00
  • JAVA简单链接Oracle数据库 注册和登陆功能的实现代码

    让我来给您讲解一下“JAVA简单链接Oracle数据库 注册和登陆功能的实现代码”的完整攻略。 1. 需求分析 首先,我们需要明确需求,即实现一个具有注册和登录功能的网站,并且网站需要能够链接Oracle数据库,存储用户信息。 2. 环境搭建 接下来,我们需要搭建Java开发环境和Oracle数据库环境。具体的搭建过程这里不再赘述。需要注意的是,搭建完之后,…

    Java 2023年5月20日
    00
  • Spring的编程式事务和声明式事务详解

    Spring的编程式事务和声明式事务详解 在使用Spring框架开发应用程序时,事务管理是一个非常重要的话题。Spring框架提供了两种管理事务的方式:编程式事务和声明式事务。本文将详细讲解这两种事务管理方式。 编程式事务 编程式事务是通过编写代码来控制事务的提交和回滚。在Spring框架中,编程式事务是通过 TransactionTemplate 类实现的…

    Java 2023年5月20日
    00
  • java迭代器移除元素出现并发修改异常的原因及解决

    Java迭代器是用于遍历集合类元素的重要工具,然而有时可能会在使用过程中遇到“并发修改异常”(ConcurrentModificationException),指的是在使用迭代器访问集合过程中,通过集合自身的某些方法(如add、remove、clear等)修改了集合元素而导致的异常。本文将讲解这个异常的原因及解决方法,同时会提供两个示例来解释如何在实际操作中…

    Java 2023年5月27日
    00
  • MybatisPlus使用聚合函数的示例代码

    下面我将详细讲解”MybatisPlus使用聚合函数的示例代码”的完整攻略,包含以下内容: 什么是聚合函数 如何在MybatisPlus中使用聚合函数 示例代码演示 总结 1. 什么是聚合函数 聚合函数是指对一组数据进行聚合计算的函数,常用的聚合函数包括 SUM、AVG、MIN、MAX、COUNT 等。聚合函数可以对一张表或者多张表进行统计计算,常用于数据分…

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