2
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletTemplate extends HttpServlet {

    public void doGet(HttpServletRequest ***request***,
                      HttpServletResponse ***response***)
    throws ServletException, IOException {
        PrintWriter out = response.getWriter();
    }

}

在上面的代码示例中,请求和响应是否是预定义的,即如果它们是在哪个包中定义的,我可以使用任何其他名称代替它们吗?我还有另一个问题 ServletException 的工作是什么我的意思是我知道它处理异常但我的问题是,是否有必要在每个程序中使用它我想知道它的详细功能

4

2 回答 2

3

您可以使用任何您想要的名称来命名Java 程序中的任何变量。没关系,在接口中实现方法或覆盖超类中的方法的规则规定参数类型必须匹配(相同类型、相同顺序、相同编号),但名称无关紧要 - 完全. 这与 Java EE 无关,它只是编程语言的工作方式。

关于ServletException:快速查看文档会发现异常是doGet()在超类中定义的方法中抛出的HttpServlet,因此任何覆盖该方法的子类也必须抛出它。

您的两个问题都与 Java 中继承和覆盖的工作方式有关,它们不是 Java EE 特定的。我建议您首先研究有关 Java 中的继承和覆盖的文档,在开始编写更复杂的代码之前,您似乎很难掌握 OO 概念如何在 Java 中应用。

于 2013-08-08T20:54:15.590 回答
1

它们只是您覆盖的参数的名称。在本质上,您的类 ServletTemplate 继承了 HttpServlet,那么如果您想为 GET 方法发送的请求提供功能,则必须从父类中覆盖它,变量的名称无关紧要,Java 中覆盖方法的规则是:

  • 保持方法的签名相同,其中方法的签名。
    • 签名由方法的名称和参数列表组成(名称无关紧要,但类型很重要)。
  • 不要定义更严格的访问器修饰符(例如从公共到私有)。

因此,您可以按如下方式实现该方法(如果需要)

public void doGet(HttpServletRequest x,
    HttpServletResponse y) throws ServletException, IOException 
{
    PrintWriter out = y.getWriter();
}

您不能反转以下参数是错误的:

public void doGet(HttpServletResponse response,
     HttpServletRequest request) throws ServletException, IOException 
{
    PrintWriter out = y.getWriter();
}
于 2013-08-08T20:59:47.780 回答