Przekazywanie danych z aplikacji do Servlet-u

1

Witam,

Robię grę warcaby którą mam już w sumie skończona, ale został mi jeszcze jeden problem. Man zrobić serwlet który będzie zapisywał wynik do BD i wyświetlał wyniki gier po odwołaniu się do niego. Servlet mam już zrobiony, ale nie wiem jak najprościej przekazać wynik gry z aplikacji do serveletu aby ten zapisał go w BD. Pozdrawiam i proszę o pomoc.

0

Najprosciej jako parametry URL w metodzie get. Albo wyslac w post. Inaczej sie chyba nie da ;d, chyba ze napiszesz wlasny protokol (servlety to umozliwiaja).
Przy czym musisz tak to zrobic zeby uniemozliwic / znacznie utrudnic oszukaiwanie.

1

Najprościej w GET, ale lepiej w POST. Nie powinno się robić zapisów w bazie wywołaniami GET. Dotyczy to głównie stron, ale lepiej trzymać się dobrych wzorców. Do wysyłania POST polecam użyć biblioteki http://projects.apache.org/projects/commons_httpclient.html, zamiast rzeźbić posty samemu.

0

Wiem, ale napisalem jak najprosciej. Najlepieszy to jednak moim zdaniem tutaj jest put ;d

0
 URL wys = new URL("http://localhost:8080/ProjectPP/Controller?operation=addGame&&gracz=gracz1&&przeciwnik=Najman&&wynik=Wygrana");
URLConnection yc =wys.openConnection();

wyskakuje mi wyjątek java.io.FileNotFoundException: http://localhost:8080/ProjectPP/Controller?operation=addGame&&gracz=gracz1&&przeciwnik=Najman&&wynik=Wygrana

Jak wpisuje ten adres w przeglądarkę to działa normalnie i servlet zapisuje do BD, a w aplikacja wyskakuje mi właśnie taki wyjątek. Jak w URL wys mam normalny adres np: http://www.wp.pl, to normalnie działa i mogę pobrać odpowiedz. Pozdrawiam i dziękuje za dotychczasowe sugestie

0
 URL wys = new URL("http://localhost:8080/ProjectPP/Controller?operation=addGame&&gracz=gracz1&&przeciwnik=Najman&&wynik=Wygrana");
URLConnection yc =wys.openConnection();

wyskakuje mi wyjątek java.io.FileNotFoundException: http://localhost:8080/ProjectPP/Controller?operation=addGame&&gracz=gracz1&&przeciwnik=Najman&&wynik=Wygrana

Jak wpisuje ten adres w przeglądarkę to działa normalnie i servlet zapisuje do BD, a w aplikacja wyskakuje mi właśnie taki wyjątek. Jak w URL wys mam normalny adres np: http://www.wp.pl, to normalnie działa i mogę pobrać odpowiedz. Pozdrawiam i dziękuje za dotychczasowe sugestie

0

Nikt nie wie czemu żądanie z aplikacji nie zostaje wysłane do mojego servletu :( ? Jaj wpisuje ten adres w Firfoxa to działa poprawnie. Jak wyłam żądanie do innej strony www to też działa, ale jak próbuje to zrobić na localhost(lub 127.0.0.1) to nie działa. Proszę o pomoc bo muszę to na jutro skończyć, a praktycznie tylko to mi zostało. Nie mam czasu już się z tym bawić bo mam jeszcze parę innych programików do zrobienia na Kampanie Wrześniową.

1

Trudno powiedziec, za duzo kodu i info to nie wrzuciles.
Co mi sie nie podoba: oddzielasz parametry && a nie jednym &.
Jestes pewien ze serwer na localhost:8080 dziala?

0

Działa na 100 % bo jak wpiszę adres serwletu w przeglądarkę to to wyświetla mi na konsoli, że mam żądanie GET i dodaje do bazy parametry z GET więc wszystko działa jak powinno. Jak robię tak samo w aplikacji(to samo żądanie z parametrami) to na serwlecie cisza, z koli jak w aplikacji chcę pobrać stronę (np. www.wp.pl) i wysyłam żądanie to pobiera ją bez problem. Co do parametrów to z przeglądarki dział to jak należ z dwoma &&, poza tym nawet jak z tym by był problem to wyświetlił by się powiadomienie na konsole o nowym żądaniu GET, a co najwyżej nie pobrało by poprawnie parametrów.

1

Jak wystartuje tomcata i zrobie takie cos (Groovy) to dziala:

import java.net.*

URL wys = new URL('http://localhost:8080/examples/servlets/servlet/RequestParamExample?firstname=krowa&&lastname=mućka')
URLConnection yc = wys.openConnection()
System.out << yc.getInputStream()

Tobie to dziala?

Poza tym wydaje mi sie ze nie mowisz prawdy, ten FileNotFoundException zdaje sie leci przy URLConnection.getInputStream, a nie URL.openConnection()?

Rzutuj URLConnection na HttpURLConnection i wywolaj metode getResponseCode() - obstawiam ze jest to jakis 400 czy cos podobnego.

0

Dokładnie masz racje, wprowadziłem cie w błąd, ten wyjątek wyskakiwał przy URLConnection.getInputStream(ale w sumie to mi nie jest potrzebne bo ja chcę tylko wysłać url z parametrami). Zrobiłem tak jak piszesz i mam błąd 404. Teraz pytanie jak mam sformułować adres aby był poprawnie rozpoznawany przez Tomcat. Jak już wcześniej wspominałem kiedy odwołuje się do niego z przeglądarki to wszystko działa ok, więc byłe pewny, że wszystko z adresem servletu jest w porządku.

0

Jak masz 40x to mozesz wywolac HttpURLConnection.getErrorStream() - tomcat pokazuje zazwyczaj stack tracy jak cos mu nie pasi, wiec zobacz co tym razem mu sie nie podoba, moze tam znajdziessz jakas podpowiedz.

0

Ehhh... z getErrorStream() jest tak sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@ef2c60 Nie rozumiem o co chodzi, jak dam adres URL ("http" , "localhost" ,8080 , ""("" bez spacji w środku) to mam odp 200 czyli OK, dlaczego jak wpisze poprawny adres servletu /ProjectPP/Controller?opertion... to mam 404 ? Z przeglądarki Tomcat nie robi problemów. Nawet jak dam po prostu tylko /ProjectPP to w przeglądarce przekierowuje mnie na stronę dafault.jsp a w aplikacji to nie działa i mam odp 404.

0

Wypisz to co ten error stream pokazuje, wszsycy beda troche madrzejsi.

0

A jak masz zrobione to przekierowanie? Server wysyla nowy adres z powrotem do przegladarki, ktora ponawia zapytanie z nowym adresem, czy server to robi sam z RequestDispatcherem?

0

Serwer sam przekierowuje RequestDispatcherem, ale to już nie ważne, zrobiłem tak że aplikacja sama zapisuje wynik do tej samej bazy danych co Servlet, nie mam już czasu i cierpliwości aby się tym bawić i nie mam pojęcia czemu to nie działa, nawet jakby było złe żądanie to powinna być wywołana metoda doGet() bo adres servlet-u jest na 100 % dobry. Dziękuje ci mućka za poświecenie czasu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1