Aufruf einer Java-Methode in JSP
Setup
Mac OSX 10.6.8, Apache-Tomcat-6.0.16, Java1.6.0_29, Eclipse IDE Indigo.
Fragte ich eine ähnliche Frage dazu, bevor an Wie Sie ausführen, und schließen Sie ein Java-API aus einer Web-App-Projekt aber die Einrichtung hat sich seitdem geändert, dass ich jetzt den Java-code in der WebAp
Ich versuche zum aufrufen einer Java-Methode aus einer JSP-Seite und gibt die Ergebnisse zurück. Ich habe mir eine Menge Beiträge, aber ich fürchte, meine mangelnde Erfahrung mit beiden Sprachen ist das Hauptproblem.
Ich habe eine JSP-WebAp, dass die Suche nach einer XML-Datenbank und gibt die Inhalte an den Benutzer. Ich wurde gebeten, zusätzliche Integration von java-code, dass die Suche nach vordefinierten Websites und gibt Inhalte.
Habe ich rumprobiert mit ähnlichem code, der unten aber ich denke, ich bin auf der Suche nach etwas anderes
<%@ include file="/Applications/Tomcat/apache-tomcat-6.0.16/webapps/myWebApp/program.java" %>
Kann mir jemand eine bessere Vorstellung von dem, was ich Suche?
Außerdem wissen Sie, wenn ich auf Bearbeiten, alles andere in der WebAp verbinden Sie die beiden Dateien? Die class-Dateien in das WebINF-Ordner?
Jede Hilfe wird sehr geschätzt
Vertieft
package sliceClient;
import java.util.List;
public class Run {
@Inject
private SliceSearcher sliceSearcher;
@Inject
private SliceCreator sliceCreator;
/**
* @param args
*/
public static void main(String[] args) {
Injector injector = Guice.createInjector(new GuiceInjector());
Run r = injector.getInstance(Run.class);
r.runSliceConsumer();
}
private void setSlicepediaProductionMode(boolean productionMode){
sliceSearcher.setProductionMode(productionMode);
sliceCreator.setProductionMode(productionMode);
}
public void runSliceConsumer() {
System.out.println("Starting Slice Consumer");
//Remove this line if the real slicepedia server is to be used
setSlicepediaProductionMode(true);
List<SliceHit> sliceHits = searchForSlices();
if (sliceHits == null) {
System.err.println("Timeout occurred while fetching slices");
return;
}
if (!sliceHits.isEmpty()) {
System.out.println("Found some slices Yuhuuuu ! :-) ");
String sliceContent = createSlices(sliceHits);
System.out.println("Slice content:");
System.out.println(sliceContent);
} else {
System.out.println("No Slices were found for this query");
}
System.out.println("Slice Consumer stopped activity");
}
private String createSlices(List<SliceHit> sliceHits) {
sliceCreator.setSliceHits(sliceHits);
if (sliceCreator.run()) {
SlicePackage slicePackage = sliceCreator.getNextSlicePackage();
return slicePackage.getSliceContent();
} else {
return sliceCreator.getErrorMessage();
}
}
private List<SliceHit> searchForSlices() {
SlicepediaQuery sliceQuery = new SlicepediaQuery();
sliceQuery.paramANNOTATION_READING_DIFFICULTY(new Double(30), "<");
//Works
// String dbConcept = "http://dbpedia.org/resource/human_rights";
// sliceQuery.paramANNOTATION_CONCEPT_FEATURE_HAS_DBPEDIA(dbConcept,0.5, ">");
// sliceQuery.paramHAS_NBR_OF_PARAGRAPHS(1,">");
// sliceQuery.paramIsAnOpenSlice(true);
// sliceQuery.paramHasNumberOfToken(80, ">");
sliceSearcher.setSliceQuery(sliceQuery);
if (sliceSearcher.run()) {
return sliceSearcher.getSliceHits();
} else {
return null;
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste, der hässlich Weg (vielleicht, weil so ähnlich wie php?):
Ist es als scriptlet und ist considred eine schlechte Praxis ist. In der Tat ist dies so falsch, dass ich schäme mich sogar das schreiben dieses. Was Sie sollte stattdessen tun ist, um eine front-controller (ein einfaches servlet wird den trick tun), legen Sie die Ergebnisse in die Anfrage-Attribute und freuen uns auf eine JSP, die abwechselnd verwendet jstl oder jsp el für die Ausgabe. Viel mehr Arbeit, aber besser, um eine Größenordnung:
Servlet:
In
page.jsp
:Gibt es verschiedene frameworks, die reduzieren die Menge an boilerplate (spring-mvc ist ein einfaches Beispiel).
slicer.java
, Ihre Benennung und Vokabular ist ein wenig verwirrend in der Java-Welt. Wir brauchen keine Methode, die Körper, nur die Signaturen (bitte fügen Sie es zu der Frage, nicht als Kommentar). Von dem, was Sie gesagt haben hier, vielleicht versuchen:<%= sliceClient.sliceCreate() %>
...Nun, der einfachste Weg ist, um importieren Sie Ihre Klasse in der JSP-Datei, und rufen Sie die Methoden, über die scriptlets.
Gehören der Klasse:
Beachten Sie, dass TheClassName enthalten keine Suffixe wie .java-oder .Klasse
Dann
Effektiv hier Sie schreiben plain old Java code zwischen
<%
und%>
tags.Dies ist jedoch nicht der beste Weg zu gehen, aus der Sicht, wie Ihr code ist organisd. Nur Präsentation Logik gehen sollte, in den Blick. Littering, wie scriptlets ist schlecht.
Wenn Sie Hilfe von einigen Klasse-Instanz-Methodenaufruf diplay etwas in Ihrem Blick, Ihr, nur ein Tag, der die Methode aufrufen (und alle anderen nicht-view-bezogene Logik) und gibt dann nur, was dargestellt werden muss. Hier die offizielle docs auf, dass
http://docs.oracle.com/javaee/5/tutorial/doc/bnalj.html
Weiß ich nicht, ich verstehe deine Frage wahrscheinlich.
importieren Sie die Klasse, und dann
Jedoch die Ausführung von java-code in jsp ist keine gute Idee...
Machen JAVA Klasse, in der Sie die src-Ordner und importieren Sie die Klasse in JSP Seite wie diese.
Nun angenommen, Sie haben eine Funktion in der Klasse String zurückgibt, dann schreiben Sie diese in der JSP als:
Nun können Sie
stringFromJava
überall in JSP. Sie können auch eine Liste in der gleichen Weise.