Вызов метода Java в JSP
настройка Mac OSX 10.6.8, Apache Tomcat 6.0.16, Java1.6.0_29, Eclipse IDE Indigo.
Я задал аналогичный вопрос об этом раньше в Как выполнить и Включить API Java из проекта веб-приложения но настройка с тех пор изменилась в том, что теперь у меня есть код Java в WebAp
Я пытаюсь вызвать метод Java со страницы JSP и вернуть результаты. Я просмотрел много сообщений, но я боюсь, что мое отсутствие опыта работы с любым языком основная проблема.
у меня есть JSP WebAp, который ищет базу данных XML и возвращает контент пользователю. Меня попросили интегрировать дополнительный java-код, который ищет предопределенные веб-сайты и возвращает контент.
Я играл с аналогичным кодом ниже, но я думаю, что ищу что-то еще
<%@ include file="/Applications/Tomcat/apache-tomcat-6.0.16/webapps/myWebApp/program.java" %>
кто может дать мне лучшее представление о том, что я ищу?
Также вы знаете, нужно ли мне редактировать что-либо еще в WebAp, чтобы соединить два файла? Файлы классов в папке WebINF?
любая помощь очень ценится
Deepend
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;
}
}
}
4 ответов
сначала некрасиво путь (может, потому, что так похож на php?):
<%= com.example.MyUtility.getSomething() %>
Это называется сценарий и считать плохой практикой. На самом деле это настолько неправильно, что мне стыдно даже писать это. Что ты!--5-->должны вместо этого нужно иметь передний контроллер (простой сервлет сделает трюк), разместить результаты в атрибутах запроса и переслать JSP, который в свою очередь использует тегов JSTL или jsp el для вывода. Гораздо больше работы, но лучше на порядок:
В Сервлет:
request.setAttribute("someData", MyUtility.getSomething())
RequestDispatcher dispatcher = request.getRequestDispatcher("page.jsp");
dispatcher.forward(request, response);
на page.jsp
:
${someData}
существуют различные механизмы, которые могут уменьшить количество boilerplate (весна-mvc простой пример).
ну, самый простой способ-импортировать ваш класс в JSP и вызвать его методы через скриптлеты.
включить класс:
<%@page import="package.subPackage.TheClassName"%>
обратите внимание, что TheClassName не содержит суффиксов, таких как .ява или. класс!--5-->
затем
<%
TheClassName theClassInstance = new TheClassName();
theClassInstance.doSomething();
%>
эффективно здесь вы пишете простой старый код Java между <%
и %>
теги.
это, однако, не лучший способ пойти с точки зрения того, как ваш код является organisd. Только логика представления должна идти в представлении. Засорять его такими скриптами-плохо.
Если вам нужна помощь от вызова метода экземпляра некоторого класса, чтобы воспроизвести что-то в вашем представлении, вы просто делаете тег, который выполняет вызов метода (и любую другую логику, не связанную с представлением), а затем возвращает только то, что нужно отобразить. Вот официальные документы об этом
Я не знаю, что я понял ваш вопрос, вероятно.
вам нужно импортировать класс java и запустить java-код в JSP
<%@ page import="package1.myClass1,package2.myClass2,....,packageN.myClassN" %>
импортируйте класс, а затем
<%
new ClassXXX().methodYYY();
%>
однако запускать java-код в jsp не очень хорошая идея...
внести JAVA класс в папке src и импортировать этот класс в JSP страница такой.
<%@ page import="com.MyClass"%>
Теперь предположим, что у вас есть функция в классе, которая возвращает строку, тогда вы напишете это в JSP как:
<%
String stringFromJava = MyClass.getStringForJSPPage();
%>
Теперь вы можете использовать stringFromJava
в любом месте JSP. Вы также можете получить список таким же образом.