我正在学习java中的servlet,我正在尝试捕获URL内容并将其存储到字符串数组中。 Bellow是我的代码,我在一些教程之后放在一起,这些教程似乎不适用于servlet环境(这是我正在尝试的练习的第一部分)。
我在这一行收到错误:
cookies.add(line);
以下是完整的代码:
//package fortune;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import static java.util.Arrays.*;
@WebServlet(name = "FortuneServlet", urlPatterns = {"/"})
public class FortuneServlet extends HttpServlet {
private String [] cookies = null;
//ArrayList<String[]> cookies = new ArrayList<String[]>();
public void geturl(String[] args) {
try
{
URL url = new URL(" http://fortunes.cat-v.org/openbsd/");
// read text returned by server
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String line = in.readLine();
while((line = in.readLine()) != null)
{
cookies.add(line);
line = in.readLine();
}
in.close();
}
catch (java.net.MalformedURLException e) {
System.out.println("Malformed URL: " + e.getMessage());
}
catch (IOException e) {
System.out.println("I/O Error: " + e.getMessage());
}
}
public void init() throws ServletException {
// Add your own code here!
// 1) Open the URL
// 2) Get the contents
// 3) Extract the cookie texts to an array
}
@Override
protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/plain");
if (cookies != null) {
response.getWriter().println(
cookies[new Random().nextInt(cookies.length)]
);
} else {
response.getWriter().println("No luck!");
}
}
}
答案 0 :(得分:3)
private String [] cookies = null;
在这里初始化一个字符串数组并将其设置为null。
cookies.add(line);
在这里,您假设数组有一个add()
方法,但它没有。
您应该使用List
,使用add()
方法,使用已注释掉的解决方案。你不应该使用数组列表,而是使用字符串列表:
List<String> cookies = new ArrayList<>();
然后您可以按照以下方式添加Cookie:
cookies.add(line);
答案 1 :(得分:0)
你不能在数组上使用add()
方法。你必须使用List。而不是
private String [] cookies = null;
使用
private List<String> cookies = new ArrayList<String>();