Visualizzazione dei risultati da 1 a 4 su 4

Discussione: PrimaServlet

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    10

    PrimaServlet

    Salve a tutti è da un pò che sto cercado di entrare ed imparare nel linguaggio java ma ogni tanto trovo un problemino
    Sto cercando di imparare le servlet e le jsp..ho fatto una prima applicazione che praticamente mi chiede di scegliere(digitando il relativo nome)tra tre tipi di notizie...una volta selezionato la notizia i dovrebbe aprire il file jsp corrispondente ma non riesco a capire dove sbaglio...vi linko il codice rispettivamente della Servlet,Index,Web.xml:
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class Notizia extends HttpServlet {

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

    String categoria=request.getParameter("categoria");
    String JspNotizia="";

    if(categoria.equals("politica")){

    JspNotizia="JSPnotizie/politica.jsp";

    }else if(categoria.equals("meteo")){

    JspNotizia="JSPnotizie/meteo.jsp";

    }else if(categoria.equals("sport")){

    JspNotizia="JSPnotizie/sport.jsp";

    }else JspNotizia="JSPnotizie/error.jsp";

    request.getRequestDispatcher(JspNotizia).forward(r equest,response);
    }

    }

    ..................................

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Scelta Notizia</title>
    </head>
    <body bgcolor="Black" text="red">
    <div align="center">
    <font size="5" face="Arial">PROGRAMMA SEMPLICE PER LA SCELTA DELLE NOTIZIE IN JSP</font>
    </div>
    <div align="center">
    <form action="src/Notizia.java">
    Scrivere quale notizia di desidera inserire tra: Sport,Meteo,Politica<input name="categoria" type="text" value="digitare qui la scelta">

    <input type="submit" value="Mostra la scelta">
    </form>
    </div>
    </body>
    </html>
    .................................................
    <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>PrimaServlet</display-name>
    <servlet>
    <display-name>Notizia</display-name>
    <servlet-name>MainNotizia</servlet-name>
    <servlet-class>Notizia</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>MainNotizia</servlet-name>
    <url-pattern>/Notizia</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
    <welcome-file>Index.html</welcome-file>
    </welcome-file-list>
    </web-app>



    Spero possiate aiutarmi
    Ringraziamenti anticipati saluti
    atomix

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: PrimaServlet

    Originariamente inviato da atomix84
    una volta selezionato la notizia i dovrebbe aprire il file jsp corrispondente ma non riesco a capire dove sbaglio
    No alt ... qui ci sono un po' di questioni:

    1) Le servlet e anche in generale, sopratutto, qualunque classe che devi referenziare/usare all'interno di una pagina jsp sarebbe meglio e anzi ... dovresti dichiararle in un loro "package".
    Non lasciarle nel package "unnamed", cioè quello di default!

    2) Fare una servlet il cui unico solo scopo è di fare da "invocatore" di una pagina jsp in base ad un parametro, sì si può fare (e a livello più esteso e generale questo è quanto viene descritto dal design pattern "Front Controller") ma così come l'hai fatto tu e sopratutto se quelle pagine jsp sono comunque accessibili anche direttamente .... lascia il tempo che trova ....

    3) <form action="src/Notizia.java">
    No, questo no. Generalmente non si mette affatto un url ad un sorgente java pensando così di volerlo eseguire. A runtime nella webapp i sorgenti Java che scrivi tu non centrano più ....

    4) <url-pattern>/Notizia</url-pattern>
    No, questo comunque non "quadra" proprio con ciò che hai messo nel action del form.


    Ok, ripartiamo quasi da zero:

    Hai:
    tuaapp\Index.html
    tuaapp\JSPnotizie\politica.jsp
    tuaapp\JSPnotizie\meteo.jsp
    tuaapp\JSPnotizie\sport.jsp
    tuaapp\WEB-INF\web.xml
    tuaapp\WEB-INF\classes\.....i-tuoi-class-compilati....

    Anche se non fosse così come hai adesso ... supponiamolo per un momento, che è meglio.

    Nel form potresti mettere es. action="Notizia.do" (nota, senza / iniziale!) e nel <url-pattern> metti /Notizia.do (nota, con / iniziale).
    E a quel punto tutto quadrerebbe, perché i path "relativi" che hai usato nella servlet come es. "JSPnotizie/politica.jsp", sarebbero relativi all URL della request, cioè / che è la context root (perché Notizia.do è relativo a Index.html che a sua volta è sotto la context root). E sotto la context root come supposto sopra c'è appunto una directory JSPnotizie

    I path da passare a getRequestDispatcher() generalmente è preferibile specificarli con il / davanti in modo che non siano relativi all URL della request ma siano relativi alla context root.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    10
    Ciao grazie mille per la risposta è stata precisa infatti sostituendo Notizia.do sia nel form che nell'url pattern ha funzionato benissimo..non vorrei essere troppo invadente e scocciante posso chiederti di spiegarmi il più semplicemente possibile(a livello proprio d'ignorante come me) il significato di quello che ho fatto sostituendo Notizia.do?Inoltre perchè quest'estensione.do?a che file fa rifermiento?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da atomix84
    il significato di quello che ho fatto sostituendo Notizia.do?Inoltre perchè quest'estensione.do?a che file fa rifermiento?
    .do è l'estensione "convenzionale" tipica quando si usa il framework Struts (se non sai cosa è non importa .... comunque è un framework per lo sviluppo di web application che applica il pattern MVC).

    A parte l'uso di Struts, in generale .do lo si può usare per "mappare" una azione (do=fai). Ma potevo dirti e proporti qualunque altra cosa es. .go o .action o .esegui. Poco importa a livello tecnico.

    Ma nella tua web application non c'è e non ci deve essere affatto un file Notizia.do! Con <servlet-mapping> e il tag <url-pattern> contenuto dentro, puoi creare degli URL "virtuali", che non fanno riferimento ad un qualche file "fisico" presente nella tua webapp.

    Un CMS basato su servlet/JSP potrebbe ad esempio "mappare" <url-pattern>*.html</url-pattern> in modo che la richiesta di un blabla/qualunquecosa.html vada ad una servlet. La servlet esamina il URL completo e magari va a prendere il contenuto della pagina da una tabella di un DB. E il client non "saprebbe" assolutamente nulla e non se ne accorgerebbe affatto di tutto questo. Riceve la pagina e basta.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.