5-2每次调用appendCategory()方法,整个web应用就会被重载,存在servletContext中变量值都被清空。是哪一步触发了web应用重载?
# 具体遇到的问题
每次调用appendCategory()方法,整个web应用就会被重载,存在servletContext中变量值都被清空。是哪一步触发了web应用重载?
# 报错信息的截图# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
/**
* 添加分类的方法
* 将添加的分类更新到xml文件中
*/
public static void appendCategory(Category category) {
SAXReader reader = new SAXReader();
Writer writer = null;
try {
Document document = reader.read(categoryDataFile);//对象的引用此前categoryDataFile中的转义符已在reload中处理
//创建新的category节点
Element root = document.getRootElement();
Element ca = root.addElement("category");
ca.addElement("category-id").setText(category.getCategoryId());
ca.addElement("category-name").setText(category.getCategoryName());
writer = new OutputStreamWriter(new FileOutputStream(categoryDataFile),"utf-8");
document.write(writer);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(writer!=null) {
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
reloadCategory();
}
}
正在回答
同学你好,在监听器中初始化用户和图书信息时,信息可以存储在ServletContext域中,项目初始化时获取xml中的信息,并存放域中;在登录的servlet中,登陆成功将用户信息存入session中;并且监听器初始化时只需将用户信息和图书信息存入域中即可;并且同学这样存储flag的值只是0;这里同学无需将flag进行存储,判断用户是否登录应该过滤器中进行判断
参考代码如下
InitListener
loginServlet
AuthFilter
祝学习愉快
同学你好,是的,ServletContext对象全局唯一。ServletContext的作用域就是整个服务的开启到关闭,不过使用上下文设置属性,需要使用请求转发获取到内容,所以当在其他文件中没有在域中设置值时,就无法在其他页面中获取到相关数据。并且,当对xml文件进行修改时,web应用重载后就会重新加载ServletContext
而Session是保存在服务器上。当客户端浏览器访问服务器的时候,服务器为每个用户浏览器创建一个session对象;可以保存用户的信息,服务器程序可以把用户数据写到浏览器的session中,比如登录的保存用户信息,从一个网页跳转到另一个网页,用户信息就可以用session保存;session的作用域就是从你登陆这个账户到退出这个账户;所以一般建议将登录信息存在session中
祝学习愉快
- 参与学习 人
- 提交作业 9401 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星