Toon posts:

[JSP/JAVA] Servlet url onjuist

Pagina: 1
Acties:
  • 135 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig met een project op school.
De opdracht is dat ik een bibliotheek systeem moet maken
in JSP/Java Servlets gekoppelt aan de MySQL database.

Ik gebruik netbeans als tool om in te werken, omdat alles hier al in zit.

Ik loop alleen tegen het volgende probleem en ik kom er maar niet achter
wat het is, kheb naar mijn idee alle mogelijkheden al geprobeerd, maar
niets wil werken, misschien dat jullie zien waar het mis gaat.

Dit is mijn structuur in netbeans:
Afbeeldingslocatie: http://home.wanadoo.nl/lievers/netbeans01.jpg

Mijn JSP code:
code:
1
2
3
4
<form method="get" action="/Inkomend">
<input type="text" name="isbn" size="30">
<input type="submit" name="submit" value="Innemen">
</form>


En dit mijn Servlet code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import java.io.*;
import java.net.*;
import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;

import java.sql.*;

/**
 *
 * @author Stefan
 * @version 1.0
 */
public class Inkomend extends HttpServlet {
    
    /** Initializes the servlet.
     */
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        
    }
    
    /** Destroys the servlet.
     */
    public void destroy() {
        
    }
    
    /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        
        if (request.getParameter("isbn") == null) {
            out.println("U heeft geen waarde mee gestuurd!");
        }
            
        /* TODO output your page here
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet</title>");
        out.println("</head>");
        out.println("<body>");
         
        out.println("</body>");
        out.println("</html>");
         */
        out.close();
    }
    
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    
}


Hoe roep ik nou vanuit mijn JSP die servlet aan?

Als iemand behoefte heeft aan mijn web.xml hoor ik het wel.
Ik heb dus al gegoogled en op school gevraagd, maar niemand weet het :S
Dus kheb wel onderzoek gedaan.

  • OrbitZ
  • Registratie: Juni 2001
  • Laatst online: 26-05-2025
Op submit drukken??

Dan zou hij iig bij Inkomend doGet of doPost terecht moeten komen. Post idd je web.xml ook ff want daar moet wel een mapping in staan.

(Het hele zaakje moet natuurlijk ook in een servlet container hangen (jetty/tomcat))

Verwijderd

Topicstarter
Dit is mijn web.xml
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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" version="2.4">
  <servlet>
    <servlet-name>Inname</servlet-name>
    <servlet-class>Inkomend</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Inname</servlet-name>
    <url-pattern>/Inname</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>
            30
        </session-timeout>
  </session-config>
  <welcome-file-list>
    <welcome-file>
            index.jsp
        </welcome-file>
    <welcome-file>
            index.html
        </welcome-file>
    <welcome-file>
            index.htm
        </welcome-file>
  </welcome-file-list>
</web-app>


Hij komt dus helemaal niet bij inkomend, ik krijg een file not found melding

Verwijderd

Mischien verwoord je het slechts verkeerd, maar het lijkt erop alsof je verkeerd om denkt. Je roept een servlet niet aan vanuit een JSP pagina, maar je mapped een URL naar een servlet toe. Deze servlet handelt dan de request af.

