# Java Standart Tag Library



## chipmount (27. Dezember 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


----------



## Thomas Darimont (27. Dezember 2004)

Hallo!

Innerhalb der JSTL gibt es schon Tags die für die Interaktion mit Datenbanken ausgestattet sind.

http://java.sun.com/webservices/docs/1.0/tutorial/doc/JSTL8.html
http://www-106.ibm.com/developerworks/java/library/j-jstl0520/

TLD Dateien sind die sogenannten  Tag Library Deployment Descriptoren. In denen sind die Tags definiert (Name, dahinterstehende Klasse, zulässige Attribute etc).

Ja das JSTL.jar reicht dazu aus (liegt im %TOMCAT_HOME%/COMMON/LIB Verzeichnis
bzw. im WEB-INF/LIB Verzeichnis deiner Webapplikation.)

Die passende TLD(s) solltest du dann auch innerhalb deiner WEB-Application z.Bsp. unter WEB-INF/tlds verfügbar machen kann. In deinem Fall wäre das z.Bsp. die sql.tld

In deiner JSP Seite bindest du die Tags dann wie folgt ein:

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

Dann sind die Tags etwa unter <sql:blablabla ..../>
verfügbar.

U.u. musst du um diese Tags zu verwenden zuvor noch eine Datasource im Container registrieren um z.Bsp. über das Tomcat interne JNDI (Namensdienst) darauf zuzugreifen.

Von Designaspakten sollte man integration von Datenbank Code in JSP-Seiten strikt vermeiden. Normalerweise geht man dort den Weg das man die JSP's nur für die Darstellung der Seite und die eigentliche Anwendungslogik in Servlets und/oder sonstigen Technologien (Springframework, EJB) zu hinterlegen.

Gruß Tom


----------



## chipmount (6. Januar 2005)

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 ><BR>

	  <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


----------



## Christian Fein (6. Januar 2005)

```
<sql:param value="${meinWertFuerGewuenschterName}" />
```
Fehlt dir.

Du hast ein PreparedStatement ( siehe ? im Query) welches mit einem Parameter 
initialisiert werden will.


----------

