首先明确 request 对象代表客户端的一次请求,可以用它来存储客户端(浏览器)请求的一些参数。
getParameter() 方法:
- 获取客户端在 request 请求通道里发送给服务器的参数。(客户端 --> 服务端)
- 是一个客户端发送数据的过程
- 返回值为 String 类型。
getAttribute() 方法:
- 获取服务器通过 setAttribute() 放入 request 对象里的attribute值,由键值对(key,value)组成。(服务器 --> 客户端)
- 是一个服务器存储数据的过程
- 返回值为任意类型
注意:
- 没有 setParameter() 函数
- getParameter() 返回值是字符串,意味着不能传递其他的对象,如Map、List,但 Attribute 可以存放任意类型的Java对象
- 因为服务器端没有 setParameter(key, value) 这个函数来添加参数,所以如果需要在服务器端进行跳转,并需要往下个页面发送新的参数时,无法通过 getParameter() 实现。但是 Attribute 可以,可以通过 setAttribute() ,将值放入到 request 对象,然后在其他页面使用 getAttribute() 获取对应的值,这样就达到一次请求可以在多个页面共享一些信息
对getParameter过程,如下图:
对getAttribute过程,如下图:
实例:
//servletCircle.java
package test1;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class servletCircle extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String radius = request.getParameter("radius");
double r = Double.valueOf(radius);
double s = 3.14 * r * r;
request.setAttribute("r", r);
request.setAttribute("s", s);
request.getRequestDispatcher("circleArea.jsp").forward(request, response);
}
public void doPOST(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
圆的面积
圆的半径为:<%=request.getAttribute("r")%>
圆的面积为:
<%=request.getAttribute("s")%>
圆的信息
流程分析:
- circle.html中输入半径,提交radius参数(是Parameter )
- 在servletCircle.java中使用 getParameter() 获取radius参数
- servletCircle.java中使用 setAttribute() 设置参数r和s(是 Attribute )
- circle.jsp中使用 getAttribute() 获取参数r和s



