# Java Standart Tag Library



## chipmount (27. Dez 2004)

Hi,
möchte mal eine jsp mit Funktionen(jstl-> die auf eine datenbank zugreift und was ausführt) realisieren

habe mir paar dokus, foren angeschaut aber nicht schlauer geworden 

ich habe Tomcat 5 laufen muss ich trotzdem jakarta-taglibs installieren(welche version) oder reichen die jstl.jar
 und standard.jar von Tomcat aus ???

was sind ..tld??? muss ich für meine DB-Anwendung eine eigene ...tld schreiben oder wie funktioniert das ganze


danke


----------



## bronks (29. Dez 2004)

Welche Dokumentationen hast Du denn gelesen? Könntest Du evtl. ein paar gute Links posten.

Ich erzähl Dir mal warum ich weiß, wie soetwas Funktioniert: Ich habe den Code studiert, den dir der "foobar" *hier* gepostet hat. Unter anderem ist da auch eine TLD dabei.


uuuuuuuupppps   :? 

das solltest Du mal ausprobieren   :lol:


----------



## chipmount (29. Dez 2004)

ich sehe da keine TLD-Datei für SQL

einmal das hier(leider funktioniert das beispiel bei mir nicht)

http://bran.hta-bi.bfh.ch/guides/javainsel3/javainsel_170016.htm



http://java.sun.com/webservices/docs/1.0/tutorial/doc/JSTL.html
http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html


----------



## bronks (30. Dez 2004)

chipmount hat gesagt.:
			
		

> ich sehe da keine TLD-Datei für SQL...



Ahhh... Hab verstanden. Die JSTL haben eigene SQL-Funktionen. Mal sehn was man damit so machen kann. Ein einfach gehaltenes Beispiel mit MySQL

Datenbankname: adressen
Tabellenname: adressen
Datenfelder: name, vorname

Der Code gibt die Felder Name und Vorname aller Datensätze aus:

```
<%@ page language="java" import="java.lang.*,java.util.*" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
    <head>
        <title> Datenbankservlet </title>
    </head>
    <body>

        <sql:setDataSource scope="session" var="dataSource"
        url="jdbc:mysql://127.0.0.1/adressen" driver="com.mysql.jdbc.Driver"
        user="root" password="geheim"/>

        <sql:query var="adressen" dataSource="${dataSource}" scope="session">
            SELECT * FROM adressen
        </sql:query>

        <c:forEach var="row" items="${adressen.rows}">
            Name:    ${row.name}

            Vorname: ${row.vorname}

        </c:forEach>

    </body>
</html>
```

Wohl gemerkt: Es funktioniert. Ist aber so eine PHPmäßige Lösung.


----------



## chipmount (5. Jan 2005)

also hab dieses beispiel so abgewandelt
http://bran.hta-bi.bfh.ch/guides/javainsel3/javainsel_170016.htm 

<BASE>\jt\WEB-INF\lib\dom.jar
<BASE>\jt\WEB-INF\lib\jstl.jar
<BASE>\jt\WEB-INF\lib\standard.jar
<BASE>\jt\WEB-INF\lib\jaxen-full.jar
<BASE>\jt\WEB-INF\lib\jaxp-api.jar
<BASE>\jt\WEB-INF\lib\jdbc2_0-stdext.jar
<BASE>\jt\WEB-INF\lib\xalan.jar
<BASE>\jt\WEB-INF\lib\sax.jar
<BASE>\jt\WEB-INF\lib\xercesImpl.jar
<BASE>\jt\WEB-INF\lib\saxpath.jar

<BASE>\jt\WEB-INF\tld\c.tld

meine FirstTagDemo.jsp


```
<%@ taglib prefix="c" uri="/WEB-INF/tld/c.tld" %>
<% request.setAttribute( "jt", "Java-Tutor" ); %>
<% request.setAttribute( "end", "4" ); %>
<% request.setAttribute( "number", "12.03.1973. Das ist mein Geburtstag" ); %>
<c:expr value="$jt"/> 

<c:expr value="$jt.big()"/> 

<c:expr value="$jt.charAt(end)"/> 

<c:expr value="$jt.fontcolor('gray')"/> 

<c:expr value="$jt.link('http://java-tutor.com/')"/> 

<c:expr value="$jt.slice(0, end)"/> 

<c:expr value="$parseInt(number)"/> 

<c:expr value="$escape(number)"/>
```

