gpt4 book ai didi

java - 谷歌应用程序引擎/Java : ConcurrentModificationException thrown when using session. setAttribute()

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:52 26 4
gpt4 key购买 nike

在本地一切正常,但部署后,当我从 servlet 使用 session.setAttribute() 时,我会抛出 ConcurrentModificationException 。在使用 HTML 表单添加实体后,我使用它从数据存储区返回一个值。

怎么会这样?我能做些什么呢?

这是损坏的 servlet:

public class AdminServlet extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
Boolean logged = false;
HttpSession session = req.getSession(true);
Enumeration<String> names = session.getAttributeNames();

while(names.hasMoreElements()) {
String name = (String) names.nextElement();

if(name.equals("logged")) {
logged = (Boolean) session.getAttribute("logged");
}
}

if(logged) {
String p1 = req.getParameter("name");
String p2 = req.getParameter("value");

if(p1 != "" && p2 != "") {
Entity e= new Entity("MyEntity");
e.setProperty("name", p1);
e.setProperty("value", p2);

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Transaction txn = datastore.beginTransaction();

Key k = datastore.put(e);

txn.commit();

if(txn.isActive())
txn.rollback();

session.setAttribute("returnedKey", KeyFactory.keyToString(k)); // CRASHES HERE
}
}

resp.sendRedirect("adminpage.jsp");
}
}

谢谢!

最佳答案

您还在 session 中打开了一个枚举。

Enumeration names = session.getAttributeNames();

更改 session 中的属性会影响名称,这就是您看到错误的原因。

尝试编写代码以使名称不被使用(为空或超出范围):

将其放入方法中很容易

public boolean logLogged(HttpSession session){

Enumeration<String> names = session.getAttributeNames();

boolean loggedTmp=false;

while(names.hasMoreElements()){

String name = (String) names.nextElement();

if(name.equals("logged")){
loggedTmp = (Boolean) session.getAttribute("logged");
}
}

return loggedTmp;

}

关于java - 谷歌应用程序引擎/Java : ConcurrentModificationException thrown when using session. setAttribute(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11603793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com