ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【原创】Servlet与JSP

【原创】Servlet与JSP

原创 Linux操作系统 作者:阿-甘 时间:2008-08-29 09:58:18 0 删除 编辑

  熟悉Java的开发人员对Servlet和JSP肯定不陌生。Servlet是可以运行在WEB容器中的Java类,它会接收和处理从客户端发送来的请求,并把处理的结果返回给客户端。在WEB应用的开发中,通过HttpServlet处理客户端(浏览器)的请求。HttpServlet继承于GenericServlet类,实现了Http协议,通常可以通过HttpServlet处理浏览器端的请求,生成动态的WEB页。

  JSP(Java Server Page)是可以执行Java代码和Html标记的WEB页面,在JSP中用户还能够调用传统的Java类、标签库和使用Html标记。实际上,JSP在运行的时候是被编译成Servlet运行的,也就是说JSP是Servlet的扩充。

  一、Servlet和JSP

  对开发人员而言,要响应浏览器发送的Http请求,继承HttpServlet类实现请求处理的方法即可。HttpServlet的类继承关系如图所示:

图 HttpServlet类继承关系

  HttpServlet对Http请求提供了非常好的封装,与Servlet生命周期相关的方法有如下一些:

  1. init

  Init方法在Servlet第一次加载时执行。

  2. service

  当响应请求时,service方法被新的线程在调用,它将会根据请求的性质把请求分发给doGet、doPost方法等处理,一般情况下不要尝试重新实现service方法。

  3. doGet

  当客户端发送GET请求后,服务器端调用Servlet的doGet方法,一般需要重新实现此方法,处理Http的GEF请求。

  4. doPost

  当客户端发送POST请求后,服务器端调用Servlet的doPost方法处理Http的POST请求。一般需要重新实现此方法,处理Http的POST请求。

  如果希望处理GET请求的方式和处理POST请求的方式相同,可以在此方法中调用doGet方法,而实际的实现方法在doGet中。

  5. doPut, doTrace, doDelete等

  处理不是很常用的PUT和TRACE等请求。

  6. destroy

  当容器销毁Servlet时,将会调用此方法。此方法不会在每响应一个请求后调用。

  所有这些方法都不是抽象方法,可以根据实际需求实现某些方法,以处理相应的Http请求。Servlet是基于多线程模式的,而且当处理了一个请求后,Servlet不一定会被销毁,可以想像有一个Servlet的线程池在对Servlet类进行调度,从而提高服务器端的响应效率。

  Servlet是通过请求响应的方式与客户端(例如浏览器)通信的,通过HttpServletRequest接收客户端的请求,通过HttpServletResponse返回客户端的请求,如图所示。

图 Http请求响应方式

  HttpServletRequest和HttpServletResponse是Servlet和浏览器之间通信的手段,Servlet可以通过HttpServletRequest读取浏览器端传来的参数,并通过HttpServletResponse把处理的结果返回浏览器。要处理和响应客户器的请求最少要分成两步:

  1. 读取浏览器端传递过来的参数。

  HttpServletRequest的getParameter和getParameterValues可以接收客户端传递过来的参数,getParameter返回匹配的第一个参数,返回值为String类型的变量,而getParameterValues返回匹配的所有值,返回值为String类型的数组。

  2. 返回浏览器可识别的Html标记。

  HttpServletRequest的getWriter方法可以得到向浏览器传递信息的一个Writer,通过Writer可以发送信息到浏览器端。类似于System.out.println("message..."),可以把信息输出到显示器。HttpServletRequest的Writer可以把信息输出到浏览器。例如:writer.println(htmlStr),htmlStr变量为包含html页面的String类型的变量。

  JSP是Java Server Page的缩写,它是Servlet的扩展,实际运行时,容器通过JVM(Java虚拟机)把JSP重新编译成Servlet运行。JSP中可以由Html标记、Java程序片断(Scriptlet)和标签组成,从而可以实现在JSP页面中操纵数据库、重定向网页以及发送E-mail等功能,实现动态网站的建立。

  JSP存在的目的是分离前台逻辑和后台业务,使开发人员的分工更具体,例如美工可以更关注前台页面的设计,程序员更关注后台具体逻辑的实现。

  二、Servlet和JSP的实现

  在开发WEB应用时,可以简单的把JSP看成是WEB页面,而Servlet是服务器端后台处理的服务程序。下面将通过在JSP页面中输入三个值,在Servlet读取这三个值并输出一个Html页面到浏览器端,JSP代码如下代码所示。

HelloKittyJsp.jsp


Collecting Three Parameters


Collecting Three Parameters



    First Parameter:

    Second Parameter:

    Third Parameter:

  

     
  



  在此JSP页面中有三个Input输入框,分别是param1、param2和param3,可以在此输入框中输入相应的值,单击提交按钮向服务器端Servlet发送请求。JSP页面运行结果如图所示。

图 JSP页面运行结果

  当单击提交按钮后,JSP页面将会把输入的值kitty1、kitty2和kitty3发送给HelloKittyServlet指定的Servlet处理。Servlet代码如下代码所示。

 HttpServlet.java
public class HelloKittyServlet extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html");
  PrintWriter ut = response.getWriter();
  String title = "Reading Three Request Parameters";
  out.println(""
    + "\n" + "

" + title
    + "

\n" + "
    \n" + "
  • param1: "
        + request.getParameter("param1") + "\n"
        + "
  • param2: "
        + request.getParameter("param2")
        + "\n" + "
  • param3: "
        + request.getParameter("param3") + "\n" + "
\n"
    + "");
  
 }
}

  HelloKittyServlet首先取得一个Writer,通过Writer生成一个动态的网页,在此页面中显示出上一个JSP页面输入的值,程序运行后浏览器端的显示结果如图所示。

图 HelloKittyServlet的输出结果

  HelloKittyJsp 和HelloKittyServlet演示了一个Http请求的响应过程,但在开发过程中还会遇到Cookie、隐含对象的使用、数据的作用范围等等的技术细节,因为篇幅的关系没法一一介绍,开发时候可以参考具体的开发书籍。

image001.jpg

image002.gif

image003.jpg

image004.jpg

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13081368/viewspace-438817/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: com.free.rcp.mail.rar
请登录后发表评论 登录
全部评论

注册时间:2008-02-14

  • 博文量
    49
  • 访问量
    246601