Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Invoking a Java Method in JSP

Setup Mac OSX 10.6.8, Apache Tomcat 6.0.16, Java1.6.0_29, Eclipse IDE Indigo.

I asked a similar question to this before at How to execute and include a Java API from a Web App project but the set up has since changed in that i now have the Java code in the WebAp

I am trying to invoke a Java Method from a JSP page and return the results. I have looked at a lot of posts but I’m afraid my lack of experience with either language is the main problem.

I have a JSP WebAp that searches an XML database and returns content to the user. I have been asked to integrate additional java code that searches predefined Websites and returns content.

I’ve played around with similar code to the below but I think I’m looking for something else

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

Can anyone give me a better idea of what I’m looking for?

Also do you know if I have to edit anything else in the WebAp to connect the two files? The class files in the WebINF folder?

Any help is very much appreciated

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;

    }
}

}

like image 685
Deepend Avatar asked Mar 05 '12 12:03

Deepend


People also ask

Can we call a Java method from JSP?

One thing is missing, however. JSP 2.0 has no syntax for calling a public nonstatic JavaBean method from a scriptless JSP page. This article solves that issue by providing a JSP 2.0 simple tag with dynamic attributes. Note: You can download this article's source code from Resources.

What are the different methods to call Java code from JSP page?

There are different ways to include Java code in JSP page: JSP expressions, JSP scriptlets and JSP declarations. JSP expression is used to insert a value of Java expression, converted to String, into a response returned to the client. JSP scriptlet is a container for Java code fragment in a JSP page.


1 Answers

First, the ugly way (maybe because so similar to php?):

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

It is called a scriptlet and is considred a bad practice. In fact this is so wrong that I am ashamed of even writing this. What you should do instead is to have a front controller (a simple servlet will do the trick), place results in the request attributes and forward to a JSP, which in turns uses jstl or jsp el for output. Much more work, but better by an order of magnitude:

In Servlet:

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

In page.jsp:

${someData}

There are various frameworks that can reduce the amount of boilerplate (spring-mvc is a simple example).

like image 75
Tomasz Nurkiewicz Avatar answered Sep 20 '22 18:09

Tomasz Nurkiewicz