Wat je vanuit een JSP pagina aanroept zijn java beans of gewone objecten. Dat doe je oftewel door scriptlets te gebruiken (java code tussen <% %> oftewel door JSTL te gebruiken. De JSP pagina die jij laat zien is eigenlijk geen JSP maar gewoon HTML.

HTML output vanuit je servlet genereren (zoals jij doet) doe je eigenlijk ook nooit. Dat is HELE oude style, vanuit de tijd dat er nog geen JSP bestond. Tegenwoordig doet een servlet alleen wat hogere logica, zoals authentication of het dispatchen (verwijzen) naar een JSP resource. Ook het genereren van binaire data (zoals een plaatje) doe je vanuit een servlet.

Voor je interface gebruik je voornamelijk JSPs. Als je wat verder bent zul je wat dieper gaan door JSF of Struts oid te gebruiken.

Verwijderd

Topicstarter
Verwijderd schreef op donderdag 31 maart 2005 @ 20:05:
Mischien verwoord je het slechts verkeerd, maar het lijkt erop alsof je verkeerd om denkt. Je roept een servlet niet aan vanuit een JSP pagina, maar je mapped een URL naar een servlet toe. Deze servlet handelt dan de request af.

Wat je vanuit een JSP pagina aanroept zijn java beans of gewone objecten. Dat doe je oftewel door scriptlets te gebruiken (java code tussen <% %> oftewel door JSTL te gebruiken. De JSP pagina die jij laat zien is eigenlijk geen JSP maar gewoon HTML.

HTML output vanuit je servlet genereren (zoals jij doet) doe je eigenlijk ook nooit. Dat is HELE oude style, vanuit de tijd dat er nog geen JSP bestond. Tegenwoordig doet een servlet alleen wat hogere logica, zoals authentication of het dispatchen (verwijzen) naar een JSP resource. Ook het genereren van binaire data (zoals een plaatje) doe je vanuit een servlet.

Voor je interface gebruik je voornamelijk JSPs. Als je wat verder bent zul je wat dieper gaan door JSF of Struts oid te gebruiken.
Niet negatief bedoeld, maar hier heb ik nou niks aan :)
Ik doe het voor het eerst, dan maar old-style, kheb geen tijd om new-style te leren :P

Verwijderd

Met old-style heb ik het dan wel over een jaartje of 8 terug hoor! :)

HTML vanuit servlet genereren is alleen maar rottig en werd gedaan uit noodzaak, niet omdat het makkelijker was. De 'style' is ook maar relatief kort gebruikt.

Wat er zo op het eerste oog in je code al fout gaat is dat je vanuit je HTML pagina de url /Inkomend gebruikt, terwijl je servlet staat gemapped op /Inname. Dat gaat dus niet werken.

Mischien helpt het om een klein voorbeeldje te geven hoe je de structuur ongeveer zou kunnen opzetten:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>
<jsp:useBean id="mybean" class="somepackage.Mybean" scope="session"/>
<jsp:setProperty name="mybean" property="*"/>
<html>
    <head>
        <title><c:out value="example"/></title>
    </head>
    <body>
    <c:choose>
    
    <%-- validation --%>
    <c:when test="${ mybean.msgSize > 0 }">
        Fouten:<br>
        <c:forEach items="${mybean.messages}" var="msg" varStatus="nr">
            <c:out value="${nr.index}. ${msg}"/><br>
        </c:forEach>
    </c:when>

    <c:otherwise>
    
        <% mybean.doAction(); %>

        <form method="get" action="myjsp.jsp">
            <input type="text" name="isbn" size="30" 
                value= "<c:out value="${mybean.isbn}" />"
            >
            <input type="submit" name="submit" value="Innemen">
        </form>

    </c:otherwise>
    
    </c:choose>
    </body>
</html>


In dit voorbeeld is mybean een java classe met get en sets voor isbn. In doAction() zet je de logica om te controleren of het isbn nummer klopt. Aan de hand van de uitkomst hiervan vul je een errorlist op die je uitprint. Dmv van get properties in je bean (die je in je doAction zet en je op je pagina uitleest), kun je later HTML constructies conditioneel toevoegen of weghalen, en zo het uiterlijk van je page bepalen. Veranderd je page sterk dan kun je beter een nieuwe maken en daar heen gaan vanuit je form.

Ipv jstl (wat ik in het voorbeeld gebruik), kun je ook scriptlet code gebruiken. Iets als <c:when test="${ mybean.errorSize > 0 }"> wordt dan <% if ( mybean.getErrorSize() > 0 ) { %>. De rest van de constructies gaan dan op een vergelijkbare manier.

Op deze wijze maak je een scheiding tussen je logica en je layout. Wat ik hier als voorbeeld gaf is heel simpel. Dingen als doAction en de messages zijn in frameworks als JSF, Struts, Spring MVC sterk gegeneraliseerd en verdienen eigenlijk de voorkeur. Dit is mischien wat makkelijker om te beginnen.

Hoe dan ook volg je wel bijna altijd het zelfde patroon:

-HTML/userinterface in je JSP
-Minimale hoeveelheid logica in je JSP (daar scoorde jou versie wel goed ;) )
-Logica in gewone java objecten/beans afhandelen
-Servlets alleen voor non-userinterface dingen gebruiken (voor simpele applicaties zoals wat jij wilt heb je deze waarschijnlijk niet nodig)

