在捕获url的内容并将其存储到字符串数组中时收到错误“找不到符号”

时间:2015-10-02 08:54:20

标签: java compiler-errors cannot-find-symbol

我正在学习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!");
        }
    }
}

2 个答案:

答案 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>();