Gå til innhold

Anbefalte innlegg

Har sett meg blind på følgende kode. Er en servlet, og får bare opp innloggingssiden (funksjonen logginn). Kan noen se hva som er feil?

 

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Seanse extends HttpServlet
{

public void service( HttpServletRequest req, HttpServletResponse res)
 throws IOException
 {
 	res.setContentType("text/html");
 	HttpSession s = req.getSession(true);
 	if( s.isNew() || s.getAttribute("navn") == null )
 	{
   logginn( req, res );
 	}
 	else if( req.getParameter("navn") != null )
 	{
   s.setAttribute("navn", req.getParameter("navn"));
   innlogget( req, res );
 	}
 	else
 	{
   innlogget( req, res );
 	}

 }
 	


public void logginn( HttpServletRequest req, HttpServletResponse res )
 throws IOException
{
 PrintWriter out = res.getWriter();
 out.println(
   "<html>"
   +"<body><h1>Innloggingsside</h1>"
   +"<form method=\"post\">Skriv inn navn: <br>"
   +"<input type=\"text\" name=\"navn\" />"
   +"<input type=\"submit\" name=\"sjekkloginn\" "
   +"<value=\"login\" size=\"10\">"
   +"</form></body></html>");    
}




public void innlogget( HttpServletRequest req, HttpServletResponse res )
 throws IOException
{
 PrintWriter out = res.getWriter();
 HttpSession s = req.getSession(true);

 out.println("<HTML><BODY><H1>Allerede innlogget...</H1><BR><BR>"
   +"Hei :"+s.getAttribute("navn")+"<br/>"    
   +"</BODY></HTML>");

 
}
}


Lenke til kommentar
Videoannonse
Annonse

Den første if setningen din vil alltid slå til siden du ikke setter noen attributt i sesjonen.

 

Erstatt: if( s.isNew() || s.getAttribute("navn") == null )

med: if( s.getAttribute("navn") == null && req.getParameter("navn") == null )

 

De to betingelsene du bruker er forsåvidt redundante siden en ny sesjon ikke

har noen attributter.

Endret av MailMan13
Lenke til kommentar

Er du sikker? Når en bruker logger seg på siden, så opprettes det en session, men session variabelen opprettes ikke da, og er følgelig false. Derfor, når bruker logger seg på igjen, så vil session eksistere, og session variabelen ikke være lik null, altså begge vil være false, og den skulle ikke slått igjennom.

Lenke til kommentar

Har fått det til på en annen måte, se kode nedenfor. Det jeg prøver å få til nå, er at to brukere skal kunne "snakke sammen". Først skal en bruker logge seg på, og få frem en siden der det står antall innloggede (som da er 1). Når bruker nr 2 logger seg på, skal han da få frem at det da er 2 innloggede brukere. Det som skjer nå er at mange brukere kan logge seg på, og hver gang man trykker refresh, så økes antInnloggede variabelen. Har prøvd med if( s.isNew() ) ++antInnloggede

uten at det hjalp.

 

Noen som kan gi meg noen hint?

 

 

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Seanse extends HttpServlet
{
public static int antInnloggede = 0;


public void service( HttpServletRequest req, HttpServletResponse res)
 throws ServletException, IOException
 {
 	res.setContentType("text/html");
 	HttpSession s = req.getSession(true);
 	if( s.isNew() || req.getParameter("navn") == null )
 	{    
   logginn( req, res );
 	}
 	else if( req.getParameter("navn") != null )
 	{
   s.setAttribute("navn", req.getParameter("navn"));
   antInnloggede++;
   innlogget( req, res );
 	}
 	else
 	{
   //innlogget( req, res );
 	}

 }
 	


public void logginn( HttpServletRequest req, HttpServletResponse res )
 throws IOException
{
 PrintWriter out = res.getWriter();
 out.println(
   "<html>"
   +"<body><h1>Please log in</h1>"
   +"<form method=\"post\">Your name: <br>"
   +"<input type=\"text\" name=\"navn\" />"
   +"<input type=\"submit\" name=\"checklogin\" "
   +"<value=\"login\" size=\"10\">"
   +"</form></body></html>");    
}




public void innlogget( HttpServletRequest req, HttpServletResponse res )
 throws IOException
{
 PrintWriter out = res.getWriter();
 HttpSession s = req.getSession(true);

 out.println("<HTML><BODY><H1>Allerede innlogget...</H1><BR><BR>"
   +"Hello :"+s.getAttribute("navn")+"<br/>"
   +"Antall innloggede brukere er: "+antInnloggede    
   +"</BODY></HTML>");

 
}
}

Lenke til kommentar

Har prøvd, står helt fast. En annen ting, når jeg åpner en browser vindu og kjører servleten, så vil man på Innlogget-siden se Session-ID. Hvis jeg åpner et nytt browservindu på den samme pc'en, og gjør det samme, så blir session ID'en helt lik, og det er vel feil? Om jeg derimot åpner et nytt browservindu på en annen pc, og kjører servlet, blir session ID ulik...

 

Vil dette hindre meg fra i å teste ut servleten om jeg bare har en pc tilgjengelig?

Endret av tommy18
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...