分享

Servlet方法

 iyaya111 2010-08-20
1.Servlet是JSP的底层实现,而且JSP也是通过转译成Servlet后才能执行的。
2.Servlet其实就是一个Java类,所以其创建方法和创建Java类完全相同(但注意:它没有main()方法),所有的Servlet类都必须继承HttpServlet类。HttpServlet接口包含很多方法,除了init()和destroy()方法用来处理Servlet初始化和销毁。还包括一些常用方法,如doGet方法、doPost以及Service方法。
3.Servlet的生命周期 
  Servlet也是一个普通的Java类,所以其一样具有生命周期。Servlet从生成到销毁必须进过如下几个步骤。
 (1)生成Servlet,加载到Servlet Engine(Web容器)中,并通过调用其init()方法来进行初始化。
 (2)通过提供的响应方法来处理客户端的请求。
 (3)调用destroy()方法进行销毁,并通过垃圾收集器进行收集清理。
 
————————————————————————————————————————
————————————————————————————————————————
 
doGet方法:doGet方法用来处理客户端浏览器直接访问和表单get方式提交的表单。

  实例如下(本页面是JSP页面,虽然还没有学到JSP,但我觉得在用Servlet时用JSP已经不是什么

  难题,况且下面这个JSP是很简单的):USERFORM.JSP

<%@ page language="java" contentType="text/html;charset=gb2312"%>

<html>

<head>

   <title>用户表单</title>

</head>

<body>

   <form action="DoGetDemo" method="get">

      用户名:<input type="text" name="username"/><br>

      密码:<input type="password" name="password"/><br>

      <input type="submit" value="提交"/>

      <input type="reset" value="重置"/>

   </form>

</body>

</html>

OK,接下来相对应的Servlet代码如下:

package com.javaweb.ch10;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class DoGetDemo extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              response.setContentType("text/html;charset=gb2312");

              PrintWriter out = response.getWriter();

              request.setCharacterEncoding("gb2312");

              String username = request.getParameter("username");

              String password = request.getParameter("password");

              out.println("<html>");

              out.println("<body>");

              out.println("用户名:" + username + "<br>");

              out.println("密码:" + password);

              out.println("</body>");

              out.println("</html>");

       }

}

好了,现在我来解释一下上面代码的意思:

  第一个JSP文件是用于客户端向服务端提交表单的文件,这个JSP文件很简单,和一个HTML文件大同小异,我们虽然还没有学到JSP,但对如此简单的JSP应该还是会写的,本文件相对于一个HTML文件来讲只有第一行是新东西,第一行一看就知道是什么意思,它无非就是一个JSP的脚本指令,此脚本指令定义了本脚本的使用语言为java,脚本的编码类型及规范为text/html和GB2312,OK!到此为止其余的诸如表单一类的东西都是已经接触过的了,不用再多费口舌。

  第二个文件是一个Servlet类,这几天都在学这个东西,应该对他不会陌生,它用来处理客户端动态页面请求,因为客户端提交的请求是DoGetDemo,所以服务端必须要有此Servlet才能做出正确响应,否则客户端将抛出404错误,好了,接下来因为客户端是以get方式提交表单,所以服务端需要用doGet方法来处理这类请求信息,至于处理的过程及结果大家都能看懂,我就不多说了。

另外说明一下,doGet方法只能用来处理get方式提交上来的表单,不能处理post方式提交的表单。
 
————————————————————————————————————————————
————————————————————————————————————————————

doPost方法是用来处理表单post方式提交的表单,不能处理客户端浏览器直接访问。

实例如下:USERFORM2.JSP

<%@ page language="java" contentType="text/html;charset=gb2312"%>

<html>

<head>

       <title>用户表单</title>

</head>

<body>

       <form action="DoPostDemo" method="post">

              用户名:<input type="text" name="username"/><br>

              密码:<input type="password" name="password"/><br>

              <input type="submit" value="提交"/>

              <input type="reset" value="重置"/>

       </form>

</body>

</html>

接下来,相对应的Servlet代码如下(DOPOSTDEMO.JAVA)

package com.javaweb.ch10;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class DoPostDemo extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              response.setContentType("text/html;charset=gb2312");

              PrintWriter out = response.getWriter();

              request.setCharacterEncoding("gb2312");

              String username = request.getParameter("username");

              String password = request.getParameter("password");

              out.println("<html>");

              out.println("<body>");

              out.println("用户名:" + username + "<br>");

              out.println("密码:" + password);

              out.println("</body>");

              out.println("</html>");

       }

}

解释一下上面代码的意思:

实例代码DOPOSTDEMO.JAVA的主体代码与前面的doGet方法的主体代码相似,只是将代码写在了doPost中,doPost方法能处理Post方式提交的表单,但无法处理浏览器的直接访问。实际上,我这样写的目的就是想说不论是doGet方法还是doPost方法都能处理各自的提交方式,但两个方法之间对同一种请求的处理则是不允许混用。如果要想用一种方法来同时处理客户端的get及post请求请关注下周博文中的service方法。
 
————————————————————————————————————
————————————————————————————————————

service方法用来处理客户端浏览器直接访问和表单以get方式提交以及表单以post方式提交的情况。

首先说表单的写法(这里说的是常规写法):

<form action="ServiceDemo" method="post">

用户名:<input type="text" name="username"/><br>

密码:<input type="password" name="password"/><br>

<input type="submit" value="提交"/>

<input type="reset" value="重置"/>

</form>

相对应的Servlet写法(因为篇幅问题,我省略了包导入语句):

public class ServiceDemo extends HttpServlet {

  protected void service(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=gb2312");

PrintWriter out = response.getWriter();

request.setCharacterEncoding("gb2312");

String username = request.getParameter("username");

String password = request.getParameter("password");

out.println("<html>");

out.println("<body>");

out.println("用户名:" + username + "<br>");

out.println("密码:" + password);

out.println("</body>");

out.println("</html>");

}

}

其实,这个service方法的用法与前面的doGet与doPost方法的用法完全一样,它实现了对这两种提交方式的处理,只要在代码中实现了这个方法,具体的调用过程由Web容器去处理。

  需要说明的是现在很多人都不这样写,而是直接写两个方法,即:doGet与doPost,在其中任意一个方法中调用上一种方法来完成对两种提交方式的处理,这种做法除了增加代码的可读性之外其余我还没有看到有什么优点可言。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多