leider krieg ich diese fehlermeldung:

org.apache.jasper.JasperException: /FirstTagDemo1.jsp(5,0) No tag "expr" defined in
 tag library imported with prefix "c"
	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:200)
	org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1308)
	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1560)
	org.apache.jasper.compiler.Parser.parse(Parser.java:126)
	org.apache.jasper.compiler.ParserController.doParse(ParserController.java:220)
	org.apache.jasper.compiler.ParserController.parse(ParserController.java:101)
	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:203)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:470)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

woran liegt es???
was ist falsch???

danke


----------



## chipmount (6. Jan 2005)

ok hat sich erledigt

habe jezt dieses problem

meine ..html

```
<html>
<head>
<title>formulaire d´essaie </title>
</head>
<body>
<h3>Geben Sie den Bestellersname ein :</h3>
<FORM Method="GET" Action="sql.jsp">

Name:       <INPUT TYPE="text" name=param >


      <INPUT type=submit value=Abfrage senden>
</FORM>
</body>
</html>
```

meine ...jsp

```
<%@ taglib uri="/WEB-INF/tld/taglibs-dbtags.tld" prefix="sql" %>

<%-- open a database connection --%>

<sql:connection id="conn1">
  <sql:userId>scott</sql:userId>
  <sql:password>tiger</sql:password>
  <sql:url>jdbc:oracle:thin:@..:1521:..</sql:url>
  <sql:driver>oracle.jdbc.driver.OracleDriver</sql:driver>
</sql:connection>

<%-- open a database query --%>
<table>
<sql:statement id="stmt1" conn="conn1"> 
  <sql:query>
    select bestnr, bestelldatum, bestsum from Bestellung WHERE name=?    
  </sql:query>

  <%-- loop through the rows of your query --%>

  <sql:resultSet id="rset2">
    <tr>
      <td><sql:getColumn position="1"/></td>
      <td><sql:getColumn position="2"/></td>
      <td><sql:getColumn position="3"/></td> 
      <sql:getColumn position="4"/><%=request.getParameter("param")%>    
<sql:wasNull>[no description]</sql:wasNull></td>

    </tr>
  </sql:resultSet>
</sql:statement>
</table>

<%-- close a database connection --%>
<sql:closeConnection conn="conn1"/>
```

meine FEHLERMELDUNG:

javax.servlet.ServletException: java.sql.SQLException: ORA-01008: Nicht 
allen Variablen ist ein Wert zugeordnet

   org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
   org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
   org.apache.jsp.sql_jsp._jspService(sql_jsp.java:247)
   org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
   org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
   org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
   org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

ist die parameter übergabe falsch??
wie mach ich das richtig??


----------



## Gast (8. Jan 2005)

Bist Du Dir sicher, das der Wert aus der "Form" auch an das statement übergeben wird, bzw. überhaupt auf der nächsten jsp ankommt.
Teste das mal erst mal. 

Frage: Warum arbeitest Du mit einer Oracle-Datenbank? Die ist doch sehr "heavy" und meiner Meinung nach nicht ganz einfach zu administrieren?


----------



## Janascho (9. Dez 2008)

Es liegt an folgendem:

Von dir:

```
<sql:query>
    select bestnr, bestelldatum, bestsum from Bestellung WHERE name=?   
  </sql:query>
```

Richtig wäre jetzt:

```
<sql:query>
    select bestnr, bestelldatum, bestsum from Bestellung WHERE name=?   
   <sql:param value="blabla" />
  </sql:query>
```

Durch das WHERE name = ?, also das ?, wird dadraus ein PreparedStatement. Soll heißen, die Query wurde vorbereitet und hat unbelegte Variablenstellen. Diese werden dann der Reihe nach (!!) mit <sqlaram value="" /> *in* deinem sql:query belegt. Sollte sogar SQL-Injektion sicher sein...

Ansonsten ist eine Oracle-Datenbank wirklich sehr "heavy"...

Und klappt's?


----------

