我试图在我的jsp文件中运行我的Mahout_Recommender.java文件。
这是我的.jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Recommendation Results</h1>
</body>
</html>
这是我的Mahout_Recommender.java文件: 包mahout;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import org.apache.log4j.BasicConfigurator;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.UserBasedRecommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
/**
* User-Based Recommender for Movies
*
*
*/
public class Movie_Recommender {
//public static String [][] rows = new String[3884][6];
public static void main (String [] args){
int userID = 1; //I put this as a placeholder
BasicConfigurator.configure();
try{
File movies = new File("movies.csv");
String [][] rows = new String[3884][6];
rows = fileRead(movies); //read in movie titles
DataModel model = new FileDataModel(new File("ratings.csv"));
UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model);
UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
ArrayList recommendations = null;
recommendations = (ArrayList) recommender.recommend(userID, 3);
Object[] recs = recommendations.toArray();
String movieTitles = " ";
int movieID = 0;
for(int i = 0; i < 3; i++){
String s = recs[i].toString();
movieID = Integer.parseInt(s.substring(21, s.indexOf(",")));
movieTitles += "\n "+rows[movieID][1];
}
System.out.println(recs[1]);
System.out.println("Your User-Based Recommendations are: ");
System.out.println(movieTitles);
} catch(Exception e) {
System.out.println(e);
}
}
@SuppressWarnings("resource")
public static String[][] fileRead (File data) throws FileNotFoundException{
Scanner reader = new Scanner(data);
String s = "";
String [][] rows = new String[3884][6];
int i = 0;
while (i<3500){
s = reader.nextLine();
rows[i] = s.split(",");
i++;
}
return rows;
}
}
如何在.jsp文件中调用.java文件的main方法?
答案 0 :(得分:0)
您可以从另一个角度调用main方法。
你只需要调用Movie_Recommender.main(null);在你的servlet中(因为你不使用args,所以为null)。
然后在你的jsp:
<% Movie_Recommender.main(null); %>
答案 1 :(得分:0)
您可以直接从.jsp中直接调用它,
Movie_Recommender.main(new String[]{});
OR
Movie_Recommender.main(null);
老实说,创建main(...)是完全不好的主意, 你想要实现什么目标?即使你这样做,也可以通过调用main() 作为任何其他任意方法,或通过调用运行时或其他东西, 您将实现的是在服务器上运行的程序。什么客户端 会这样做。
JSP / Servlet / Java Web编程是基于请求/响应的东西。
如果您想使用该程序计算某些内容并计划进行计划 使用输出作为响应。那为什么不包括那个特殊的 作为业务组件或其他东西,并以通常的方式调用它。 可能在一个单独的线程中,如果它是一个漫长的过程,就让用户 与应用程序交互并在完成后通知用户。
答案 2 :(得分:-1)
我不确定为什么你真的想直接在JSP中执行那些clas的main方法。但我认为你只需通过系统类来实现它,如下所示:
int result = System.exec("/path/to/ClassName.java");
这是一个如何执行类并使用正确的数据类型作为结果变量的示例。
如果您还需要将参数传递给班级,您可以使用以下帖子提供一个很好的答案HERE! 希望它会有所帮助!