Avatar billede roo104 Nybegynder
10. september 2003 - 11:17 Der er 29 kommentarer og
1 løsning

Servlet menu

Hvordan ville man typisk lave en menu med servlets ? Ville man lave en html side opdelt i tabeller hvor man kan skifte de enkelte celler ud med forskellige servlets eller IFrames ?
I så fald hvordan henter man en anden side til en bestemt frame, man man include servlets på en eller anden måde ?

Siden ser sådan her ud:
http://212.242.204.129:8081/servlet/index
Når man fx klikker på new user skulle den ikke åbne i et nyt vindue, men i det hvor man kan se servere nu
Avatar billede magoo20000 Nybegynder
10. september 2003 - 11:22 #1
Hvad mener du med servlets? En servlet er en serverside komponent (faktisk kompileres jsp til en servlet på serverside)?
Avatar billede magoo20000 Nybegynder
10. september 2003 - 11:23 #2
En servlet eksekverer som sagt serverside og kan f.eks. sende noget html tilbage til klienten.
Avatar billede roo104 Nybegynder
10. september 2003 - 11:24 #3
kan en servlet ikke samlignes med fx ASP og PHP ?
Avatar billede magoo20000 Nybegynder
10. september 2003 - 11:26 #4
ASP og PHP bliver fortolket på serverside. JSP/Servlet bliver kompileret. Men jo, de er alle fire serverside teknologier.
Avatar billede roo104 Nybegynder
10. september 2003 - 11:28 #5
i asp kan man lave en menu ved at have en række link
i en menu frame kan man have <a href=index.asp?mode=newuser>
i hoved framen kan man have if request("mode") = new ueser include newuser.asp

kan man ikke lave noget ligende med servlets ?
Avatar billede magoo20000 Nybegynder
10. september 2003 - 11:29 #6
Vil du generere ideholdet til en IFrame og/eller en bestemt celle vha. servlets?
Avatar billede roo104 Nybegynder
10. september 2003 - 11:31 #7
ja
Avatar billede magoo20000 Nybegynder
10. september 2003 - 11:31 #8
Ja, det kan du godt. Du vil altså sende en parameter afsted om at nu skal der skabes en ny bruger. Det skal servletten så behandle, og så skal der ske et eller andet?
Avatar billede roo104 Nybegynder
10. september 2003 - 11:33 #9
yes yes præsis, første gang jeg roder med servlets så er helt på bar bund
Avatar billede roo104 Nybegynder
10. september 2003 - 11:35 #10
menuen ser sådan her ud
<li><a href='newuser?mode=newuser'>New user</a></li>

og så
if (request.getParameter("mode") == "newuser")
siden med opret ny user vises
Avatar billede magoo20000 Nybegynder
10. september 2003 - 11:35 #11
Ok. Giv mig lige en ti minutter, så kan jeg lige skrive lidt hmtl og servlet, som et eksempel til dig!
Avatar billede roo104 Nybegynder
10. september 2003 - 11:37 #12
cool
Avatar billede magoo20000 Nybegynder
10. september 2003 - 11:41 #13
Her er et simpelt eksempel på en servlet der generere html, som sendes til klienten.

HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Servlet HTTP GET Example</TITLE>
</HEAD>
<BODY>
<FORM ACTION="http://localhost:8080/servlet/HTTPGetServlet"
      METHOD="GET">
  <P>Click the button to have the servlet send an HTML document</P>
  <INPUT TYPE="submit" VALUE="Get HTML Document">
</FORM>
</BODY>
</HTML>

Og klassen

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class HTTPGetServlet extends HttpServlet {
  public void doGet( HttpServletRequest request,
                      HttpServletResponse response )
      throws ServletException, IOException{
      PrintWriter output;

      response.setContentType( "text/html" );  // content type
      output = response.getWriter();          // get writer
// create and send HTML page to client
      StringBuffer buf = new StringBuffer();
      buf.append( "<HTML><HEAD><TITLE>\n" );
      buf.append( "A Simple Servlet Example\n" );
      buf.append( "</TITLE></HEAD><BODY>\n" );
      buf.append( "<H1>Welcome to Servlets!</H1>\n" );
      buf.append( "</BODY></HTML>" );
      output.println( buf.toString() );
      output.close();    // close PrintWriter stream
}
Avatar billede magoo20000 Nybegynder
10. september 2003 - 11:41 #14
mangler en } bracket.
Avatar billede magoo20000 Nybegynder
10. september 2003 - 11:45 #15
Der kommer lige et eksempel mere om lidt.
Avatar billede roo104 Nybegynder
10. september 2003 - 11:48 #16
men hvordan hvis du skal vælge mellem 3 sider, det kan den form jo ikke
Avatar billede magoo20000 Nybegynder
10. september 2003 - 11:51 #17
Et eksempel mere, men her tages der højde for input parameter.

<HTML>
<HEAD>
<TITLE>Example</TITLE>
</HEAD>
<BODY BGCOLOR="WHITE">

<TABLE BORDER="2" CELLPADDING="2">
<TR><TD WIDTH="275">

<H2>I'm a Simple Form</H2>

