是“请求”和“响应”变量或值是否在java ee中预定义?

时间:2013-08-08 20:37:37

标签: java java-ee servlets request response

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的工作是什么我的意思是我知道它处理异常,但我的问题是,是否有必要在每个progaramm使用它我想知道它的细节功能

2 个答案:

答案 0 :(得分:3)

您可以使用您想要的任何名称在Java程序中命名任何变量。无关紧要,在接口中实现方法或从超类中重写方法的规则规定参数 types 必须匹配(相同类型,相同顺序,相同数字),但名称无所谓 - 一点都不重要。这与Java EE无关,它只是编程语言的工作方式。

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

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

答案 1 :(得分: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();
}