Chinaunix首页 | 论坛 | 博客
  • 博客访问: 25006
  • 博文数量: 25
  • 博客积分: 1010
  • 博客等级: 少尉
  • 技术积分: 270
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-22 20:04
文章分类

全部博文(25)

文章存档

2011年(1)

2009年(24)

我的朋友
最近访客

分类: Java

2009-08-14 17:14:27

                  JSP应用技术
本课程主要介绍Java在表现层的两项技术:Java ServletJava Server Pages。它们是重要的Java技术,对这两项技术的深入了解,对学习Java Web框架技术有极大的帮助。
 
第一章 Servlet
JSP技术问世之前,ServletApplet分别是Java在服务器端和客户端所推广的解决方案,两者相辅相成,各占有重要的地位。JSP的出现,弥补了Servlet
在开发Web系统不足的地方。要想对JSP有更深入的了解,Servlet是最基本的内容,只要能够把Servlet学好,就更能够理解JSP技术底层运作的方式。
 
第一节   Servlet简介
19973Sun Microsysttems公司所组成的JavaSoft部门将Servlet API定案以来,推出了Servlet API 1.0。就当时功能来说,Servlet所提供的功能包含了当时的CGINetscape Server APINSAP)之类产品的功能。
发展至今,Servlet API的最新版本为2.4版。它依旧是一个具有跨平台特性、纯Java的服务端程序。Servlet不只限于HTTP协议,开发人员可以利用Servlet自定义或延伸任何支持JavaServer
Servlet有以下优点:
l        可移植性
Servlet是利用Java语言开发的,因此,延伸Java在跨平台上的表现,Servlet
在任何平台上执行。借助于Servlet的优势,就可以真正达到Write onceRun Anywhere的境界。
l        强大的功能
Servlet能够完全发挥Java API的威力,包括网络和URL存取、多线程、RMI
等。
l        高性能
Servlet在加载执行之后,其对象实体通常一直驻留在内存中。默认情况下
Servlet是以单实例多线程的方式工作,一个新请求到达后,Servlet实例开启一个新的线程服务这个请求。最后补充一点,就是Servlet在执行时,不是一直留在内存中,服务器会自动将停留时间过长一直没有执行的Servlet从内存中移除,不过有时候也可以自行写程序来控制。至于停留时间的长短通常和选用的服务器有关。
l        安全性
Servlet也有类型检查的特性,并且利用Java的垃圾收集与没有指针的设计,
使得Servlet避免内存管理的问题。
    由于在Java的异常处理机制下,Servlet能够安全地处理各种错误,不会因为发生程序上逻辑错误而导致整体服务器系统的毁灭。
第二节   第一个Servlet程序
 
javax.servlet.*javax.servlet.http.*是必须导入的。
javax.servlet.*:存放与HTTP协议无关的一般性Servlet类。
javax.servlet.http.*:除了继承javax.servlet.*之外,还增加与HTTP协议有关的功能。
所有Servlet都必须实现javax.servlet.Servlet接口,但是通常我们都会从javax.servlet.GenericServletjavax.servlet.http.HttpServlet选择其一来实现。若写的Servlet程序和HTTP协议无关,那么必须继承GenericServlet类:若有关,就必须继承HttpServlet类。
javax.servlet.*里的ServletRequestServletResponse接口提供存取一般的请求和响应;而javax.servlet.http.*里的HttpServletRequestHttpServletResponse接口,则提供HTTP请求及响应得存取服务。
第三节   Servlet生命周期
Servlet容器可以在同一个JVM上执行所有Servlet,所以,Servlet之间可以有效地共享数据,但是Servlet本身的私有数据亦受Java语言机制保护。
Servlet从创建到销毁的流程如图1-1所示
(1)   产生Servlet,加载到Servlet容器中,然后调用init()方法进行初始化。
(2)   以多线程的方式处理来自客户端的请求。
(3)   调用destroy()来销毁Servlet,进行垃圾收集。
 

Servlet
调用init()进行初始化
Service1
Service2
 
Service3
 
调用destory()进行初始化
Thread1
Thread2
Thread3
文本框: 时      间

                        1-1 Servlet生命周期
1.      加载和实例化
当容器一开始启动,或是客户端发出请求服务时,容器会负责和实例化一个
Servlet
2.      初始化
Servlet加载并实例化后,容器必须初始化Servlet。初始化的过程主要是读
取配置信息(例如JDBC连接)或其他须执行的任务。我们可以借助ServletConfig对象取得容器的配置信息,例如:
其中ueser为初始化的参数名称:browser为初始化的值。因此,可以在HelloServlet程序中使用ServletConfig对象的getInitParameter(“user”)方法来取得browser
3.      处理请求
Servlet被初始化后,就可以开始处理请求。每一个请求由ServeletRequest
对象来接受请求;而ServletResponse对象响应该请求。
4.      服务结束
当容器没有限定一个加载的Servlet能保存多长时间,因此,一个Servlet
例可能只在容器中存活几毫秒,或是其他更长的任意时间。一旦destory()方法被调用时,容器将移除该Servlet,那么它必须释放所有使用中的任何资源,若容器需要再使用该Servlet时,它必须重新建立新的实例。
第四节   Servlet范例程序
为了说明Servlet和网页是如何沟通的,在此举一个范例程序。这个范例程序分为两个部分:MyHtml.htmlMyServlet.java
MyHtml.html中,用户可以填入姓名,然后按下【提交】后,将数据传到MyServlet.java做处理,而MyServlet.java负责将接收到的数据显示到网页上。
 
MyHtml.html   
MyHtml.html的执行结果如图1-2所示
 
MyServlet.java
   MyServlet.java的程序中,可以发现Servlet是利用HttpServletRequest类和getParameter()方法来取得由网页传过来的数据。不过数据通过HTTP协议传输时会被转码因此在接收时,必须再做转码的工作,才能够正确地接收到数据。下面这段程序就是做转码的工作:
   设定web.xml
执行,结果如图1-3所示。
1-3 MyHtml.html按下【提交】后,经过MyServlet.java处理后的结果
阅读(315) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~