JSP展望文档格式.docx
- 文档编号:17031698
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:13
- 大小:115.95KB
JSP展望文档格式.docx
《JSP展望文档格式.docx》由会员分享,可在线阅读,更多相关《JSP展望文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
Java语言通过提供防止内存泄漏的方法,在内存管理方面大显身手。
加之,JSP为应用程序提供了更为健壮的意外事件处理机制,充分发挥了Java的优势。
关于JSP的技术难点,主要有三点,首先是Java与数据库连接方面,由于Java对数据库支持的限制,读者需要使用JDBC来连接数据库。
加上对SQL语言的不熟悉,这给初学者造成了一种困难,请读者熟练掌握了JDBC的用法。
1.连接数据库
数据库连接对动态网站来说是最为重要的部分,在与后端数据库连接时可以采用ODBC或JDBC技术。
虽然ODBC作为传统的连接数据库的手段是一种选择,但是ODBC有些致命缺陷,从而使它无法胜任JSP的请求。
为了使程序在具有安全性、完整性、健壮性的同时,可以方便地移植,采用JDBC连接数据库更合适一些。
JDBC是一种可用于执行SQL语句的JavaAPI,它由一些Java语言写的类、界面组成,使开发人员可以用纯Java语言编写完整的数据库应用程序。
通过使用JDBC,可以很方便地将SQL语句传送到几乎任何一种数据库。
也就是说,可以不必写一个程序访问Sybase,写另一个程序访问Oracle,再写一个程序访问Microsoft的SQLServer。
用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统。
在本地数据库程序使用Microsoft的Access等数据库时,可以使用Sun公司开发的JDBC-ODBC桥,借用此技术JSP程序就可以访问带有ODBC驱动程序的数据库。
这样既保留JDBC的优点,又可以使用Microsoft提供的ODBC数据源与Access连接。
不管对方是何种数据库,只要有ODBC接口就可以直接使用JDBC-ODBC桥与数据库连接,而无需因为后端数据库的改变而改动相应的程序代码,实现了应用层与数据库层的完美分离。
如果需要变后端数据库为MySQL,只需在ODBC数据源中安装MySQL的驱动程序之后,就可以直接使用MySQL数据库了。
2.内置对象
JSP难点之二是内置对象的使用。
在实现网站的时候,由于客观需要,为了方便区分本地局域网用户与远端连上来的用户,并提供相应的权限,可以采用内建的组件Request来捕获每一个连到服务器上的用户的IP地址,通过比较之后给出相应的权限。
这样做到本局域网内用户可以使用网站内所有公开的和不对外公开的资源。
还可以将现有的方法加以改进,将各种IP地址输入到数据库中并且赋予不同的IP地址不同的权限,以完整地控制用户使用网站资源。
会话状态维持是Web应用开发者必须面对的问题。
为了了解用户是否还在线,使用内建的Session组件,通过给每个登录用户一个Session变量,可以在用户非正常离开网站之后,关闭该用户使用的资源,达到节省内存,提高服务器性能的目的。
在JSP中还提供了Cookie类,其构造器有两个参数,分别代表Cookie的名称和值。
Cookie类中提供了各种方法设置Cookie的属性,如通过setMaxAge方法可以设置Cookie的生存时间。
若生存时间为负值,代表浏览器关闭Cookie,即消失;
生存时间为0,代表删除Cookie;
生存时间为正数,代表Cookie存在多少秒。
可以用Cookie临时保存用户的账号和口令,JSP可随时读取,验证用户的合法性。
可以将用户的浏览状态保存在Cookie中,下次用户再访问网页时,由JSP向浏览器显示个性化页面。
3.转换Unicode编码
在许多JSP页面的调试过程中都碰到过由于汉字编码与Unicode编码转换引起的问题,如在浏览器中看到的JSP页面中的汉字都是乱码、JSP页面无法正常显示汉字、JSP不能接收表单提交的汉字、JSP数据库读写无法获得正确的内容等等,这是因为现在大部分具有国际化特征的软件核心字符处理都是以Unicode为基础的,在软件运行时根据当时“Locale/Lang/Codepage”设置确定相应的本地字符编码设置,并依此处理本地字符,所以应该在处理过程中实现Unicode和本地字符集的相互转换,甚至以Unicode为中介的两个不同本地字符集的相互转换。
这种方式在网络环境下被进一步延伸,任何网络两端的字符信息也需要根据字符集的设置转换成可接受的内容。
由于IE默认字符集为GB2312,然而Windows默认为GBK,Java则默认为Unicode,所以如果不通过一定的转换,直接在GB2312字符集上显示从GBK或Unicode得到的页面将是一片乱码。
Java语言采用Unicode处理字符,但从另一个角度来说,在Java程序中也可以采用非Unicode,重要的是保证程序入口和出口的汉字信息不失真。
如完全采用ISO-8859-1来处理汉字也能达到正确的结果,经过转换之后并将网页字符集强制设为GB2312字符集显示,就能够正常显示汉字了。
11.2Servlet技术
Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面。
Servlet扩充了WebSERVER的功能,并且它不受安全性的限制,具有Java程序的全部功能,能够访问并读写文件、改变系统特性等。
JavaServlet具有面向对象的优点,因此通过创建可重复使用的组件将加快应用开发的速度。
另一个优点是它占用很少密集资源。
JavaServlet与JSP关系密切,首先JSP页面在执行时要编译成Servlet,然后它能够像传统的CGI脚本一样扩展Web服务器功能。
JSP与Servlet结合的技术充分利用了二者的优点:
JSP技术主要用来表现页面,而Servlet技术主要用来完成大量的逻辑处理,也就是说,JSP主要用来发送前端的用户,Servlet主要响应用户的请求,完成请求的逻辑处理。
JavaServlet有着十分广泛的应用。
不仅能简单的处理客户端的请求,借助Java的强大的功能,使用Servlet还可以实现大量的服务器端的管理维护功能,以及各种特殊的任务,比如,并发处理多个请求,转送请求,代理等。
1.Servlet的运行环境
典型的Servlet运行环境有JSWDK,Tomcat,Resin等,这几个都是免费的软件,适合用来学习Servlet和JSP。
它们都自带一个简单的HTTPServer,只需简单配置即可投入使用,也可以把它们绑定到常用的Web服务器上,如Apache,IIS等,提供小规模的Web服务。
还有一些商业的大中型的支持Servlet和JSP的Web服务器,如JRun、WebSphere、WebLogic等等,配置比较复杂,并不适合初学者。
但是功能较为强大,有条件的读者可以一试。
2.Servlet的编译
Servlet的编译和一般的Java程序是完全一样的,在使用javac编译的时候不需要任何特殊的参数。
只要Servlet的编写是正确的,编译完后生成的Class文件就可以做为Servlet来运行了。
11.2.1Servlet的生命周期
Servlet遵循严格的生命周期。
Servlet的生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。
Servlet的生命周期如图11.1所示。
图11.1Servlet的生命周期
在每个Servlet实例的生命中有三种类型的事件,这三种事件分别对应于由Servlet引擎所唤醒的三个方法:
1.Init():
当Servlet第一次被装载时,Servlet引擎调用这个Servlet的init方法,只调用一次。
如果某个Sevlet需要特殊的初始化需要,那么Servlet编写人员可以重写该方法来执行初始化任务。
如果某个Servlet不需要初始化,那么默认情况下将调用父类的init方法。
系统保证,在init方法成功完成以前,不会调用Servlet去处理任何请求。
2.Service():
这是Servlet最重要的方法,是真正处理请求的地方。
对于每个请求,Servlet引擎将调用Servlet的service方法,并把Servlet请求对象和Servlet响应对象作为参数传递给它。
3.Destroy():
这是相对于init的可选方法,当Servlet即将被卸载时由Servlet引擎来调用,这个方法用来清除并释放在init方法中所分配的资源。
Servlet的生命周期可以被归纳为以下几步:
(1)装载Servlet,这一项操作一般是动态执行的。
然而,Servlet通常会提供一个管理的选项,用于在Servlet启动时强制装载和初始化特定的Servlet。
(2)Server创建一个Servlet实例。
(3)Server调用Servlet的init方法。
(4)客户端请求到达Server。
(5)Server创建一个请求对象。
(6)Server创建一个响应对象。
(7)Server激活Servlet的service方法,传递请求和响应对象作为参数。
(8)Service方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息。
(9)service方法使用响应对象的方法。
将响应传回Server,最终到达客户端。
Service方法可能激活其他方法以处理请求。
如doGet,doPost或其他程序员自己开发的方法。
(10)对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此servlet的service方法,将这两个对象作为参数传递给它,如此重复以上的循环,但无需再次调用init方法,Servlet一般只初始化一次。
(11)当Server不再需要Servlet时,比如当Server要关闭时,Server调用Servlet的destroy方法。
11.2.2Servlet与表单的交互
表单是HTML中使用最广泛的传递信息的手段。
搞清楚Servlet与表单的交互,就在客户端与服务器之间架起了一座桥梁。
Servlet使用HttpServlet类中的方法与表单进行交互。
在HttpServlet类中有几个未完全实现的方法,可以自己定义方法的内容,但是必须正确使用方法名称以使HTTPServer把客户请求正确地映射到相应的函数上。
(1)doHeader用于处理HEADER请求
(2)doGet用于处理GET请求,也可以自动的支持HEADER请求
(3)doPost用于处理POST请求
(4)doPut用于处理PUT请求
(5)doDelete用于处理DELETE请求
(6)HttpServlet的Service方法,当它接收到一个OPTIONS请求时,它会自动调用doOptions方法,当接收到一个TRACE请求时调用doTrace。
DoOptions默认执行方式是自动决定什么样的HTTP被选择并返回哪个信息。
在使用这些方法时必须带两个参数。
第一个包含来自客户端的数据HttpServletRequest。
第二个参数包含客户端的相应HttpServletResponse。
HttpServletRequest对象提供请求HTTP头部数据,也允许获取客户端的数据。
怎样获取这些数据取决于HTTP请求方法。
不管何种HTTP方式,都可以用getParameterValues方法返回特定名称的参数值。
(HttpServletRequest和HttpServletResponse接口分别继承于ServletRequest和ServletResponse接口,getParameterValues和getWriter方法都是其父类接口中的方法)。
对于HTTP请求中的GET方式,getQueryString方法将会返回一个可以用来解剖分析的参数值。
对于用HTTP请求中的POST方式以及PUT和DELETE请求方式,HttpServletRequest有两种方法可以选择:
如果是文本数据,可以通过getReader的方法得到BufferedReader获取数据;
如果是二进制数据,可以通过getInputStream方法得到ServletInputStream获取数据。
相应于客户端,一个HttpServletResponse对象提供返回数据给用户的两个方法:
一种是用getWriter方法得到一个PrintWriter,返回文本数据;
另一种方法是用getOutputStream方法得到ServletOutputStream,返回二进制数据。
在使用Writer或OutputStream之前应先设置头部(HttpServletResponse中有相应的方法),然后用Writer或OutputStream将相应的主体部分发给用户。
完成后要关闭Writer或OutputStream以便让服务器知道相应已经结束。
例如:
PrintWriterout=response.getWriter();
out.println("
RequestURI:
"
+request.getRequestURI()+"
<
br>
"
);
11.2.3Servlet控制会话
会话状态的维持是开发Web应用所必须面对的问题,有多种方法可以来解决这个问题,如使用Cookies,hidden类型的表单域,或直接把状态信息加到URL中等。
Servlet本身也提供了一个HttpSession接口来支持会话状态的维持,在这里主要介绍基于这个接口的会话状态的管理。
JavaServlet定义了一个HttpSession接口,实现Session的功能,在Servlet中使用Session的过程如下:
(1)使用HttpServletRequest的getSession方法得到当前存在的session,如果当前没有定义session,则创建一个新的session,也可以使用方法getSession(true)。
(2)写session变量。
可以使用方法HttpSession.setAttribute(name,value)来向Session中存储一个信息。
也可以使用HttpSession.putValue(name,value),但这个方法已经过时了。
(3)读Session变量。
可以使用方法HttpSession.getAttribute(name)来读取Session中的一个变量值,如果name是一个没有定义的变量,那么返回的是null。
需要注意的是,从getAttribute读出的变量类型是Object,必须使用强制类型转换。
Stringuid=(String)session.getAttribute("
uid"
(4)关闭session,当使用完session后,可以使用session.invalidate()方法关闭session。
但是这并不是严格要求的。
因为Servlet引擎在一段时间之后会自动关闭seesion。
例如:
HttpSessionsession=request.getSession(true);
//参数true是指在没有session时创建一个新的
Datecreated=newDate(session.getCreationTime());
//得到session对象创建的时间
ID"
+session.getId()+"
//得到该session的id,并打印
Created:
+created+"
//打印session创建时间
session.setAttribute("
UID"
"
12345678"
//在session中添加变量UID=12345678
Name"
Tom"
//在session中添加变量Name=Tom
11.3MVC模型
JSP技术可以应用于各种事务,从最简单的Web应用程序到功能齐全的企业级应用程序。
当然,在各种应用中,JSP占的比例大小不一。
在这一节中,我们将介绍一种同时用于简单应用程序和复杂应用程序的设计模型,称为MVC(MODEL-View-Controller,模型-视图-控制器)模型。
11.3.1常用三层结构模式
随着数据库技术和Web技术的发展,我们常采用三层结构模式来开发动态网站。
学习MVC模式之前,我们先了解一下三层结构模式的实施框架,如图11.2所示。
图11.2基于Java技术的Web应用体系结构
(1)浏览器层
浏览器是三层结构中的第一层。
利用Web浏览器,可以使客户面对一个统一的应用界面,降低对客户端应用平台要求。
(2)中间层
中间层主要由Web服务器和Java应用程序组成。
以往的Web服务器主要是提供文件服务器或者邮件服务器,现在它正在成为一个独立的应用系统开发及运行环境,使以前面向用户的复杂性从客户端转移到了Web服务器端,以满足配置相对较低的客户机的要求。
Java应用程序主要是采用了Java流行的开发Web动态页面的三种技术:
JSP、Servlet、JavaBeans。
Web服务器根据用户的请求,调用相应的应用程序,生成HTML或者JSP页面,返回给用户。
(3)后台数据库服务器和JDBC
数据库服务器负责管理数据库,处理数据更新,完成数据查询要求和运行存储过程。
Web服务器与数据库服务器的分离,从而实现了表示层(浏览器)、组件层(中间层)、数据库服务层的三层分布式结构。
在应用程序与数据库服务器的交互中,采用Java通用的JDBC技术。
11.3.2MVC模型
MVC首先是由Xerox(施乐)公司在80年代后期发表的一系列论文中提出的。
使用MVC的关键点是将逻辑分成三个各自独立的单位:
模型、视图和控制器。
在一个服务器应用程序中,我们通常将应用程序分成以下三部分:
商务逻辑、外观呈现和请求处理。
术语“商务逻辑(businesslogic)”指的是对应用程序的数据进行处理。
MVC模式把数据处理、程序输入输出控制以及数据表示分离开来,并且描述了不同部分的对象之间的通信方式,使它们不必卷入彼此的数据模型和方法中,使程序结构变得清晰而灵活。
由JSP、Servlet和JavaBeans实现的基于J2EE的MVC2结构的出现使得MVC模式广泛地应用于大型的Web项目的开发中。
MVC模式包括三个部分:
模型(Model)、视图(View)和控制器(Controller),分别对应于内部数据、数据表示和输入输出控制部分。
一个更为合理的缩写应该是MdMaVC,其中Md指DomainModel,是分析员和设计师所面对的部分,是对问题的描述;
Ma指ApplicationModel,用来记录存在的视图,获取视图信息和向视图发送消息。
MVC模式的一般结构如图11.3所示。
图11.3MVC模式各部分的关系和功能
1.模型(Model)
模型是问题与相关数据的逻辑抽象,代表对象的内在属性,是整个模型的核心。
它采用面向对象的方法,将问题领域中的对象抽象为应用程序对象,在这些抽象的对象中封装了对象的属性和这些对象所隐含的逻辑。
模型的作用如下:
(1)抽象应用程序的功能,封装程序数据的结构及其操作。
(2)向Controller提供对程序功能的访问。
(3)接受View的数据查询请求。
(4)当数据有变化时,通知对此数据感兴趣的View。
2.视图(View)
视图是模型的外在表现,一个模型可以对应一个或者多个视图,如图形用户界面视图、命令行视图、API视图。
视图具有与外界交互的功能,是应用系统与外界的接口。
一方面它为外界提供输入手段,并触发应用逻辑运行。
另一方面,它又将逻辑运行的结果以某种形式显示给外界。
当Model变化时,它作出相应两种变化,分别为两种方法。
Push方法,让View在Model处注册,Model在发生变化时向已注册的View发送更新消息。
Pull方法,View在需要获得最新数据时调用Model的方法。
View的作用如下:
(1)对数据的表现部分进行抽象。
(2)将数据展现给用户,获得用户输入。
(3)将用户输入转发给Controller。
(4)当接到来自Model的“数据已更新”通知后,更新显示信息。
3.控制器(Controller)
控制器是模型与视图的联系纽带,控制器提取通过视图传输进来的外部信息,并将用户与View的交互转换为基于应用程序行为的标准业务事件,再将标准业务事件解析为Model应执行的动作(包括激活业务逻辑和改变Model的状态)。
同时,模型的更新与修改也将通过控制器来通知视图,从而保持各个视图与模型的一致性。
Controller的作用如下:
(1)抽象用户交互和应用程序语义的映射。
(2)将用户输入翻译成应用程序的动作,并转发Model。
(3)根据用户输入和Model对程序动作的输出,选择适当的View来展现数据。
4.MVC三部分之间的关系
如同一般的程序结构一样,MVC有输入、处理、输出三个部分:
Controller对应于输入;
Model对应于数据表示和数据处理;
View对应于输出。
三部分之间的关系如图11.4所示。
(1)模型—视图。
模型处理数据,并根据其状态变化的情况将要显示的数据提供给视图,视图将数据组织成各种显示样式表现给用户,它们之间是一种典型的Observer模式。
(2)控制器—视图。
控制器根据用户输入直接调用不同视图改变响应流程,或与模型交互后获得需要显示的数据,再调用视图改变响应流程,它们之间是一种典型的Strat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSP 展望