Avatar billede fastpoint Nybegynder
23. oktober 2005 - 16:06 Der er 21 kommentarer og
1 løsning

Flytte logik fra JSP til Servlet

Skal man bare smide logikken fra JSP filerne ind i forskellige servlet filer og kalde dem?

Skal koden ligge i public void doGet() ?

og hvis man i skriver man bare <form action="servlet.java" Method="POST">

hvis man skal bruge den i sin form?
Avatar billede arne_v Ekspert
23. oktober 2005 - 16:52 #1
det kan man godt

nej du skriver

<form action="ServletUrlSomMappetIWebXml" Method="POST">

og bruger doPost
Avatar billede arne_v Ekspert
23. oktober 2005 - 16:52 #2
prøv og tyg dig igennem hele http://www.eksperten.dk/artikler/743 - der er
eksempler på meget i den artikel
Avatar billede fastpoint Nybegynder
23. oktober 2005 - 23:26 #3
Den er læst nu!

kan du hjælpe mig med denne kode her?
vil gerne fjerne logikken fra JSP siden og ligge det i en servlet. Sætter selvfølgelig pointene op i spørgsmålet.

<%@ page contentType="text/html;charset=windows-1252"%>
<%@ page import="java.sql.*" %>
<%@ page import="mypackage.*" %>
<jsp:include page="logged.jsp" />
<html>
<head>
<title>Fejl</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">



<%

DbConnection connection = new DbConnection();
ResultSet result;
String query;
query = "SELECT * FROM Sportsgrene ORDER BY navn";
result = connection.executeQuery(query);

%>
</head>

<body bgcolor="#FFCC66" text="#000000">
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><b><font size="4" face="Courier New, Courier, mono">Diverse
  listevisninger
    <form action="setilmeldte.jsp" method="POST">
    <select name="sportsgrene">
      <%  while(result.next()) { out.print("<option value="+ result.getInt("Sportsgrenid") +" >"+ result.getString("Navn") +"</option>"); } %>
    </select>
    <input type="submit" name="type" value="Hent !"/>
  </form>
  </font></b></font>
  <BR/>
  <BR/>&nbsp;</div>
</body>
</html>

Jeg kan ikke se hvordan en servlet skal kunne returnere dette resultat.

    <select name="sportsgrene">
      <%  while(result.next()) { out.print("<option value="+ result.getInt("Sportsgrenid") +" >"+ result.getString("Navn") +"</option>"); } %>
    </select>

til min JSP side? Det er fordi JSP delen kun skal bruges til det visuelle og alt logik skal over i min servlet.
Avatar billede arne_v Ekspert
23. oktober 2005 - 23:28 #4
OK

jeg troede at du ville POST'e til en servlet

men du vil bruge servlet til at hente data som skal vises i formen
Avatar billede arne_v Ekspert
23. oktober 2005 - 23:30 #5
jeg vil foreslå dig at droppe servlet og bruge beans

fra min artikel:

3. JSP med Java beans
5. JSTL

da du sådan set ikke har noget at bruge selve srevlet funktionaliteten til

JSTL eksemplet bør rimeligt nemt kunne rettes til så du genererer din løkke
Avatar billede arne_v Ekspert
23. oktober 2005 - 23:32 #6
hvis du vil bruge servlet så lader du din browseren kalde din servlet, din servlet
henter data og gemmer dem i request samt forwarder til en JSP side, som så så viser
siden med brug af JSTL

men medmindre du bruger et framework som Struts/WebWork/JSF så er det lidt tungt
Avatar billede fastpoint Nybegynder
23. oktober 2005 - 23:34 #7
Mit system skal laves på følgende måder

1)    Model 1 -  Page Controller – Page-Centric udelukkende ved hjælp af JSP
2)    Model 2 –  Front Controller – Servlet –Centric hvor der anvendes Servlets til control/business logic og JSP til presentation/view

Jeg har lavet model 1, men skal lave model 2.
Det må jeg vel ikke med Java Beans ifølge opgaven?
Avatar billede arne_v Ekspert
23. oktober 2005 - 23:35 #8
<c:forEach var="sg" items="${allsg}">
<option value="<c:out value="${c.id}"/>"><c:out value="${c.navn}"/>
</c:forEach>

