建立 Mac OSX 10.6.8,Apache Tomcat 6.0.16,Java1.6.0_29,Eclipse IDE Indigo. 我在How to execute and include a Java API from a Web App project之前问了一个类似的问题但是设置已经改变了,我现在在WebAp中有了Java代码 我
Mac OSX 10.6.8,Apache Tomcat 6.0.16,Java1.6.0_29,Eclipse IDE Indigo.
我在How to execute and include a Java API from a Web App project之前问了一个类似的问题但是设置已经改变了,我现在在WebAp中有了Java代码
我试图从JSP页面调用Java方法并返回结果.我看了很多帖子,但我担心我用这两种语言缺乏经验是主要问题.
我有一个JSP WebAp,它搜索XML数据库并将内容返回给用户.我被要求集成其他搜索预定义网站并返回内容的Java代码.
我玩过类似的代码到下面,但我想我正在寻找别的东西
<%@ include file="/Applications/Tomcat/apache-tomcat-6.0.16/webapps/myWebApp/program.java" %>
谁能让我更好地了解我在寻找什么?
另外你知道我是否必须在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; } }
}
首先,丑陋的方式(也许是因为类似于 php?):<%= com.example.MyUtility.getSomething() %>
它被称为scriptlet,并被认为是一种不好的做法.事实上,这是错误的,我甚至羞于写这个.你应该做的是拥有一个前端控制器(一个简单的servlet将完成这个技巧),将结果放在请求属性中并转发到JSP,然后JSP使用jstl或jsp el进行输出.更多的工作,但更好的一个数量级:
在Servlet中:
request.setAttribute("someData", MyUtility.getSomething()) RequestDispatcher dispatcher = request.getRequestDispatcher("page.jsp"); dispatcher.forward(request, response);
在page.jsp中:
${someData}
有各种框架可以减少样板量(spring-mvc就是一个简单的例子).