-1

私はJavaでサーブレットについて学んでおり、URLコンテンツをキャプチャして文字列配列に保存しようとしています。以下は、サーブレット環境で動作しないように見えるいくつかのチュートリアルに従ってまとめたコードです (これは、私がやろうとしている演習の最初の部分です)。

この行でエラーが発生しています:

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!");
        }
    }
}
4

2 に答える 2

3
private String [] cookies = null;

ここでは、文字列の配列を初期化し、null に設定します。

cookies.add(line);

add()ここでは、配列には存在しないメソッドがあると仮定します。

Listメソッドを持つを使用して、コメントアウトされたソリューションを使用する必要がありadd()ます。配列のリストではなく、文字列のリストを使用する必要があります。

List<String> cookies = new ArrayList<>();

次に、既に行っている方法で Cookie を追加できます。

cookies.add(line);
于 2015-10-02T09:01:22.810 に答える
0

add()配列に対してメソッドを使用することはできません。リストを使用する必要があります。だから代わりに

private String [] cookies = null;

使用する

private List<String> cookies = new ArrayList<String>();
于 2015-10-02T09:01:29.893 に答える