从.jsp文件运行.java文件

时间:2015-12-06 05:34:38

标签: java jsp

我试图在我的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方法?

3 个答案:

答案 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! 希望它会有所帮助!