2016-11-06 11 views
0

짧은 동영상을 참조하여 간단한 동영상 추천자를 시도하고 있습니다. https://www.youtube.com/watch?v=63k560Livmg. 내가 diff를 시도하는 것은 콘솔이 아니라 브라우저에 추천을 표시하여 서블릿을 사용하고 싶습니다. 하지만 문제는 양식에 값 (사용자 ID)을 입력 할 때 빈 화면이 표시되는 것입니다. 내가 잘못하고있는 일을 도와주세요. 데이터 세트는 여기에서 https://mahout.apache.org/users/recommender/userbased-5-minutes.html입니다. web.xml 및 계층 구조에 대한 스크린 샷을 참조하십시오.maven에서 data.csv 파일에 대해 filenotfound 예외를 제공합니다.

index.jsp에서 사용자 값의 표시 결과를 수집
<html> 
    <body> 
    <h2>Hello World!</h2> 
    <form action="demo" method="post"> 
    loginID:<input type="text" name="name"/><br/> 
    <input type="submit" value="login"/> 

    </form> 
    </body> 
    </html> 

demo.java- 서블릿.

package com.issac; 

    import java.io.IOException; 
    import java.io.PrintWriter; 
    import java.util.ArrayList; 
    import java.util.List; 

    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 


import org.apache.mahout.cf.taste.recommender.RecommendedItem; 

/** 
* Servlet implementation class demo 
*/ 
    public class demo extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

/** 
* @see HttpServlet#HttpServlet() 
*/ 
     public demo() { 
     super(); 
    // TODO Auto-generated constructor stub 
    } 

/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
*/ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
     response.getWriter().append("Served at: ").append(request.getContextPath()); 
    } 

/** 
* @throws IOException 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
*/ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { 
    // TODO Auto-generated method stub 

     String n = request.getParameter("name"); 
     int k = Integer.parseInt(n); 
     PrintWriter out = response.getWriter(); 
     List<RecommendedItem> recommendations = new ArrayList<RecommendedItem> (); 

     try { 
      recommendations = App.getRecommend(k); 
     } catch (Exception e) { 
     // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

      for (RecommendedItem recommendation : recommendations) { 
      out.println(recommendation); 





    } 

}} 

app.java - 생성 권고 사항에 대한 논리가 일식의

 package com.issac; 

     import java.io.File; 
     import java.util.List; 

     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.RecommendedItem; 
     import org.apache.mahout.cf.taste.recommender.UserBasedRecommender; 
     import org.apache.mahout.cf.taste.similarity.UserSimilarity; 


     public class App 
{ 
    public static List<RecommendedItem> getRecommend(int k) throws Exception 
{ 
    DataModel model = new FileDataModel(new File("data/dataset.csv")); 
    UserSimilarity similarity = new PearsonCorrelationSimilarity(model); 
    UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model); 
UserBasedRecommender recommender = new  GenericUserBasedRecommender(model, neighborhood, similarity); 
     List<RecommendedItem> recommendations = recommender.recommend(k, 3); 
     return recommendations; 
    } 
    } 

스택 추적은 JEE 응용 프로그램 내에서

  INFO: Server startup in 15288 ms 
      SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
      SLF4J: Defaulting to no-operation (NOP) logger implementation 
     SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
     java.io.FileNotFoundException: data\dataset.csv 
     at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init> (FileDataModel.java:182) 
     at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init>(FileDataModel.java:169) 
     at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init>(FileDataModel.java:149) 
     at com.issac.App.getRecommend(App.java:24) 
     at com.issac.demo.doPost(demo.java:51) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt erChain.java:292) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Unknown Source) 

enter image description here

+0

콘솔에 충돌 스택 추적이있는 것 같습니다. 스택 트레이스 전체를 살펴보고 잘못된 것을 해결해야합니다. –

+0

스택 트레이스를 확인했는데 this- */SLF4J : "org.slf4j.impl.StaticLoggerBinder"클래스를로드하지 못했습니다. SLF4J : 무 작동 (NOP) 로거 구현으로 기본값 설정 SLF4J : 자세한 내용은 http://www.slf4j.org/codes.html#StaticLoggerBinder를 참조하십시오. java.io.FileNotFoundException : data \ dataset.csv * /. 서버가 dataset.csv 위치를 찾을 수 없으므로 dataset.csv의 위치가 계층 구조에서 올바르지 않습니까? – techvigil

답변

0

: 인해 InputStream로부터 DataModel이의 생성자의 부족으로, 우리는 (임시) 파일을 먼저 InputStream의 내용을 저장해야 그래서 이것이 어떻게 저에게 효과가 있었습니까. FileNotFound 예외를받은 후, 나는 그냥 일을 인터넷에서 찾았 이유에 대한 철저한 지식이없는 대신

DataModel model = new FileDataModel(new File("data/dataset.csv")); 

의 this->

ClassLoader classLoader = App.class.getClassLoader(); 
DataModel model = new FileDataModel(new File(classLoader.getResource("data/dataset.csv").getFile())); 

을 시도, 클래스 FileDataModel 년대 함께 할 수있는 뭔가가 매개 변수. 설명을 해줄 수있는 사람은 누구나 환영합니다.

0

을 콘솔 -, 파일을 읽어야한다 getResourceAsStream 방법 :

try(InputStream input=getClass().getClassLoader().getResourceAsStream("data/dataset.csv")){ 
    ... 
} 

data 폴더는 즉시 src/main/resources 내에 있어야합니다. 귀하의 경우에는

는 또 하나 개의 합병증이 존재합니다

try(InputStream input=getClass().getClassLoader().getResourceAsStream("data/dataset.csv")){ 
    // Copy the contents of the inputStream to a File, to fix the constructor FileDataModel(file): 
    File tmp=File.createTempFile("model-", ""); 
    tmp.deleteOnExit(); 
    InputStream input=new ByteArrayInputStream("enero".getBytes("ISO-8859-1")); 
    Files.copy(input, tmp.toPath(), StandardCopyOption.REPLACE_EXISTING); 
    DataModel model = new FileDataModel(new File("data/dataset.csv")); 
    ... 
} 
+0

여전히 출력 및 표시가 없습니다. java.io.FileNotFoundException : Java 자원 \ src \ main \ resources \ data \ dataset.csv – techvigil

+0

생성자 FileDataModel (InputStream)이 정의되지 않았습니다. – techvigil

+0

Agh. 나는 너무 빨리 갔다. 승인; 지금 전체 솔루션을 읽어보십시오. –