2013-05-26 54 views
1

我有这段特定的代码,问题是会话没有处理它。会话 - servlets

我在这里签出这个帖子在Can't get the session in java servlet,但它不是很大帮助....

这里是我的servlet,使用doGet代码。我启用了Cookie。我尝试使用Firefox,IE和Eclipse的内置浏览器,但它不起作用。

这里有什么改变吗?

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws  
ServletException, IOException { 
    response.setContentType("text/html"); 
    PrintWriter pw=response.getWriter(); 
    String name=request.getParameter("userName"); 
    String email=request.getParameter("email"); 
    String ip=request.getRemoteAddr(); 
    HttpSession session=request.getSession(); 
      //blah! blah! blah! 
    session.setAttribute("savedUN",name); 
    pw.println("<html>"); 
    pw.println("<head>"); 
    pw.println("<title>In servlet</title>"); 
    pw.println("</head>"); 
    pw.println("<body>"); 
    pw.println("Your name is"+name); 
    pw.println("Your id is"+email); 
    pw.println("Your Fucking IP is"+ip); 
    pw.println("</body>"); 
    pw.println("</html>"); 
    pw.println("Request param has UN:"+name); 
      //--------------help needed here!----------------- 
    pw.println("Session param has UN:"+(String) session.getAttribute("savedUN")); 
} 
+0

请让作家一次,并使用该临时变量。这几乎是不可读的。 –

+0

@DaveNewton:完成! – uLYsseus

回答

0

当用户名未通过时,您正在覆盖存储在会话中的名称。

首先检查null用户名。

if (name != null) { 
    session.setAttribute("savedUN",name); 
} 
+0

它的工作! :) ... @Ravi ...你可以给我一个关于覆盖部分的简短解释...即时通讯在我们输入必填字段的情况下进行通话......并且你说当它为空时的情况...我明白你在说什么......但是这种检查总是需要的,为什么它确切需要..?这是必要的吗? – uLYsseus

+0

大部分是的,你会做一个'null'检查。为什么?因为在会话中保存某些内容以在不可用时检索它(例如,在缺少请求参数的情况下)。所以,如果你用一些缺失的东西来覆盖你所保存的东西,那么你就会打败为什么你将东西存在首位的目的。因此,只有当它可用时,才检查是否将它保存在会话中。所以当它第一次通过时,它会初始化会话的名称值,当它传递给后续请求时,它的作用就像更新会话中保存的名称一样。 –

+0

@ravi ...谢谢你先生....明白一个完美! – uLYsseus