【引入 ServletResponse 接口】
(1)目前 Servlet 接口的 service 方法参数类型是 PrintWriter。
(2)问题分析:
A、PrintWriter 参数属于负责响应的参数,将来可能还会有其它的参数也负责响应的
B、参数过多的时候,会让 service 方法变的特别的臃肿,
C、我们在这里做一个小的设计,将所有负责响应的参数统一都封装到负责响应的对象中。
D、那么这个负责响应的对象应该由谁来实现呢?当然是 Web 服务器的开发人员,角色转变为 Web 服务器开发人员,代码如下
public class ResponseObject{
private PrintWriter out;
public void setWriter(PrintWriter out){
this.out = out;
}
public PrintWriter getWriter(){
return out;
}
}
(3)以后所有负责响应的参数都会被封装到 ResponseObject 中(但是需要注意的是 ResponseObject 是 Web 服务器开发人员编写的)
A、修改 HandlerRequest 类 servlet.service 方法参数
ResponseObject responseObj = new ResponseObject();
responseObj.setWriter(out);
servlet.service(responseObj);
(4)以上程序编译错误,显然是需要修改 SUN 的 Servlet 规范的,那么我们的角色转变为 SUN 公司,修改 Servlet 接口,代码如下修改 Servlet.java 接口
void service(ResponseObject responseObj);
(5)既然负责响应的 PrintWriter 参数已经被封装到 ResponseObject 类型中了
(6)那么 Servlet 接口 service 方法的参数 PrintWriter 就需要修改为ResponseObject
A、修改 Servlet 接口中 service 方法参数:ResponseObject responseObjvoid service(ResponseObject responseObject);
(7)观察以上代码:
A、Servlet 是 SUN 公司编写的,但是在规范中却关联依赖了北京动力节点编写的ResponseObject,显然是不合理的,稍后我们再做调整。
B、现在该去修改 WebApp 开发人员编写的 LoginServlet 了,因为 LoginServlet 实现了
Servlet 接口
C、修改 LoginServlet.java 实现类
public void service(ResponseObject responseObj){
PrintWriter out = responseObj.getWriter();
out.print(“”);
… …
}