[ Voor 75% gewijzigd door Verwijderd op 31-03-2005 21:02 ]


  • truegrit
  • Registratie: Augustus 2004
  • Laatst online: 01-05 20:11
Ik heb dit project ook voor school gedaan, en heb inderdaad jsp gebruikt. Ik weet niet op welke school jij zit, en welk jaar enzo, maar je zal je dus wel aan de eisen van je opdrachtgever moeten houden. Ik weet niet of het stukje hierboven daar onder valt, maar als beginner kan je het beter in JSP en java maken.

On-topic dan maar:
als de homedir van het project bijvoorbeeld
code:
1
http://localhost:8080/bieb/

is, dan roep je de servlet aan als
code:
1
2
3
http://localhost:8080/bieb/servlet/NaamVanServlet
of
http://localhost:8080/bieb/servlets/NaamVanServlet


Deze zitten dan meestal in WEB-INF/classes/
Meer kan ik er ook niet over vertellen want ik had alleen jsp gebruikt voor de interface, en classes voor de beans.

(ik had trouwens een 8 voor het project :)

hallo


Verwijderd

Topicstarter
Ik ga het morgen allemaal weer proberen, ik zal even laten weten of het gelukt is of niet.

Ik studeer aan het HRO btw, voor zij die het interesseren.

Verwijderd

truegrit schreef op donderdag 31 maart 2005 @ 22:54:
Ik weet niet of het stukje hierboven daar onder valt, maar als beginner kan je het beter in JSP en java maken.
Bedoel je nou met het "stukje hierboven" mijn voorbeeld code of dat van de TS?

Als je mijn code bedoelt, dat -IS- JSP en Java ;)

Mischien denk je dat standaard JSPs alleen scriptlets bevatten, maar het is juist andersom. De jstl tag library ( <c:out> enzo), is juist het meest standaard JSP wat er is. Scriptlets ( java code tussen <% %> ) is mogelijk, maar gebruik je eigenlijk alleen per uitzondering. Mijn bovenstaande voorbeeld bevat 1 regel scriptlet en is op en top standaard JSP.

Java gebruik je voornamelijk dmv de beans. mybean is dus een java class in mijn voorbeeld, maar ik liet daar geen source van zien.

Maar zelf als je toch overtuigt blijft van het feit dat JSP alleen HTML + scriptlets is, dan nog blijft de structuur die ik aangaf overeind. De JSTL constructies kun je vrij recht toe recht aan door scriptlet code vervangen.

En als je toch de code van TS bedoelt, laat dan maar zitten ;)
classes voor de beans.
Volgens de specificatie zijn beans classes. Classes voor de beans gebruiken is dus een beetje triviale opmerking. Er is geen andere mogelijkheid.

[ Voor 10% gewijzigd door Verwijderd op 31-03-2005 23:18 ]


  • truegrit
  • Registratie: Augustus 2004
  • Laatst online: 01-05 20:11
Verwijderd schreef op donderdag 31 maart 2005 @ 23:16:
[...]

Bedoel je nou met het "stukje hierboven" mijn voorbeeld code of dat van de TS?

Als je mijn code bedoelt, dat -IS- JSP en Java ;)

Mischien denk je dat standaard JSPs alleen scriptlets bevatten, maar het is juist andersom. De jstl tag library ( <c:out> enzo), is juist het meest standaard JSP wat er is. Scriptlets ( java code tussen <% %> ) is mogelijk, maar gebruik je eigenlijk alleen per uitzondering. Mijn bovenstaande voorbeeld bevat 1 regel scriptlet en is op en top standaard JSP.

Java gebruik je voornamelijk dmv de beans. mybean is dus een java class in mijn voorbeeld, maar ik liet daar geen source van zien.

