有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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


共 (2) 个答案

  1. # 1 楼答案

    您可以使用任意名称命名Java程序中的任意变量。没关系,在接口中实现方法或从超类重写方法的规则规定参数类型必须匹配(相同的类型、相同的顺序、相同的编号),但名称根本不重要。这与JavaEE无关,只是编程语言的工作方式

    关于ServletException:快速查看documentation会发现异常正在doGet()超类中定义的doGet()方法中抛出,因此任何重写该方法的子类也必须抛出异常

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

  2. # 2 楼答案

    它们只是你夸大的论点的名称。在essentia中,您的类ServletTemplate继承了HttpServlet,如果您想为GET方法发送的请求提供功能,必须从父类重写它,变量的名称无关紧要Java中重写方法的规则有:

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

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

    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();
    }