2016-05-12 7 views
0

Erstellen einer Webanwendung wo der Benutzer ein Wort und ein relevantes Bild suchen kann zurückgegeben werden. Aber immer wenn die Abfrage geändert wird, ist das Bild nicht. Was geht hier vor sich?Bild wird nicht aktualisiert in JSP Java dynamisches Webprojekt

Benutzer sucht "Katze" und Bild kommt zurück. Aber bleibt so nach der ersten Abfrage. enter image description here

DefineWord.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ page import="googleAPI.*" %> 
<!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=ISO-8859-1"> 
<title>Define</title> 

<link rel="stylesheet" type="text/css" href="css/bootstrap.css"> 

<link rel="stylesheet" href="css/bootstrap-lightbox.min.css"> 
<link rel="stylesheet" href="css/bootstrap-lightbox.css"> 

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
<script src="js/includeNAV.js"></script> 
<script type="text/javascript" src="https://www.google.com/jsapi"></script> 
<style> 
    .fit_image img { 
     max-width: 100%; 
     max-height: 100%; 
    } 
    .fit_image { 
     width: 400px; 
     height: 200px; 
    } 
</style> 

</head> 
<body> 
    <div id="includedNav"></div> 


    <div class="container"> 
     <form id="searchForm" method="get" action="LinkServlet"> 
      <fieldset> 

       <input id="s" type="text" name="query" /> <input type="submit" 
        value="Submit" id="submitButton" /> 


      </fieldset> 
     </form> 
    </div> 
    <br /> 
<!-- Requests attributes from servlet --> 

    <div class="container"> 
<%--  <%=request.getAttribute("links") %> --%> 
     <br /> ONE LINK: 
     <div class="fit_image"> 
     <img src="<%=request.getAttribute("onelink")%>"/> 
</div> 





    </div> 
    <script 
     src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
    <script 
     src="//blueimp.github.io/Gallery/js/jquery.blueimp-gallery.min.js"></script> 
    <script src="js/bootstrap-image-gallery.min.js"></script> 

</body> 
</html> 

LinkServlet.java

package googleAPI; 

import java.io.IOException; 
import java.util.ArrayList; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@WebServlet("/LinkServlet") 
public class LinkServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public LinkServlet() { 
     super(); 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     request.removeAttribute("onelink"); 

     // Get query from user through http parameter 

     String query = request.getParameter("query"); 
     String results = google.psuedomain(query); 

     // Put results string into a ArrayList so that the jsp can dynamically 
     // call each image 
     String[] urlAry = results.split("\n"); 
     ArrayList<String> ar = new ArrayList<String>(); 
     ar.clear(); 
     ar.removeAll(ar); 
     for (int i = 0; i < urlAry.length; i++) { 
      ar.add(urlAry[i]); 
     } 

     // Get first element from ArrayList and set attribute 
     String onelink = ar.get(0); 
     request.setAttribute("onelink", onelink); 

     // Set query results to attribute so JSP can call it 
     request.setAttribute("links", ar); 

     // Forward request back to the same JSP. 
     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/DefineWord.jsp"); 
     dispatcher.forward(request, response); 

    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

    } 

} 

google.java

package googleAPI; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.regex.Pattern; 
import java.util.HashSet; 
import java.util.Set; 
import java.util.regex.Matcher; 

public class google { 
    static StringBuilder results = new StringBuilder(); 
    static String finalResults; 

    public static String getFinalResults() { 
     return finalResults; 
    } 

    public static void setFinalResults(String finalResults) { 
     google.finalResults = finalResults; 
    } 

