什么是servlets
?明白servlet api以及与cgi相比较
?知道在servlet的主要的类的使用。
?能够实现简单的servlets
?什么是servlet?
?一般地,服务器端java应用程序扩展了web服务器的功能。
.在服务器上可以完整地运行
.没有必要下载到浏览器
.代替cgi脚本
?servlets的优势在于:
.方便性与灵活性
.安全性
.执行效率
安全性优势
?在服务器的范围中调用
?能够约束servlet的调用
?在安全体系中能够成为单一(全局)信号的一部分
性能优势
?run in the same context as application server
?执行并且驻留在内存中
?有请求时提前被装入或装入
?通过http请求维持对话
?减轻后置系统的负担
?多线程
?可伸缩于多处理器以及多机种系统(ibm websphere performance pack)
一般的servlet调用
?客户建立一个web服务请求,命名为一个servlet,就如同url的一部分
?web服务器向由一个servlet类的对象所定位的servlet引擎发送一个请求
?servlet引擎调用一个servlet's服务方法:
浏览器(客户)<====url请求=====>web服务器<===>servlet对象(应用程序服务器)
java servlet 应用程序接口api
?jsdk包括了两个包:
javax.servlet
javax.servlet.http
javax.servlet.servlet
| 实现
javax.servlet.genericservlet a
|
javax.servlet.http.httpservlet a
servlet
?表现一项服务
?一般通过url请求
?servlets通过应用程序服务器被装入
?在服务的初始化阶段(如果是预装入)
?在客户端首次请求时
?在servlet重新装入时
servlet的生命周期
?在装入时init()方法被调用
?仅这一次
?当每个客户发出请求时,service()方法被调用
?当它被卸载时,destroy()方法被调用
init()
|
service()
|
destroy()
http servlet
?一个http-specific请求处理器
?加入两个http-specific的方法
?doget()--处理一个get请求(url)
?dopost()--处理一个post请求(html)
?子类代替了这两个信息并且可能代替init()和destroy()
?doget()和dopost()作这些工作并且被service()调用
请求与响应
?service(),doget()和dopost()方法都具体有两个参数:
?httpservletrequest--提供请求数据(参数)httpsession信息等访问。
?httpservletresponse--提供允许servelt向发出请求的客户的响应的服务
?大多数servlet程序是用来读出请求并且写入响应
httpservletresponse
?向客户提供通讯的通道
?允许servlet返回内容并且/或者是错误
?设置内容头(类型,长度......)
?重定向服务器以返回一个指的url
应答协议
?getwriter()
?返回一个输出的printwriter
?setcontenttype(string type)
?为这个响应设置内容的类型
?类型是mime型
?sendredirect(string anurl)
?重定向浏览器到一个新的url
简单的servelt
public class myservlet extends httpservlet {
public void doget( httpservletrequest req,
httpservletresponse res)
throws servletexception, ioexception {
// get stream to output html on!
res. setcontenttype(" text/ html");
printwriter out = res. getwriter();
// send out a simple banner
out. println("< html>< body>");
out. println("< h1> hello world! h1>");
out. println(" body> html>");
}
}
httpservletrequest
?提供客户请求
?"getters"请求的特征,比如:
?请求头部,内容类型,长度,方法....
?请求url如同一个string
?servlet"path"
?客户安全性类型
?访问请求参数(通过name)
?请求中,数据在参与对象中的共享范围
请求协议
?getparmeternames()
?在html页上,返回一个的枚举的参数
?getparmetervalues(string name)
?返回multi-valued参数的值
?getparameter(string name)
?返回一个指定的命名的参数的值
?getreader()
?返回bufferedreader到输入视图
案例:
please fill out this form with your name.
thanks!
please enter your name:
first name: size=" 12" maxlength=" 20">
surname: size=" 15" maxlength=" 25">
thank you! type=" reset">
form>
读入一个post
public void dopost( httpservletrequest req,
httpservletresponse res)
throws servletexception, ioexception
{
…
enumeration enum = req. getparameternames();
while (enum. hasmoreelements()) {
string name = (string) enum. nextelement();
string value = req. getparameter( name);
//… do something with each pair...
}
}
调用servelet
最普遍使用的调用httpservlet是通过类名(classname)比如:
http://www.ibm.com/servlets/com.ibm.a.myservlet
?"load/run by classname"的支持通过另一个称为"invoker"的servlet所提供
?"invoker"servlet试图找到servlet的类的路径
?考虑到会有无名的servlet,一个servlet用这种方法装入运行
在websphere中的servlet
?另一方面,大多数的servlet引擎支持servlet通过名字注册
?被使用的参数可以初始化
?参数约束servlet的行为
?一个servlet可以提供不同的服务(在不同的"short names")
?参数在init()方法中使用
?允许servlet被预装入
?通过requestdispatcher,允许简单定位
?允许servlet被保护
摘要
?我们已经看到servlets的优势大于cgi
?安全性,灵活性,效率
?我们已经介绍了servlet的基本类和接口
?servlets,genericservlet,httpservlet,httpservletrequest,httpservletresponse
visulalage for java 的复习
?首先,需要知道:
?ibm visualage for java 基本概念
?ide
?scrapbook
?debugger
?visualage for java与websphere之间的关系
?visualage for java:
?visual builders
?visual application builder
?enterprise access builder
?data,cics,rmi,c++
? many others
工具:
?ide
?appletviewer
?smart guides
?debugger
?browsers
?scrapbook
类库
?jdk1.1.7
?jdk1.2
?ibm enterprise connectivity
编译器和虚拟机
?incremental
?java to byte code
?byte code to machine code translation
?multiple vms
部件:
? javabeans
?ejb develpement environment
?websphere test environment
技术支持
?integrated team environment
?scaleable
集成开发环境
?组织管理项目,类,方法
?组队开发--聚宝库
?导入及导出类文件到开发环境同java文件一样
?优化编译
?视图:项目,类,界面,所有的问题
?搜索,智慧向导
?剪贴本,debugger
闽公网安备 35060202000074号