我正在使用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 Singh
答案 0 :(得分:1)
使用会话持久性的方法存在问题。 如果浏览器配置为在关闭时删除cookie或以“私人浏览”模式打开,则会话ID将不再存在以发送到服务器!
更好的方法是跟踪用户是否直接在数据库中启动了任何测试。类似地,只要用户尝试问题,就可以更新数据库。
在用户登录时,可以对任何待处理的测试进行检查,并允许用户在需要时继续。
更新:关于异常本身,堆栈跟踪确实会有所帮助JB Nizet