WEB前端 -- getParameter 与 getAttribute的区别

本文探讨了在Web开发中,转发与链接两种组件间交互方式下数据共享的方法。详细对比了getParameter与getAttribute方法的不同之处及其适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HttpServletRequest.getParameter("modelName"); 能取到想要的modelObject吗?经过测试之后,发现是不能的。后来想想,其他道理挺简单的,当两个Web组件之间为转发关系时,转发源会将要共享 request范围内的数据先用setAttribute将数据放入到HttpServletRequest对象中,然后转发目标通过 getAttribute方法来取得要共享的数据。而MVC中用的就是Web组件之间的转发啊!真是笨,怎么当时没有想到呢?

下面整理一下getParameter和getAttribute的区别和各自的使用范围。

(1)HttpServletRequest类有setAttribute()方法,而没有setParameter()方法

(2)当两个Web组件之间为链接关系时,被链接的组件通过getParameter()方法来获得请求参数,例如假定welcome.jsp和authenticate.jsp之间为链接关系,welcome.jsp中有以下代码:
<a  href="authenticate.jsp?username=wolf">authenticate.jsp </a>
或者:
<form  name="form1" method="post"  action="authenticate.jsp"> 请输入用户姓名:<input  type="text" name="username">   <input  type="submit"  name="Submit" value="提交"> </form>
在authenticate.jsp中通过request.getParameter("username")方法来获得请求参数username:
<%  String  username=request.getParameter("username"); %>

(3)当两个Web组件之间为转发关系时,转发目标组件通过getAttribute()方法来和转发源组件共享request范围内的数据。

假定 authenticate.jsp和hello.jsp之间为转发关系。authenticate.jsp希望向hello.jsp传递当前的用户名字, 如何传递这一数据呢?先在authenticate.jsp中调用setAttribute()方法:
<% String username=request.getParameter("username"); request.setAttribute("username",username); %>
<jsp:forward page="hello.jsp" />
在hello.jsp中通过getAttribute()方法获得用户名字:
<% String  username=(String)request.getAttribute("username"); %> Hello: <%=username %>
从更深的层次考虑,request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据。
request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。这两个方法能够设置Object类型的共享数据。
request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据。

request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。

request.getAttribute()获得的是对象类型,request.getParameter()获得的是字符串类型。

getAttribute是返回对象,getParameter返回字符串 总的来说:request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取http提交过来的数据

出处:http://www.cnblogs.com/jirglt/archive/2012/10/25/2738617.html

### Java Web 学生成绩管理系统中的成绩录入统计模块 #### 成绩录入功能实现 为了支持教师录入学生成绩的功能,通常会有一个表单页面用于输入学生的成绩数据。下面是一个简单的Servlet类来处理成绩录入请求: ```java @WebServlet("/inputScore") public class InputScoreServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String studentId = request.getParameter("studentId"); String courseId = request.getParameter("courseId"); double score = Double.parseDouble(request.getParameter("score")); ScoreService scoreService = new ScoreServiceImpl(); try { boolean result = scoreService.inputScore(studentId, courseId, score); if (result) { // 录入成功后的逻辑处理 System.out.println("成绩录入成功!"); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/success.jsp"); dispatcher.forward(request, response); } else { // 处理失败情况下的响应 System.out.println("成绩录入失败!"); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/error.jsp"); dispatcher.forward(request, response); } } catch (Exception e) { throw new ServletException(e.getMessage()); } } } ``` 此部分代码展示了如何通过`doPost()`方法接收来自前端的成绩提交参数并调用业务层的服务接口完成实际的数据保存操作[^1]。 #### 成绩统计功能实现 对于成绩统计数据的需求,可以通过编写SQL查询语句获取特定条件下的平均分、最高分等信息,并将其展示给用户。这里给出一个示例性的JSP片段用来显示某门课的平均分数: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>课程平均分</title> </head> <body> <h2>${param.courseName} 的平均分为:</h2> <p><%=request.getAttribute("averageScore")%></p> </body> </html> ``` 以及对应的Servlet控制程序负责计算平均值并将结果传递到视图层面: ```java @WebServlet("/getAverageScore") public class GetAverageScoreServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String courseId = req.getParameter("courseId"); ScoreService scoreService = new ScoreServiceImpl(); try { double averageScore = scoreService.getAverageScoreByCourse(courseId); req.setAttribute("averageScore", averageScore); req.getRequestDispatcher("/WEB-INF/jsp/course_average_score.jsp").forward(req, resp); } catch (SQLException | ClassNotFoundException ex) { Logger.getLogger(GetAverageScoreServlet.class.getName()).log(Level.SEVERE, null, ex); } } } ``` 上述代码实现了从数据库读取指定课程的学生得分记录,并利用服务对象的方法求得该科目的平均成绩后返回至相应的网页上呈现出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值