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;
}
}
}
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.
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.
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).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With