上下文对象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 星