Avatar billede trp79 Nybegynder
16. august 2004 - 16:09 Der er 8 kommentarer og
1 løsning

Problem med simpel JSP.

Hejsa
Jeg er lige begyndt at lege lidt med JSP, men får et par fejl på denne side:

<%@ page contentType="text/html;charset=windows-1252" import="java.sql.*" import="hsqldb.*" %>
<html>
<head><title>login2</title></head>
<body>
<%
String bn, ak;
// hvis brugernavn="Jacob" og adgangskode="hemli" logges der ind.
// dette burde selvfølgelig hentes fra en database eller lign.
bn = request.getParameter("brugernavn");
ak = request.getParameter("adgangskode");
try {%>
<%!  Db_Handler db = new Db_Handler("db_file");
} catch (Exception ex1) {
    ex1.printStackTrace();          // could not start db
}
%>
<%
if ("Jacob".equals(bn) && "hemli".equals(ak))
{
// sæt attributten "logget ind" i sessionen
session.setAttribute("logget ind", "ja");
out.println("Du er logget korrekt ind.<br>");
}
else
{
// fjern attributten "logget ind" fra sessionen
session.removeAttribute("logget ind");
out.println("Forkert brugernavn eller adgangskode.<br>");
}
%>
Du kan nu prøve at gå videre til <a href="Login3.jsp">den beskyttede side</a>
eller gå tilbage og <a href="Login.jsp">logge ind</a> igen.
</body>
</html>

Første fejl jeg får er:
Error(13,3): 'class' or 'interface' expected
på linien:
} catch (Exception ex1) {
Error(13,1): illegal start of type på denne linie

Håber nogen kan hjælpe :)
(Hvis i kan se flere fejl, så skal i selvfølgelig være velkomne til at nævne dem også!:)

På forhånd tak, mvh
Torben
Avatar billede arne_v Ekspert
16. august 2004 - 16:11 #1
Skal

<%
String bn, ak;
// hvis brugernavn="Jacob" og adgangskode="hemli" logges der ind.
// dette burde selvfølgelig hentes fra en database eller lign.
bn = request.getParameter("brugernavn");
ak = request.getParameter("adgangskode");
try {%>
<%!  Db_Handler db = new Db_Handler("db_file");
} catch (Exception ex1) {
    ex1.printStackTrace();          // could not start db
}
%>

ikke bare være

<%
String bn, ak;
// hvis brugernavn="Jacob" og adgangskode="hemli" logges der ind.
// dette burde selvfølgelig hentes fra en database eller lign.
bn = request.getParameter("brugernavn");
ak = request.getParameter("adgangskode");
try {
Db_Handler db = new Db_Handler("db_file");
} catch (Exception ex1) {
    ex1.printStackTrace();          // could not start db
}
%>

?
Avatar billede arne_v Ekspert
16. august 2004 - 16:14 #2
Sådan kort fortalt er:

<%

%>

til eksekverbare linie som hører hjemme inde i en metode og

<%!

%>

til erklæringer af felter og metoder som hører hjemme inde i en klasse men udenfor
metoder.
Avatar billede trp79 Nybegynder
16. august 2004 - 17:12 #3
Hej Arne
Din løsning virker, så det er super. Men jeg er stadig lidt usikker på hvad det er henholdsvis <% %> og <%! %> betyder, så kan jeg få dig til at give et par eksempler?

Jeg havde nemlig fået den opfattelse, at det var noget ala "static" udfra følgende beskrivelse fra http://javabog.dk/jsp
"Med <%! og %> kan man erklære variabler der huskes fra kald til kald. Det kan være nyttigt til at huske mellemregninger eller f.eks. lave en tæller, der fortæller hvor mange gange siden er blevet hentet"
Avatar billede trp79 Nybegynder
16. august 2004 - 17:14 #4
Arh nu tror jeg, at jeg har forstået... Det med <%! %> det skal altså forstås som public - en variabel eller metode jeg kan tilgå hvorfra jeg vil i jsp filen?
Avatar billede arne_v Ekspert
16. august 2004 - 17:19 #5
Her er et simpelt eksempel:

<!-- den her form er erklæringer af felter eller metoder -->
<%!
private static int counter;
private static void incrementCounter() {
  counter++;
}
%>

<!-- den her form er kode indeni metode -->
<%
incrementCounter();
%>

<!-- den her form er expressions som outputtes -->
<%=counter%>
Avatar billede arne_v Ekspert
16. august 2004 - 17:22 #6
Og hvad der sker er nok bedst illustreret ved at se på den genererede Java kode:

package org.apache.jsp;

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

public final class ex_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {


private static int counter;
private static void incrementCounter() {
  counter++;
}

  private static java.util.Vector _jspx_dependants;

  public java.util.List getDependants() {
    return _jspx_dependants;
  }

  public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

    JspFactory _jspxFactory = null;
    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    PageContext _jspx_page_context = null;


    try {
      _jspxFactory = JspFactory.getDefaultFactory();
      response.setContentType("text/html");
      pageContext = _jspxFactory.getPageContext(this, request, response,
                  null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write("<!-- den her form er erklæringer af felter elle rmetoder -->\n");
      out.write("\n");
      out.write("\n");
      out.write("<!-- den her form er kode indeni metode -->\n");

incrementCounter();

      out.write("\n");
      out.write("\n");
      out.write("<!-- den her form er expressions som outputtes -->\n");
      out.print(counter);
    } catch (Throwable t) {
      if (!(t instanceof SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          out.clearBuffer();
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
      }
    } finally {
      if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}
Avatar billede arne_v Ekspert
16. august 2004 - 17:23 #7
Det var iøvrigt ikke meningen at de kommentarer skulle outputtes.
Avatar billede arne_v Ekspert
16. august 2004 - 17:23 #8
Og et svar
Avatar billede trp79 Nybegynder
16. august 2004 - 17:24 #9
Det er super Arne :) Smid du bare et svar. Mange tak for hjælpen (igen igen:)
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