图像

Basic Servlet Structure

Servlet 作为服务端的服务,主要处理GET和POST请求,我们编写的Servlet主要继承java web标准中的HttpServlet,至于GET和POST的区别,这是http基本的知识,这里不再累述。

下面是一个Servlet模板代码:

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 {
// Use "request" to read incoming HTTP headers
// (e.g., cookies) and query data from HTML forms.
// Use "response" to specify the HTTP response status
// code and headers (e.g., the content type, cookies).
PrintWriter out = response.getWriter();
// Use "out" to send content to browser.
}
}

我们经常重新定义(非重载)doGet和doPost,具体取决于我们要处理post还是get请求,假如两者你都以相同方式或相同代码来处理,我们完全可以让doGet调用doPost,或者反之亦然。

doGet和doPost都获取两个参数,我们简称request和response,从英文意思你也大概能猜到这两个东东是干嘛的吧。
通过request对象,我们可以获取客户端提交的业务数据(表单数据),http请求头部数据,客户端主机ip等信息;
通过response对象,我们可以指定输出信息,比如http状态(200,404,etc),响应报头(Content-Type,Set-Cookie),另外我们主要是为了给客户端呈现请求过后服务呈现的内容,在response对象里有一个PrintWriter就是干这个的,我们经常用PrintWriter的println方法来显示一些简单的客户端输出。
另外你可能注意到,在这两个方法里都抛出了异常(ServletException and
IOException),你得像其它java方法抛出异常一样在方法参数列表后面声明它们,至于为什么要抛出这两个异常,这是servlet api架构和设计时就存在的,我们暂时只需要按照标准抛出这两个异常就可以了。如果你不想抛这两个异常,你可以把他们删除,然后在我们后面讲到的servlet应用中调用它们看看web容器是否报错或从底层抛出异常。

发表评论