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日

相关文章

  • 浅谈java 字符串,字符数组,list间的转化

    标题:浅谈Java字符串、字符数组、List间的转换 一、Java字符串、字符数组的转换 1.1 字符串转换为字符数组 可以使用 toCharArray() 方法将字符串转换为字符数组: String str = "hello"; char[] charArray = str.toCharArray(); // charArray = {…

    Java 2023年5月26日
    00
  • Sprint Boot @ConfigurationPropertiesBinding使用方法详解

    以下是关于Spring Boot的@ConfigurationPropertiesBinding的作用与使用方法的完整攻略,包含两个示例: Spring Boot的@ConfigurationPropertiesBinding是什么? @ConfigurationPropertiesBinding是Spring Boot中的一个注解,用于将自定义类型的属性绑…

    Java 2023年5月5日
    00
  • java中的Io(input与output)操作总结(四)

    这里是对“java中的Io(input与output)操作总结(四)”的详细讲解: 一、Io概述 Io(input与output)操作是Java中常用的一种操作方式,它涉及到java.io包中的各种类,我们可以通过Io来读取文件、写入文件、创建文件、删除文件等操作。Java中的Io操作分为输入和输出两个方向,分别由InputStream、Reader和Out…

    Java 2023年5月27日
    00
  • java 中mongodb的各种操作查询的实例详解

    下面我将为您详细讲解在Java中使用MongoDB进行各种操作和查询的实例详解。 1. MongoDB介绍 MongoDB是一种基于文档的NoSQL数据库,在许多应用场景中,它都是一种非常有效的数据存储解决方案。MongoDB支持的语言众多,其中Java是其中一个主要支持的语言。在Java程序中,通过MongoDB Java驱动程序可以方便地对MongoDB…

    Java 2023年5月20日
    00
  • java中Pulsar InterruptedException 异常

    Java中Pulsar InterruptedException 异常 当使用Pulsar客户端在Java中进行操作时,可能会遇到InterruptedException异常。在本文中,我们将对该异常进行详细的讲解,包括该异常的原因、如何处理以及代码示例。 什么是InterruptedException异常 InterruptedException是Java…

    Java 2023年5月27日
    00
  • JTS空间坐标Geometry使用

    Geomtery子类图 创建Geometry GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); // 点 Coordinate coord = new Coordinate(1, 1); Point point = geometryFactory.createPo…

    Java 2023年4月23日
    00
  • spring-boot 如何实现单次执行程序

    Spring Boot 如何实现单次执行程序 在本文中,我们将详细讲解如何使用Spring Boot实现单次执行程序。我们将介绍两种不同的方法来实现这个目标,并提供示例来说明如何使用这些方法。 方法一:使用CommandLineRunner接口 Spring Boot提供了CommandLineRunner接口,它可以在Spring Boot应用程序启动时执…

    Java 2023年5月18日
    00
  • struts2中类型转换实例代码

    Struts2中类型转换可以将String类型的参数转换为具体的对象类型,比如将字符串形式的日期转换为Date类型。下面是struts2中类型转换的实例代码: 1. 实现TypeConverter接口 public class DateConverter implements TypeConverter { @Override public Object c…

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