【问题标题】:session management in online exam website using Struts2使用 Struts2 在在线考试网站中进行会话管理
【发布时间】:2026-02-22 23:20:03
【问题描述】:

我正在使用 Struts2、JSP 和 hibernate 创建在线评估应用程序。

所有应用程序部分都运行良好。

我的应用程序使用会话的概念来维护正在考试的用户的状态。 ,因为万一浏览器关闭,系统崩溃我不希望我的用户应该从第一个问题开始。事实上,我希望我的用户应该从他离开的地方开始。现在我无法思考这个问题。如何测试这个。有什么简单的方法让我可以简单地测试我的概念。

错误的用户关闭了浏览器,所以当他返回时,他/她将从他/她离开的地方开始考试。

他只需要输入网址>输入他的考试ID>继续考试。

为此,我正在使用 JDBC 存储的 tomcat 服务器会话持久性。我可以使用会话 ID 将会话对象存储在数据库表中。

当我重新打开浏览器时,我能够获取会话 ID,但无法获取数据。我的应用程序显示 NullPointerException。

public class UserAction extends ActionSupport{
private String candidateID;
private List loadDropDown;
//getter setter methods
public String user_page1() throws IOException{
//loading examID in drop down list.
loadDropDown=new ArrayList(); 
//getting context object
ServletContext ctx=ServletActionContext.getServletContext(); 
//creating session object
HttpSession session = ServletActionContext.getRequest().getSession(false);
//showing session id
System.out.println("User Page 1 :"+session.getId());
if(session.isNew()){
here if user logging first time then application should be able to create new session object and load fresh data.
}
else
{
application should show them a question where they left
}
...

所以请帮帮我。

提前致谢。

Ravinderpal 辛格

【问题讨论】:

  • 编程的第一条规则:阅读错误信息。异常带有堆栈跟踪,告诉异常发生的位置。

标签: jsp session struts2


【解决方案1】:

使用会话持久性的方法存在问题。 如果浏览器配置为在关闭时删除 cookie 或以“私人浏览”模式打开,则会话 ID 将不再存在以发送到服务器!

更好的方法是跟踪用户是否直接在数据库中启动了任何测试。类似地,每当用户尝试提问时,都可以更新数据库。

在用户登录时,可以检查任何未决测试,并允许用户在需要时继续。

更新:关于异常本身,JB Nizet

提到的堆栈跟踪确实会有所帮助

【讨论】: