JSP 无法解析为类型

8yoxcaq7  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(268)

我尝试在我的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 %>
brtdzjyr

brtdzjyr1#

不要在JSP中定义内部类。将JSP视为简单方法。
JSP类似于(1):

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

定义内部类应该作为匿名内部类来完成:

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

不确定我会做什么来传递参数(我只使用了最简单的匿名内部类)。
无论如何,对于要从外部方法使用的任何东西,我都会使用一个公共类(在它自己的文件中),从而避免所有这些麻烦。
(1)不完全是这样,但你明白了。

n53p2ov0

n53p2ov02#

<% ... %>导致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类移到一个单独的文件中,以提高代码的可读性。

相关问题