13

Mac OSX 10.6.8、Apache Tomcat 6.0.16、Java1.6.0_29、EclipseIDEIndigoをセットアップします。

以前、WebアプリプロジェクトからJava APIを実行して含める方法でこれと同様の質問をしましたが、その後、WebApにJavaコードがあるという点でセットアップが変更されました。

JSPページからJavaメソッドを呼び出して、結果を返そうとしています。私はたくさんの投稿を見てきましたが、どちらの言語の経験も不足していることが主な問題だと思います。

XMLデータベースを検索してコンテンツをユーザーに返すJSPWebApがあります。事前定義されたWebサイトを検索してコンテンツを返す追加のJavaコードを統合するように依頼されました。

私は以下と同様のコードで遊んだことがありますが、私は何か他のものを探していると思います

<%@ include file="/Applications/Tomcat/apache-tomcat-6.0.16/webapps/myWebApp/program.java" %>

誰かが私が探しているものについてより良いアイデアを私に与えることができますか?

また、2つのファイルを接続するためにWebApで他に何かを編集する必要があるかどうかを知っていますか?WebINFフォルダー内のクラスファイル?

どんな助けでも大歓迎です

一番深い場所


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

4 に答える 4

18

まず、醜い方法(おそらくに非常に似ているためですか?):

<%= com.example.MyUtility.getSomething() %>

これはと呼ばれ、悪い習慣と見なされます。実際、これは非常に間違っているので、私はこれを書くことさえ恥ずかしいです。代わりに行うべきことは、フロントコントローラー(単純なサーブレットがトリックを実行します)を用意し、結果をリクエスト属性に配置して、JSPに転送します。JSPはまたは を使用します。はるかに多くの作業がありますが、桁違いに優れています。

サーブレットの場合:

request.setAttribute("someData", MyUtility.getSomething())
RequestDispatcher dispatcher = request.getRequestDispatcher("page.jsp");
dispatcher.forward(request, response);  

page.jsp

${someData}

ボイラープレートの量を減らすことができるさまざまなフレームワークがあります(は単純な例です)。

于 2012-03-05T12:19:59.643 に答える
8

最も簡単な方法は、クラスをJSPにインポートし、スクリプトレットを介してそのメソッドを呼び出すことです。

クラスを含めるには:

<%@page import="package.subPackage.TheClassName"%>

TheClassNameには、.javaや.classなどのサフィックスが含まれていないことに注意してください。

それで

<%
   TheClassName theClassInstance = new TheClassName();
   theClassInstance.doSomething();
%>

事実上、ここでは<%%>タグの間にプレーンな古いJavaコードを記述しています。

ただし、これは、コードがどのように編成されているかという観点から見ると、最善の方法ではありません。ビューには、プレゼンテーションロジックのみを含める必要があります。そのようなスクリプトレットを散らかすことは悪いことです。

ビュー内の何かを表示するためにクラスのインスタンスメソッド呼び出しの助けが必要な場合は、メソッド呼び出し(およびその他のビューに関連しないロジック)を実行し、表示する必要があるものだけを返すタグを作成するだけです。これが公式ドキュメントです

http://docs.oracle.com/javaee/5/tutorial/doc/bnalj.html

于 2012-03-05T12:20:12.397 に答える
3

おそらくあなたの質問を理解したかどうかはわかりません。

必要なのは、Javaクラスをインポートし、JSPでJavaコードを実行することです。

<%@ page import="package1.myClass1,package2.myClass2,....,packageN.myClassN" %>

クラスをインポートしてから

<%
 new ClassXXX().methodYYY();
%>

ただし、jspでJavaコードを実行することはお勧めできません...

于 2012-03-05T12:19:28.087 に答える
1

srcフォルダーにJAVAクラスを作成し、そのクラスを次のようにJSPページにインポートします。

<%@ page import="com.MyClass"%>

ここで、Stringを返す関数がクラスにあると仮定して、これをJSPで次のように記述します。

<%
String stringFromJava = MyClass.getStringForJSPPage();
%>

これで、 JSPstringFromJavaのどこでも使用できます。同様の方法でリストを取得することもできます。

于 2012-03-05T12:19:52.907 に答える