2017-07-19 7 views
0

Ich habe ein Servlet, das Parameter von einer HTML-Dropdown-Seite erhält. Beim Klicken auf die Schaltfläche werden die Daten an das Servlet gesendet. Es funktioniert das erste Mal, wenn die Daten gesendet werden. Wenn ich jedoch auf der Seite bleibe und einen anderen Wert aus dem Dropdown-Menü auswähle und auf die Schaltfläche zum Absenden klicke, werden die neuen Daten nicht in die Sitzungsvariable eingegeben.Sitzungsvariable ändert sich nicht über Servlet submit

Mein Servlet ist unten. Muss ich die DoGet Methode ändern? Wieder funktioniert es das erste Mal, aber die Sitzungsvariable ändert sich danach nicht.

@WebServlet("/ListStudentServlet") 
public class ListStudentServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public ListStudentServlet() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     String sessid = request.getParameter("studentid"); 
     ArrayList<FactStudentDataBean> result = new ArrayList<>(); 
     try (Connection con = JdbcUtil.getConnection()) { 

      String sql= "select F.Sessionid " 
        + "from FACT_STUDENT F " 
        + "where studentid = '"+sessid+"';"; 
      try (Statement st = con.createStatement()) { 

       ResultSet rs = st.executeQuery(sql); 
       while (rs.next()){ 
        result.add(new FactStudentDataBean(rs.getString(1))); 
       } 
       for (FactStudentDataBean factStudentDataBean : result) {  
        sessid = factStudentDataBean.getSessid();  
       }   
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 

     //Trying to set the session variable below, works the first time but anything after doesn't change 
     HttpSession session = request.getSession(true); 
     session.setAttribute("sessid", sessid); 
    } 
} 
+0

'request.getSes verwenden sion (true) 'erstellt eine neue Sitzung, wenn die Sitzung noch nicht existiert. Wird der Sitzungscookie für die nächste Übermittlung festgelegt? –

+0

Wie stelle ich das ein? – thedude865

Antwort

-1

Überprüfen Sie die jsessionid-Werte, die Sie auf der Serverseite erhalten. Wenn beide unterschiedlich sind, versuchen Sie, die Sitzung zu erhalten, indem Sie false anstelle von true übergeben.

request.getSession(false); 

Auch Tomcat-Manager-Anwendung aufrufen und aktive Sitzungen überwachen.

Hoffe, das wird helfen.

+0

Ich versuchte es zu setzen (falsch), aber immer noch nichts. Die neuen Daten werden nicht an HTML zurückgegeben – thedude865

0

Ihr Code ist ein bisschen "schmutzig". Zunächst einmal: warum diese SQL-Abfrage wie folgt schreiben ?:

String sql= "select F.Sessionid " 
       + "from FACT_STUDENT F " 
       + "where studentid = '"+sessid+"';"; 

und nicht wie diese

String sql= "select F.Sessionid from FACT_STUDENT F where studentid = '"+sessid+"';"; 

Second ?:: Versuchen Sie immer prepareStatement zu verwenden, anstatt createStatement (zur Erklärung dessen, was ich sage bitte diese Frage sehen: prepareStatement vs executeStatement)

Und für die Antwort jetzt: Ithink müssen Sie session.getAttribute("sessid", sessid);

+0

Sie sind falsch. So wenden Sie session.getAttribute nicht an. Es braucht nicht zwei Variablen als Parameter. – thedude865