gpt4 book ai didi

java - 为什么这个 ArrayList 将所有内容存储在第一个索引中?如何在 JSP 中从该数组列表动态加载图像 url?

转载 作者:行者123 更新时间:2023-12-01 09:56:21 25 4
gpt4 key购买 nike

构建一个使用 Google 自定义搜索 API 来获取与用户搜索查询相关的图像的 Web 应用程序。因此,如果您搜索“奶酪”,您将得到与奶酪相关的图像。

以下是当前的示例: enter image description here

有两个主要问题。

  1. 为什么所有查询结果都存储在我的 ArrayList 的第一个索引中?我暂时只想要一个链接。
  2. 如何获取这些显示图像的链接?

目前有三段代码可以实现这一点。 一个 JSP、一个 Servlet 和一个 Java 类。

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>

</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:
<%=request.getAttribute("onelink") %>






</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.io.PrintWriter;
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 {

// Get query from user through http parameter
PrintWriter printWriter = response.getWriter();
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
printWriter.println(results);
String[] urlAry = results.split(" ");
ArrayList<String> ar = new ArrayList<String>();
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 = "*********privatekey*********";
URL url = new URL("https://www.googleapis.com/customsearch/v1?key=" + key
+ "&cx=*********privatekey*********&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;
}

}

有什么想法吗?谢谢你的时间。

最佳答案

在 LinkServlet.java 文件的 doGet 方法中,您使用空格“”分割 google.psuedomain 答案,但它们使用新行“\n”连接起来。因此,要么在新行上拆分,要么更改连接以使用空格。更好的是,为什么不使用 google.psuedomain 方法返回 String 的 ArrayList ?

要将所有链接显示为图像,请使用 foreach block ,在其中添加 img 标记,并将 src 属性设置为当前链接。

关于java - 为什么这个 ArrayList 将所有内容存储在第一个索引中?如何在 JSP 中从该数组列表动态加载图像 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37187849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com