# JSPs richtig includen



## coolex (26. Mai 2008)

Hallo!

Ich versuche eine JSP in einer anderen zu inluden.
Aus Erfahrungen, weiß ich, dass ich das unter PHP ganz einfach mit "include 'datei.php'" machen kann und dann auf alle Variablen und Methoden der anderen php Datei zugreifen kann. Dabei muss die andere php vorher nichts angeben bzw. für das Includen vorbereiten.

Wie ist das aber bei JSPs?
Ich habe eine JSP erstellt, die folgenden Code enthält:

```
<jsp:include page="includeMe.jsp" />
```
Dabei bin ich davon ausgegangen, dass ich auf die Variablen und Methoden der "includeMe.jsp" problemlos zugreifen kann. Leider ist das nicht der Fall.

Wie kann man auf die Methoden und Variablen einer includierten JSP nun zugreifen?

Danke für eure Hilfe im voraus!


----------



## ms (26. Mai 2008)

Mit 
	
	
	
	





```
<%@ include file="..."%>
```
 wird eine jsp statisch inkludiert.

ms


----------



## coolex (26. Mai 2008)

Hi!

Danke für die schnelle Antwort.
Wie kann ich aber an der Stelle file="xxx" eine Java Variable einfügen?
Also statt "xxx" soll eine String Variable stehen.


----------



## coolex (26. Mai 2008)

Kann man das dynamische Includen irgendwie mit 

```
<jsp:include page="xxx" flush="true">
```
lösen?
Dabei möchte ich, wie oben schon erwähnt, auch die Variablen includen. Leider funktioniert das nicht.


----------



## ms (26. Mai 2008)

coolex hat gesagt.:
			
		

> Kann man das dynamische Includen irgendwie mit
> 
> ```
> <jsp:include page="xxx" flush="true">
> ...


Nein, mit jsp:include inkludierst du das Ergebnis einer anderen Seite, nicht dessen JSP-Code.
Zusammen mit flush() ist das ein eigener HttpRequest.

ms


----------



## coolex (26. Mai 2008)

OK, danke für die Info.
Wie kann ich nun Variablen einer inlcudierten jsp datei nun benutzen?


----------



## ms (26. Mai 2008)

Üblicherweise werden Variablen, die in JSPs verwendet werden, in einem Servlet erzeugt und im Request- oder Sessionscope abgelegt. Wenn eine JSP eine andere inkludiert, dann soll an dieser Stelle das Ergebnis dieser JSP eingefügt werden. Du kannst auch einen Include wie einen Methodenaufruf sehen. Nach dem Aufruf kannst du auch nicht auf die definierten Variablen aus der Methode zugreifen.
Dein ganzer Aufbau mag in php gut funktionieren, bei Java/Jsp läuft das ein wenig anders/organisierter.

ms


----------



## coolex (26. Mai 2008)

Ok, das kann ich gut nachvollziehen und finde es sehr gut, dass das organisierter ist. Deswegen beschäftige ich mich nun mit JSPs. 
Aber leider habe ich immer noch keinen Weg gefunden, der mein Problem löst. Kann mir jemand ein Bsp. zeigen, wie ich das nun letztendlich machen kann?


----------



## ms (26. Mai 2008)

Zeig doch mal (in gekürzter form) was du bisher hast und was du machen willst.

ms


----------



## coolex (26. Mai 2008)

Gut.
Also ich habe hier eine index.jsp Datei:

```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<jsp:include page="includeMe.jsp"  />
<%= exampleVar %>

</body>
</html>
```
Und hier ist die "includeMe.jsp":

```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    
<%!
	public String exampleVar = new String("Hallo Alexandro!");
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
```

Also die Variable in "includeMe.jsp" "exampleVar" soll verfügbar sein in der index.jsp. 
Dabei soll das Einfügen der "includeMe.jsp" dynamisch erfolgen, weil ich später meine index.jsp erweitern möchte und das Includen der jsps eben dynamisch machen will. Also der Name der zu includierten Datei wird dann dynamisch zusammengestellt.


----------



## ms (26. Mai 2008)

Gutes Beispiel wie man es nicht macht.

Wie schon gesagt, am besten du schreibst ein Servlet, definierst die Variable und legst sie im RequestScope ab und leitest dann an die JSP weiter. In der JSP wird dann auf die Variable zugegriffen.

Schau dir dazu mal diverse Servlet/JSP-Tutorials an bzw. gibt auch genug Bücher dazu.
Oder http://java.sun.com/javaee/5/docs/tutorial/doc/bnadp.html von Sun.

ms


----------



## coolex (26. Mai 2008)

Geht das nicht einfacher und schneller ohne dass ich Servlets schreiben muss? JSPs sind ja letztendlich auch Servlets. Kann man das nicht irgendwie mit Hilfe von <jsparam> Tags lösen?


----------



## ms (26. Mai 2008)

Du kannst einer JSP, die du inkludieren willst, Parameter mitgeben.
Das sind aber wie bei einem Methodenaufruf nur Parameter für die Methode, also in deinem Fall für die inkludierte JSP.

Der umgekehrte Weg, dass du Variablen in der inkludierten JSP definierst und in der aufrufenden JSP verwendest geht nicht.

ms


----------