    public static String psuedomain(String qry) throws IOException { 

     String key = "*********private key************"; 
     URL url = new URL("https://www.googleapis.com/customsearch/v1?key=" + key 
       + "&cx=*********private key************&q=" + qry + "&alt=json"); 

     // CONNECTION LOGIC 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("Accept", "application/json"); 
     BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream()))); 
     String output; 
     while ((output = br.readLine()) != null) { 
      Pattern pattern = Pattern.compile("(?:(?:https?)+\\:\\/\\/+[a-zA-Z0-9\\/\\._-]{1,})+(?:(?:jpe?g|png|gif))"); 
      Matcher matcher = pattern.matcher(output); 
      if (matcher.find()) { 
       results.append(matcher.group() + "\n"); 
      } 

     } 
     conn.disconnect(); 
     finalResults = removeDup(); 
     return finalResults; 
    } 

    public static String removeDup() { 
     String[] tokens = results.toString().split("\n"); 
     StringBuilder resultBuilder = new StringBuilder(); 
     Set<String> alreadyPresent = new HashSet<String>(); 

     boolean first = true; 
     for (String token : tokens) { 

      if (!alreadyPresent.contains(token)) { 
       if (first) 
        first = false; 
       else 
        resultBuilder.append("\n"); 

       if (!alreadyPresent.contains(token)) 
        resultBuilder.append(token + "\n"); 
      } 

      alreadyPresent.add(token); 
     } 
     String result = resultBuilder.toString(); 
     return result; 
    } 

} 

Irgendwelche Ideen, warum dies passieren könnte? Vielen Dank für Ihre Zeit.

Antwort

0

Ich denke, das Problem hatte mit statischen Methoden zu tun. Ich entfernte die statischen Deklarationen, änderte etwas Code und es scheint jetzt zu funktionieren.

google2.java

package googleAPI; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.regex.Pattern; 
import java.util.HashSet; 
import java.util.Set; 
import java.util.regex.Matcher; 

public class google2 { 
    StringBuilder results = new StringBuilder(); 
    String finalResults; 


    public String psuedomain(String qry) throws IOException { 

     String key = "*********private key************"; 
     URL url = new URL("https://www.googleapis.com/customsearch/v1?key=" + key 
       + "&cx=*********private key************&q=" + qry + "&alt=json"); 

     // CONNECTION LOGIC 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("Accept", "application/json"); 
     BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream()))); 
     String output; 
     while ((output = br.readLine()) != null) { 
      Pattern pattern = Pattern.compile("(?:(?:https?)+\\:\\/\\/+[a-zA-Z0-9\\/\\._-]{1,})+(?:(?:jpe?g|png|gif))"); 
      Matcher matcher = pattern.matcher(output); 
      if (matcher.find()) { 
       results.append(matcher.group() + "\n"); 
      } 

     } 
     conn.disconnect(); 
     finalResults = removeDup(); 
     return finalResults; 
    } 

    public String removeDup() { 
     String[] tokens = results.toString().split("\n"); 
     StringBuilder resultBuilder = new StringBuilder(); 
     Set<String> alreadyPresent = new HashSet<String>(); 

     boolean first = true; 
     for (String token : tokens) { 

      if (!alreadyPresent.contains(token)) { 
       if (first) 
        first = false; 
       else 
        resultBuilder.append("\n"); 

       if (!alreadyPresent.contains(token)) 
        resultBuilder.append(token + "\n"); 
      } 

      alreadyPresent.add(token); 
     } 
     String result = resultBuilder.toString(); 
     return result; 
    } 

    public String finalResults(String query){ 

     try { 
      psuedomain(query); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return finalResults; 


    } 

} 

Link2Servlet.java

package googleAPI; 

import java.io.IOException; 
import java.util.ArrayList; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@SuppressWarnings("serial") 
@WebServlet("/Link2Servlet") 
public class Link2Servlet extends HttpServlet { 


    public Link2Servlet() { 
     super(); 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 


     String query = request.getParameter("query"); 

     google2 google = new google2(); 

     String test = google.finalResults(query); 



     String[] urlAry = test.split("\n"); 
     ArrayList<String> ar = new ArrayList<String>(); 

     for (int i = 0; i < urlAry.length; i++) { 
      ar.add(urlAry[i]); 
     } 


     request.setAttribute("onelink", ar.get(0)); 


     request.setAttribute("links", ar); 

     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/DefineWord.jsp"); 

     dispatcher.forward(request, response); 

    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

    } 

} 
Verwandte Themen