gpt4 book ai didi

java - 什么样的参数分配给 'HTTPServletResponse response'

转载 作者:行者123 更新时间:2023-11-28 22:43:23 24 4
gpt4 key购买 nike

我试图了解如何将 response.getWriter() 赋值给 PrintWriter。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws 
ServletException, IOException {

PrintWriter out = response.getWriter();
out.println("");
}

我知道 HTTPServletResponse 的父接口(interface)( super 接口(interface))包含一个 getWriter 方法,它返回一个 PrintWriter 类的实例。但是,执行此代码时,将在“响应”参数中传递什么样的对象。作为响应传递的对象与 PrintWriter 对象之间必须存在某种连接......因为 PrintWriter 类与 HTTPServletResponse 或其父接口(interface)没有任何关系......否则我看不到如何将 PrintWriter 变量分配给响应。

我尝试实现我自己的此功能示例,并创建了一个名为 iDriveable 的接口(interface),其中包含一个返回名为 Vehicle 的类的方法。但我不断收到 nullPointerException

public interface Drivable {

public Vehicle accelerate();

}


public class Vehicle {

public String VehFunction(){
System.out.println("in vehFunction");
return "vehicle class";
}

public void testFunction(Driveable driveable){

Vehicle veh = driveable.accelerate();
veh.VehFunction();

}
public static void main(String[] args) {

Driveable d = null;
Vehicle v = new Vehicle();
v.testFunction(d);

}

}

谢谢

最佳答案

我不确定我是否理解这个问题。作为参数传递的对象是类的实例,由 servlet 容器提供,如下所示:

public class HttpServletResponseImpl implements HttpServletResponse {
private PrintWriter out = new PrintWriter(...);

@Override
public PrintWriter getWriter() {
return this.out;
}

// other fields and methods
}

这是一个对象包含另一个对象的简单情况。

编辑:

解释为什么您的示例不起作用:您将 d(为 null)传递给 v.testFunction()。此方法在此空引用上调用 accelerate()。很明显,您得到了 NullPointerException。您不能在 null 上调用任何方法。

让我们重写您的示例,它太复杂以至于难以理解,甚至比简单的 HttpResponse 情况还要复杂。

假设我们有一个接口(interface) Vehicle:

public interface Vehicle { // an interface, just like HttpServletResponse
Person getDriver(); // returns a Person, just like getWriter returns a PrintWriter
}

还有一个简单的类 Person:

public class Person { // a class, just like PrintWriter
private String name;

public Person(String name) {
this.name = name;
}

@Override
public String toString() {
return name;
}
}

如果没有定义实现它的类,则 Vehicle 接口(interface)的实例不能存在:

public class Car implements Vehicle { // an implementation of Vehicle, just like Tomcat provides an implementation of HttpServletResponse

private Person driver; // contains a person, just like the HttpServletResponse iplementation contains a PrintWriter

public Car(Person driver) {
this.driver = driver;
}

@Override
public Person getDriver() {
return this.driver;
}
}

现在让我们写一个程序:

public static void main(String[] args) {
Person john = new Person("John");
Vehicle vehicle = new Car(john);

doGet(vehicle);
}

public static void doGet(Vehicle vehicle) {
Person p = vehicle.getDriver();
System.out.println(p);
}

在这个例子中:

  • Vehicle 类似于 HttpServletResponse
  • Vehicle.getDriver() 类似于 HttpServletResponse.getWriter()
  • Person 类似于 PrintWriter
  • Car类比于HttpServletResponseImpl,是Tomcat提供的HttpServletResponse接口(interface)的具体实现。
  • 方法main类比Tomcat的内部代码,调用doGet(),类比你servlet的doGet() 方法。

关于java - 什么样的参数分配给 'HTTPServletResponse response',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com