如何实现servlet

2017-10-14  本文已影响16人  guanalex

什么是servlet?

Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。简而理解就是web服务器上具有特殊功能的一个小程序。

servlet的运行过程

对于servlet的运行过程是Servlet程序是由web服务器调用,web服务器收到客户端的Servlet访问请求后:
  第一步,Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。 如果是,则直接执行第四步,否则,执行第二步。
  第二步,装载并创建该Servlet的一个实例对象。
  第三步,调用Servlet实例对象的init()方法。
  第四步,创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
  第五步,WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。

下列是图解过程

web浏览器向服务器发出请求 首次请求时建立servlet对象 3创建请求和响应对象 调用servlet方法 读取请求信息并写入响应信息 servlet方法返回 读取响应信息 向web浏览器返回响应

利用工具来创建一个servlet过程

利用工具来创建servlet文件好处就是他会总动帮你写好web.xml文件,下面是用myeclipse 10来创建的过程。

首先实例化一个包 创建servlet文件 自动创建xml文件 xml文件

首先1号的/Hello是我们访问服务器的虚拟目录,当检测到这个路径,就会转到servlet-name标签下找,然后跳转置3号查找servlet是否好友与2号相同的名字,如果有就创建myservlet.HelloServlet对象。

开发servlet的三种方式

第一种,就是创建一个普通类去实现Servlet接口,并重写servlet接口的所有方法,重点是重写service方法,代码如下

public class Demo implements Servlet {         //实现Servlet接口,重写接口全部方法
public void destroy() {
}
public ServletConfig getServletConfig() {
    return null;
}
public String getServletInfo() {
    return null;
}
public void init(ServletConfig arg0) throws ServletException {
}
public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException {
 //向浏览器输出SERVLET字符
    PrintWriter pw = res.getWriter();
    pw.write("<font style='color:red;font-size:111px'>SERVLET</font>");
 }
 }

第二种方法,就是创建一个普通类去继承GenericServlet类,并重写service方法,因为GenericServlet类以实现servlet接口,所以就不用去重写每一个servlet接口的方法。代码如下:

public class Demo extends GenericServlet {
public Demo(){
}
@Override
public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException {
      //向浏览器输出servlet字符
    res.setContentType("text/html;charset=utf-8");
    PrintWriter pw = res.getWriter();
    pw.write("<font style='font-size:111px;color:red'>Servlet</font>");
}
 }

第三种方法,也是创建一个普通类去继承HttpServlet类,并重写doGet或doPost方法,因为HttpServlet类是继承自GenericServlet类,不用在重写service方法,这种放好的好处就是可以分清楚是处理哪一种请求方式。代码如下:

     public class Demo01C extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
     //向浏览器输出一个表单
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter pw = response.getWriter();
    pw.write("<form action='#' method='POST'>");
        pw.write("<table border='2' align='center'>");
            pw.write("<caption><h2>用户登录</h2></caption>");   
            pw.write("<tr><th>姓名</th><td><input type='text' name='username'/></td></tr>");
            pw.write("<tr><th>密码</th><td><input type='password' name='password'/></td></tr>");
            pw.write("<tr><td colspan='2' align='center'><input type='submit' value='提交'/></td></tr>");
        pw.write("</table>");
    pw.write("</form>");
}
 }   
上一篇下一篇

猜你喜欢

热点阅读