上下文对象ServletContext属性的添加修改
2-4小节在老师的RegistServlet当中,处理数据部分老师从ServletContext中获取到userList,然后使用userService.regist(userList, user);也就是把user存入到userList当中。前面虽然有类似相同的问题,但是我想补充问一下。这里将user存入到userList之后,没有使用getServletContext().setAttribute("userList",userList),再次将userList存入到servletcontext上下文对象中,也能生效。请问这是servletcontext对象独有的特性吗,对于session对象是否就不能这么干呢?还有其底层深入一点的原理能帮忙介绍一下吗?
//处理数据 UserService userService = new UserServiceImpl(); //从servletContext域中获取用户的集合即可 List<User> userList = (List<User>) getServletContext().getAttribute("userList"); userService.regist(userList, user); System.out.println(userList); //显示处理结果 response.sendRedirect(request.getContextPath()+"/login.jsp");
正在回答
同学你好,1、List<User> userList = (List<User>) getServletContext().getAttribute("userList");
其中userList的内容是从getServletContext这个作用域中取出的,当前RegistServlet能从getServletContext作用域中取出,那另一个servlet也能从getServletContext作用域中取出,比如LoginServlet也能从这个作用域中取出userList的值。
2、同学举的例子是可以这样理解的,getServletContext作用域是一个空间,当使用setAttribute()就是向这个空间存入某个内容,当使用getAttribute()就是取出这个空间中某个内容。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
1、这不是servletcontext独有的特性哦。session对象也可以这样的。
这里是因为。我们域中存getServletContext().setAttribute("userList",userList) 的时候,这里的userList是一个集合的引用,当这个引用中的内容改变时,ServletContext中存放的userList也就改变了。
举个例子,以下集合中的第一个位置,存的是user的引用地址,当该对象发送变化时,集合中的数据也发生了变化:
package com.imooc.ringside; public class User { String name; String age; public User() { super(); // TODO Auto-generated constructor stub } public User(String name, String age) { super(); this.name = name; this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
import java.util.ArrayList; import java.util.List; import com.imooc.ringside.User; public class test1 { public static void main(String[] args) { User user = new User(); user.setName("张三"); user.setAge("18"); List<User> a = new ArrayList<User>(); a.add(user); System.out.println(a); User user2 = a.get(0); user2.setName("李四"); user2.setAge("19"); System.out.println(a); } }
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 676 份
- 解答问题 9666 个
本阶段将从前端网页搭建入手,到Java Web基础,前后端结合助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星