Maar zelf als je toch overtuigt blijft van het feit dat JSP alleen HTML + scriptlets is, dan nog blijft de structuur die ik aangaf overeind. De JSTL constructies kun je vrij recht toe recht aan door scriptlet code vervangen.

En als je toch de code van TS bedoelt, laat dan maar zitten ;)


[...]


Volgens de specificatie zijn beans classes. Classes voor de beans gebruiken is dus een beetje triviale opmerking. Er is geen andere mogelijkheid.
Ik had het inderdaad over jou code. Ik heb zelf dus ook dit project gedaan, dus in 5 weken tijd heb ik wat geleerd over servlets en jsp pagina's. Echt diep ben ik er niet ingegaan, ik heb alleen scriptlets gebruikt. Zeker met het idee dat het eerste jaar op de HRO alleen java als programmeer taal heeft, en het dus veel makkelijker is om deze kennis te gebruiken in het project, in plaats van wat jij liet zien. Ik zeg niet dat het slecht is enzo, het kost gewoon wat meer tijd om het onder de knie te krijgen, en tijd is kostbaar in projecten.

En over die beans dat ze classes zijn, dat bedoelde ik ook maar het kwam er wat fout uit dus ;(

hallo


Verwijderd

Wat henk liet zien is inderdaad wat je gewoon normaal JSP noemt hoor? Is niks raars of aparts aan!

Kijk maar eens in de J2EE 1.4 Sun tutorial ( http://java.sun.com/j2ee/1.4/docs/tutorial/doc/ ). Het beste voorbeeld is dan de sectie: What Is a JSP Page: http://java.sun.com/j2ee/...oc/JSPIntro2.html#wp65749

Als jouw leraar denk dat normale JSPs scriptlets bevatten voor alle logica dan hoort die man IMHO geen les te geven in dat vak. Dat je alleen Java kent maakt niet uit, de JSP constructies zijn zo simpel dat je die in 1 dag hebt geleerd.

  • truegrit
  • Registratie: Augustus 2004
  • Laatst online: 01-05 20:11
Verwijderd schreef op vrijdag 01 april 2005 @ 10:56:
Als jouw leraar denk dat normale JSPs scriptlets bevatten voor alle logica dan hoort die man IMHO geen les te geven in dat vak.
Daar ben ik het helemaal met je eens ;)

We moesten het trouwens zelf uitvinden, het enige boek dat we hadden maakte gebruik van servlets, zoals de topicstarter doet. Daarom vond ik het zelf al aardig dat ik een jsp pagina met scriplets kon maken. Ik had zelf niet verder gekeken dan dat.

hallo


Verwijderd

Een JSP pagina met scriptlets is natuurlijk al een stuk beter dan de servlet aanpak van de TS :)

  • OrbitZ
  • Registratie: Juni 2001
  • Laatst online: 26-05-2025
Je html code zou dit moeten zijn (Inname):
code:
1
2
3
4
<form method="get" action="/Inname">
<input type="text" name="isbn" size="30">
<input type="submit" name="submit" value="Innemen">
</form>

Omdat je in de Servlet mapping de naam Inname heb staan.
code:
1
2
3
4
  <servlet-mapping>
    <servlet-name>Inname</servlet-name>
    <url-pattern>/Inname</url-pattern>
  </servlet-mapping>

Verwijderd

OrbitZ schreef op vrijdag 01 april 2005 @ 14:23:
Je html code zou dit moeten zijn (Inname):
Zie:
henk_DE_man schreef op donderdag 31 maart 2005 @ 20:31:
Wat er zo op het eerste oog in je code al fout gaat is dat je vanuit je HTML pagina de url /Inkomend gebruikt, terwijl je servlet staat gemapped op /Inname. Dat gaat dus niet werken.
O-)

  • OrbitZ
  • Registratie: Juni 2001
  • Laatst online: 26-05-2025
Mhhzz Volgende keer posts maar eens beter lezen!! :X

[ Voor 3% gewijzigd door OrbitZ op 01-04-2005 19:45 ]

Pagina: 1