Servlet + JavaScript pod Eclipse

Odpowiedz Nowy wątek
2011-08-26 18:40
leonjr
0

Witam, mam taki mały problem z którym za nic w świecie nie mogę się uporać. Przykładowo: mam servlet który wypluwa prosty, htmlowy formularz. Następnie dodałem do tego prosty skrypcik .js, który sprawdza czy pole jest, czy też nie jest wypełnione - i jeśli nie jest to wyrzuca alert.
I tutaj mam problem - wszystko działa pięknie i ładnie, dopóki... dopóki wypisuję wszystko w Servlecie. Kiedy próbuję załadować plik, to nie reaguje. Dodam przy tym, że mam raczej średnie pojęcie o JavaScript więc mogę tam robić coś nie tak. Kod serwletu:

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * Servlet implementation class ServletD2
 */
public class ServletD2 extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletD2() {
        super();
    }
    private void printJSValidate(PrintWriter out){
        out.print("<head><script language=\"text/javascript\" src=\"/JavaScripts/servletD2Script.js\"></script></head>\n");
    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        printJSValidate(out);
        out.print("<FORM ACTION=\"ExerciseE\" name=\"entryForm\">\n"+
                "Name:<INPUT TYPE=\"TEXT\" NAME=\"name\"><BR>\n"+
                "<CENTER><INPUT TYPE=\"BUTTON\" VALUE=\"SUBMIT\" OnClick=\"validate()\"></CENTER>\n</FORM>");
    }
}

Kod pliku .js:

function validate(){
    if(document.entryName.name.value==""){
        alert("Wpisz dane!");
    } else {
        document.entryForm.submit();
    }
}

Wygenerowany html:

<head><script language="text/javascript" src="/JavaScripts/servletD2Script.js"></script></head>
<FORM ACTION="ExerciseE" name="entryForm">
Name:<INPUT TYPE="TEXT" NAME="name"><BR>
<CENTER><INPUT TYPE="BUTTON" VALUE="SUBMIT" OnClick="validate()"></CENTER>
</FORM>

Projekt tworzę pod Eclipsem z Glassfishem 3.1.1. Plik .js znajduje się w folderze /WebContent/Javascripts/ .
Ktoś może miał podobny problem? Może trzeba coś dorzucić do web.xml (google raczej się gubi)? Lub zmappować? A może ja po prostu gdzieś się pomyliłem?

Pozostało 580 znaków

2011-08-26 19:42
Moskitek
0

dopóki wypisuję wszystko w Servlecie. Kiedy próbuję załadować plik, to nie reaguje.

troche nie czaje o co Ci tu chodzi. Sprawdź sobie jakimś narzędziem do js (firebug, dragonfly, dev-tools, zależy jaka przeglądarka) czy nie masz błędów w js i czy pliki się poprawnie wczytują.

Pozostało 580 znaków

2011-08-26 19:56
leonjr
0

Proste - klikam, i nic się nie dzieje. Problem w tym, że nie wiem z której strony się za to zabrać - czy ja po prostu źle napisałem coś w .js, htmlu czy też pliki .js w projektach javowo-Eclipsowych należy jakoś specjalnie podpinać.
Dzięki za radę, zaraz sprawdzę.

Pozostało 580 znaków

2011-08-26 20:31
leonjr
0

Tak, nie znajduje mi pliku. Może ktoś kiedyś dołączał pliki .js do Web Dynamic Project w eclipsie i miał podobny problem?

Pozostało 580 znaków

2011-08-27 00:05
0

Masz plik .js w folderze /WebContent/Javascripts/ a src="/JavaScripts/servletD2Script.js" Popraw lokalizację i napisz, że działa.

Pozostało 580 znaków

2011-08-27 10:46
leonjr
0

Niestety nie, nie działa, już wcześniej próbowałem.
Już spieszę z wyjaśnieniami co do /WebContent/ - generalnie jest to ścieżka domyślna w tym projekcie i jeśli chcę się dostać np. do pliku /WebContent/aaa.jsp to robię to po prostu w ten sposób http://host/aaa.jsp.

Pozostało 580 znaków

2011-08-27 13:19
0

Sprawdziłem jak to działa i na pewno źle jest to: src="/JavaScripts/servletD2Script.js". Musi być bez pierwszej kreski: src="JavaScripts/servletD2Script.js". Wtedy lokalizacja jest szukana w kontekście aplikacji, czyli twojego projektu. Jak uruchomisz serwlet w firefox, to możesz wcisnąć Ctrl-U i zobaczyć kod strony z linkiem do pliku js. Jak klikniesz link, to zobaczysz gdzie go tak na prawdę szuka i że jest to nie to samo miejsce, którego się spodziewasz.
Tak dla ścisłości to wklej jeszcze mapowanie serwletu z pliku web.xml.

Pozostało 580 znaków

2011-08-27 16:54
leonjr
0

Problem rozwiązany.
Mianowicie - mój Eclipse miał oddzielny katalog dla plików .js, a konkretniej - dodałem obsługę JavaScript Resources do projektu i WSZYSTKIE pliki typu .js mają tam swój wpis, tzn. plik może siedzieć w dowolnym innym folderze ale i tak serwer go widzi jakby był w JS Resources. Problemem była nieznajomość Eclipse i Glassfisha (należało dodatkowo zainstalować plugin do js).
Problem można rozwiązać było dodatkowo odpowiednio edytując web.xml (można tam zmapować pliki .js), lecz wolę powyższe rozwiązanie.
Aha, jeszcze na koniec - póki co servletów nie mapowałem w web.xml, jedynie linkowałem je przez adnotację @WebServlet(String path).

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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