Enter some text and click the Submit button.<BR>
Clicking Submit invokes
<A HREF="./ExampServlet.java">ExampServlet.java</A>,<BR>
which returns an HTML page to the browser.

<FORM METHOD="POST" ACTION="/servlet/ExampServlet">

<INPUT TYPE="TEXT" NAME="DATA" SIZE=30>

<P>
<INPUT TYPE="SUBMIT" VALUE="Click Me">
<INPUT TYPE="RESET">
</FORM>

</TD></TR>
</TABLE>

</BODY>
</HTML>

Og

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ExampServlet extends HttpServlet {

    public void doPost(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException
  {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
        out.println("<title>Example</title>" +
                    "<body bgcolor=FFFFFF>");

        out.println("<h2>Button Clicked</h2>");

        String DATA = request.getParameter("DATA");
        //den får du fra NAME="DATA" i din html

        if(DATA != null){
                out.println(DATA);
        } else {
                out.println("No text entered.");
        }

        out.println("<P>Return to <A HREF=../simpleHTML.html>Form</A>");
        out.close();
}
}
Avatar billede magoo20000 Nybegynder
10. september 2003 - 11:58 #18
Hvis du skal vælge mellem tre sider kan man sætte value til noget forskelligt alt afhængigt af, hvad man vil og så tage højde for det i sin servlet. Det kunne gøres med f.eks.

if(request.getParameter("DATA").equals("NewUser")){
//gør noget
//Lav noget out.println("......"); der gør, at brugeren bliver linket hen til den rigtige side}
Avatar billede roo104 Nybegynder
10. september 2003 - 12:01 #19
har ikke fået det til at køre helt endnu, men menu'en skulle gerne blive, så det kun et det midt på siden der skifter
Avatar billede magoo20000 Nybegynder
10. september 2003 - 12:04 #20
Jeg er ikke den store html haj, men det du skriver i out.println("......") er ren html, så der burde være noget target="" i html, der kan sende dig derhen i tabellen/framen du vil.
Avatar billede roo104 Nybegynder
10. september 2003 - 12:06 #21
hvor skal .html filen ligge i forhold til .class filerne ?
Avatar billede magoo20000 Nybegynder
10. september 2003 - 12:11 #22
Jakarta-tomcat/webapps indeholder JSP/html og Jakarta-tomcat/webapps/ROOT indeholder alle andre .class filer. Sådan plejer jeg at gøre det med tomcat, men det afhænger af din webserver.
Avatar billede magoo20000 Nybegynder
10. september 2003 - 12:13 #23
Om igen. Jakarta-tomcat/webapps/ROOT/WEB-INF/classes indeholder servlets. Jakarta-tomcat/webapps/ROOT indeholder jsp/html.

Det er lang tid siden jeg har arbejdet med tomcat:-)
Avatar billede roo104 Nybegynder
10. september 2003 - 12:24 #24
ok det vil den bare ikke, Tomcat er ikke ligefrem børnevenlig. Den skal rebote efter hver lille ændring, og kan stadig ikke finde .class filerne.
Avatar billede magoo20000 Nybegynder
10. september 2003 - 12:31 #25
Det burde den.. Hmmm.. Jeg er tilbage om en times tid.
Avatar billede roo104 Nybegynder
10. september 2003 - 12:43 #26
lige meget, jeg fårstår godt hvor du vil hend, det er dog ikke lige helt det jeg mente. Det er mere noget i den her stil.

//Left menu
        StringBuffer left = new StringBuffer();           
        left.append("<div id='mainleft'>" +
                    "<div class='box'><h5>Menu</h5><ul class='menulist'>" +
                    "<li><a href='index?mode=news'>News</a></li>" +
                    "<li><a href='index?mode=newuser'>New user</a></li>" +
                    "<li><a ref='index?mode=servers'>Servers</a>  </li></ul></div></div>");
        out.println(left.toString());

//New user
if(request.getParameter("DATA").equals("NewUser")){
        StringBuffer newuser = new StringBuffer();
        newuser.append("<div id='maincenter'>" +
                        "<div class='boxcontent'>" +
                        "<h2>New user</h2>" +
                        "<table border='0'>" +
                        "<tbody><tr>" +
                        "<td align='right'>Username:</td><td><input name='frm_username' size='20'> *</td>" +

        out.println(newuser.toString());
}
else {
der er valgt noget andet i menuen
}


Men ville undgå en 1 kilometer lang class fil, ved ta dele den ud i flere klasse som klarede new user, news, osv.
Avatar billede roo104 Nybegynder
10. september 2003 - 12:45 #27
Jeg ville også gerne undgå at have fx menu med på alle de andre class'er
Avatar billede roo104 Nybegynder
10. september 2003 - 12:45 #28
hvis du forstår hvad jeg mener
Avatar billede roo104 Nybegynder
10. september 2003 - 14:01 #29
Jeg kan heller ikke bruge if(request.getParameter("DATA").equals("NewUser")){
hvis jeg bruger if(request.getParameter("DATA") == "NewUser"){ brokker den sig ikke, men det virker ikke helt
Avatar billede roo104 Nybegynder
13. september 2003 - 17:45 #30
String mode = request.getParameter("mode")+"";
if (mode.equals("servers"))

Det virker når jeg har +"" med.
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