medmindre JSTL har noget endnu smartere til SELECT tags
Avatar billede arne_v Ekspert
23. oktober 2005 - 23:36 #9
hvis du vil have en kontroller servlet så skal du igang med 23:32:22
Avatar billede fastpoint Nybegynder
23. oktober 2005 - 23:43 #10
kan du uddybe 23:32:22 ?

Jeg har aldrig arbejdet med Servlets før. Sidder med en bunke papirer omkring servlets, men mangler nok stadig nogle eksempler.

Hvad mener du med gemme data i request?
Avatar billede arne_v Ekspert
23. oktober 2005 - 23:48 #11
du kan set lidt i artiklen

6. JSP + servlet

det er ganske vist POST og INSERT men alligevel
Avatar billede arne_v Ekspert
23. oktober 2005 - 23:51 #12
public class ControllerServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ArrayList allsg = new ArrayList();
        // hent alle dine sports grene fra databasen og gem dem i en ArrayList af beans
        request.setAttribute("allsg", allsg);
        request.getDispatcher("dinside.jsp").forward(request,response);
    }
}
Avatar billede fastpoint Nybegynder
23. oktober 2005 - 23:55 #13
Spørgsmål.

1. Er dette JSTL ?
<c:forEach var="c" items="${allc}"><tr><td><c:out value="${c.name}"/></td><td><c:out value="${c.phone}"/></td><td><c:out value="${c.email}"/></td><tr></c:forEach>

2. Skriver du til request her?
request.setAttribute("allsg", allsg);
referencen er den første parameter?

3. ArrayList af beans ?
mener du bare i denne ? ArrayList allsg = new ArrayList();

Men ellers lysner det lidt
Avatar billede arne_v Ekspert
24. oktober 2005 - 00:00 #14
re 1)

ja

re 2)

ja

den skal matche

<c:forEach var="sg" items="${allsg}">

re 3)

ja

men du skal lave en bean klasse med to properties id og name og så putte dem i
araylisten så du kan bruge

<c:out value="${sg.id}"/> og <c:out value="${sg.navn}"/>
Avatar billede fastpoint Nybegynder
24. oktober 2005 - 00:05 #15
en bean klasse er vel bare en almindelig klasse med nogle get og set metoder?

jeg kan se vi godt må benytte os af Java Beans
Avatar billede arne_v Ekspert
24. oktober 2005 - 00:06 #16
ja

det er umuligt at lave en pæn løsning uden brug af bean klasser
Avatar billede fastpoint Nybegynder
24. oktober 2005 - 00:12 #17
når de skriver JSP til presentation/view
hvor meget java kode må man så skrive før det hører til ind under servlets?

hvis nu vi siger der ikke skal benyttes JSTL eftersom vi ikke har kigget på det endnu
Avatar billede arne_v Ekspert
24. oktober 2005 - 00:18 #18
Når du skal have den løkke må du:
  - embedde kode i <% %>
  - bruge JSTL
  - bruge dit eget tag lib

Umiddelbart synes jeg at JSTL må være det pæneste.

En servlet er strengt taget defineret som en klasse der extender HttpServlet, så
det er nok et spørgsmål om hvor meget kode I må embedde i <% %> - men det
ved jeg ikke
Avatar billede fastpoint Nybegynder
24. oktober 2005 - 01:06 #19
Jeg prøver at poste til en servlet men får denne fejl

405 Method Not Allowed
HTTP method POST is not supported by this URL

hvad menes der?
Avatar billede fastpoint Nybegynder
24. oktober 2005 - 01:07 #20
Fandt selv fejlen. method="GET" og ikke POST. Hvorfor?
Avatar billede arne_v Ekspert
24. oktober 2005 - 09:26 #21
du har nok lavet en doGet og ikke en doPost i servletten ...
Avatar billede arne_v Ekspert
24. oktober 2005 - 13:14 #22
og et svar fra mig
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester