2011-06-28 28 views
0

私はJSPコードでHTTP認証を使用しようとしています。しかし、MyAuthenticatorが型に解決できないというエラーが表示されます。私はJSPページで記述されているコードに対してsytaxが正しいのですか?どんな提案も高く評価されます。はタイプに解決できません

<%@ page language="java" import="java.net.Authenticator,java.net.PasswordAuthentication,java.io.BufferedReader,java.net.*,java.io.*" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<% 

String urlToQuery = request.getParameter("url"); 
System.out.println(" " +urlToQuery); 
//URL url = new URL(urlToQuery); 



//InputStream in = conn.getInputStream(); 

String urlString = ""; 
String username = ""; 
String password = ""; 
Authenticator.setDefault(new MyAuthenticator(username, password)); 
URL url = new URL(urlToQuery); 
URLConnection conn = url.openConnection(); 
InputStream content = (InputStream) url.getContent(); 
BufferedReader in = new BufferedReader(new InputStreamReader(content)); 
String line; 
while ((line = in.readLine()) != null) { 
    System.out.println(line); 
} 
System.out.println("Done."); 

class MyAuthenticator extends Authenticator { 
    private String username, password; 

    public MyAuthenticator(String user, String pass) { 
     username = user; 
     password = pass; 
    } 

    protected PasswordAuthentication getPasswordAuthentication() { 
     System.out.println("Requesting Host : " + getRequestingHost()); 
     System.out.println("Requesting Port : " + getRequestingPort()); 
     System.out.println("Requesting Prompt : " + getRequestingPrompt()); 
     System.out.println("Requesting Protocol: " + getRequestingProtocol()); 
     System.out.println("Requesting Scheme : " + getRequestingScheme()); 
     System.out.println("Requesting Site : " + getRequestingSite()); 
     return new PasswordAuthentication(username, password.toCharArray()); 
    } 
    } 



%> 

<%=line %> 
+0

MyAuthenticatorのインポート宣言はどこですか? – adarshr

+0

@adarshr、私はMyAuthenticatorがオーセンティケータに来ると思うし、オーセンティケータのためのインポートを含んでいます。構文は、私がjspで書いたコードに対して正しいですか? – ferhan

+0

@adarshr、彼はJSP内のクラスを定義しています...さらに下を見ます。 – SJuan76

答えて

0

JSPで内部クラスを定義しないでください。単純なメソッドのようなJSPを考えてみましょう。

A JSPのようなものである(1):内部クラスを定義

public class MyJSP extends Servlet { 
    public void service(HttpRequest request, HttpResponse response) { 
    /** JSP CODE HERE **/ 
    } 
} 

anonimous内部クラスとして実行する必要があります:

Authenticator.setDefault(new Authenticator() { 
    protected getPasswordAuthentication() { 
    System.out.println("Requesting Host : " + getRequestingHost()); 
    System.out.println("Requesting Port : " + getRequestingPort()); 
    ... 
    } 
}); 

ない私は、パラメータを渡すために何をするのか確認してください(私は、最も単純な匿名の内部クラスしか使用していません)。

とにかく、外部のメソッドから使​​用されるものについては、パブリッククラス(独自のファイル内)を使用してこれらの問題をすべて回避します。

(1)これは正確ではありませんが、あなたはそのアイディアを得ています。

+0

返信ありがとうございます..私のコードからの例を与えることで私を説明することができます..私はこれを把握することはできません..私はこれらのものに新しいです..それは私に大きな助けになるだろう.. – ferhan

+1

確かに...すべてを削除し、Javaの基本的な概念(クラス、可視性、これらの概念に慣れている必要があるフレームワークを使用しようとする前に)どういたしまして。 – SJuan76

+0

JSP宣言構造「<%! ... %>」を使用して、JSPページで内部クラスを定義することは可能です。あなたは建設的な答えを保ってください。 –

0

<% ... %> JSPはコードの内容をステートメントとして扱います。したがって、クラスはローカル変数と同じスコープルールに従うローカルクラスになります(つまり、クラスを使用するより早く宣言する必要があります)。私はそれをテストしていない、しかし、あなたがあなたのコードを書き換える場合:

<%@ page language="java" import="java.net.Authenticator,java.net.PasswordAuthentication,java.io.BufferedReader,java.net.*,java.io.*" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<% 

class MyAuthenticator extends Authenticator { 
    private String username, password; 

    public MyAuthenticator(String user, String pass) { 
     username = user; 
     password = pass; 
    } 

    protected PasswordAuthentication getPasswordAuthentication() { 
     System.out.println("Requesting Host : " + getRequestingHost()); 
     System.out.println("Requesting Port : " + getRequestingPort()); 
     System.out.println("Requesting Prompt : " + getRequestingPrompt()); 
     System.out.println("Requesting Protocol: " + getRequestingProtocol()); 
     System.out.println("Requesting Scheme : " + getRequestingScheme()); 
     System.out.println("Requesting Site : " + getRequestingSite()); 
     return new PasswordAuthentication(username, password.toCharArray()); 
    } 
    } 

String urlToQuery = request.getParameter("url"); 
System.out.println(" " +urlToQuery); 
//URL url = new URL(urlToQuery); 



//InputStream in = conn.getInputStream(); 

String urlString = ""; 
String username = ""; 
String password = ""; 
Authenticator.setDefault(new MyAuthenticator(username, password)); 
URL url = new URL(urlToQuery); 
URLConnection conn = url.openConnection(); 
InputStream content = (InputStream) url.getContent(); 
BufferedReader in = new BufferedReader(new InputStreamReader(content)); 
String line; 
while ((line = in.readLine()) != null) { 
    System.out.println(line); 
} 
System.out.println("Done."); 





%> 

<%=line %> 

その後MyAuthenticatorは、あなたのコード内で解決可能でなければなりません。

コードを読みやすくするために、Javaクラスを別のファイルに移動することを検討してください。

関連する問題