[ Andrej013 @ 19.02.2013. 08:16 ] @
Napravio sam jednostavni dinamicki web projekat za registraciju i logovanje na sajt, gde za registraciju sa jsp stranice servletu prosledjujem username, password, adresu, godinu rodjenja i slicno. Servlet se tada kaci na localhoast server i preko ObjectOutputStreama salje request objekat sa parametrima(npr parametri su String komanda i objekat Osoba sa gore navedenim poljima). server thread, na osnovu komande, proverava da li treba da registruje korisnika ili da se loguje. proverava da li username i password vec postoji u bazi podataka i vraca servletu informaciju da li je registracija/logovanje uspesno i ako nije, zasto nije. sve to fino funkcionise, ali bih sada hteo da dodam mogucnost da logovani korisnik uploaduje sliku kada se loguje. na netu sam nasao neki tutorijal sa kodom gde je sve objasnjeno kako da se uploaduje slika preko servleta i to funkcionise, ali me zanima, kako to da odradim preko servera sa multithreadingom? sta da posaljem na objectOutputStream? cini mi se da je upload fajlova dosta zeznutiji od obicnog logovanja, pisanja i citanja iz baze podataka. da li gresim? gde da pocnem? Servlet za registraciju: Code: String hostname = "localhost"; InetAddress addr = InetAddress.getByName(hostname); int TCP_PORT = 9000; Socket socket = new Socket(addr, TCP_PORT);// ip & port of server. in this moment the request is detected on server and socket is made for thread //make in and out streams for communication with the server ObjectOutputStream out=new ObjectOutputStream(socket.getOutputStream()); ObjectInputStream in=new ObjectInputStream(socket.getInputStream()); REQ req=new REQ(); req.getParameters().put("command","register"); req.getParameters().put("person",person); //write to Server out.writeObject(req); out.flush(); Answer answer=new Answer(); try{ answer=(Answer)in.readObject(); }catch(ClassNotFoundException e){ e.printStackTrace(); } System.out.println("message from server: "+answer.getMessage()); Server Thread, Code: private Socket sock; // stream za slanje poruka private ObjectOutputStream out; // stream za prijem poruka private ObjectInputStream in; private SessionFactory sessionFactory; private Session session; public ServerThread(Socket sock){ this.sock=sock; try { in = new ObjectInputStream(sock.getInputStream()); out = new ObjectOutputStream(sock.getOutputStream()); sessionFactory=new Configuration().configure().buildSessionFactory(); session = sessionFactory.openSession(); } catch (Exception ex) { ex.printStackTrace(); } } public void run() { System.out.println("run"); try { //request reading REQ req=(REQ)in.readObject(); System.out.println("OBJECT read"); String command=(String)req.getParameters().get("command"); if(command.equals("register")){ Person P = null; P =(Person)req.getParameters().get("person"); //write the data in the DB session.beginTransaction(); session.save(P); session.getTransaction().commit(); session.close(); Answer answer=new Answer(); answer.setMessage("everything went fine with "+P.getUsername()); answer.setFlag(1); answer.setPerson(P); //send the answer to the client out.writeObject(answer); out.flush(); out.reset(); } if(command.equals("login")){ System.out.println("in login part of the thread"); Person person=new Person(); String username=(String)req.getParameters().get("username"); String password=(String)req.getParameters().get("password"); session.beginTransaction(); person=(Person)session.get(Person.class, username); session.close(); if(person.getPassword().equals(password)){ person.setLoggedIn(true); Answer answer=new Answer(); answer.setMessage("everything went fine with "+person.getUsername()); answer.setFlag(1); answer.setPerson(person); System.out.println(answer.getMessage()); //send the answer to the client out.writeObject(answer); out.flush(); out.reset(); }else{ person.setLoggedIn(false); Answer answer=new Answer(); answer.setMessage("wrong password from user: "+person.getUsername()); answer.setFlag(0); answer.setPerson(person); System.out.println(answer.getMessage()); //send the answer to the client out.writeObject(answer); out.flush(); out.reset(); } } //end of client-server communication in.close(); out.close(); sock.close(); } p.s. ne znam da li da okacim ceo kod-ima ga bas dosta pa nisam hteo da zatrpavam pp.s. nisam siguran da sam na dobrom mestu kreirao sesiju za hibernate(u konstruktoru ServerThread-a)? kako je u pitanju 'skup' objekat, hteo sam da ga kreiram samo jednom pa posle da se koristi taj isti, ali niti sam siguran da sam to uspeo niti sam siguran da je to dobro resenje. govorim o ovom delu koda: Code: sessionFactory=new Configuration().configure().buildSessionFactory(); session = sessionFactory.openSession(); |