servletsWord文档格式.docx
《servletsWord文档格式.docx》由会员分享,可在线阅读,更多相关《servletsWord文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
进入“开始菜单”的”BEAWebLogic8.1userporject”,启动创建的domain中的”startup”,用来启动WebLogic服务器。
发布一个站点
将配置号的整个站点,拷贝到domain下的applictions中。
若WebLogic服务器不报错,则表示站点可运行,否则要进行调试。
WebLogic的默认监听端口为7001
WebLogic的启动脚本
domains->
mydomains->
startManagedWebLogic.cmd
在Dos窗口中,设置classpath
查看classpath的内容
setclasspath
设置classpath的内容
setclasspath=%classpath%;
新的classpath内容
MIME(MultipurposeInternetMailExtensions)
站点的基本结构
root的命名要注意操作系统是否区分大小写,java服务器默认是区分大小写的。
Servlets类与URL的映射
配置web.xml文件
<
servlet>
<
servlet-name>
Servlet名<
/servlet-name>
servlet-class>
Servlet类的全路径<
/servlet-class>
url-pattern>
URL路径<
/url-pattern>
classes中的Servlets类,可有包路径;
URL不等于目录:
在映射Servlets类的url-pattern时,该url下不一定有目录或文件。
一个简单的servlet
importjavax.servlet.*;
importjavax.servlet.http.*;
importjava.io.*;
importjava.util.*;
//FirstServlet继承HttpServlet,表示该类可处理http请求
publicclassFirstServletextendsHttpServlet
{
staticintaccessCount=0;
//统计访问者的数量
publicvoidservice(HttpServletRequestreq,HttpServletResponseres){
//打印当前对象,不在浏览器中打印
//System.out.println(this);
inti=0;
//访问者的数量=原来的访问者数量+新来的访问者
accessCount=accessCount+(++i);
//设置数据的应答格式为text/html
res.setContentType("
text/html"
);
PrintWriterout=null;
try{
//获取输出流
out=res.getWriter();
out.close();
//关闭输出流
}catch(IOExceptione){
//异常处理
e.printStackTrace();
}
}
};
(1)一个servlet,必须import两个开发包javax.servlet和javax.servlet.http。
这两个开发包,包含在j2ee.jar中。
WebLogic的weblogic.jar包中也有这两个开发包。
同时,要使用这两个开发包,必须先配置classpath。
weblogic.jar在,bea安装目录下的”\weblogic81\server\lib”路径下。
(2)自定义的servlet类,若要能处理http请求,必须继承HttpServlet或者GenericServlet;
(3)自定义的servlet中,用来处理请求的方法是service
(4)doGet()方法,用来处理get请求
(5)doPost()方法,用来处理post请求
//(6)doPut()方法,用来处理put请求
Sevlet的生命周期
四步:
1-若未加载,则先加载;
2-初始化init;
3-提供服务service;
4-销毁destory
初始化可执行的工作
1-完成对资源的初始化;
2-读取初始化参数;
两种级别的初始化参数
ServletConfig
每个Servlet对象都有一个只对应它的ServletConfig对象,该对象由WebContainer创建。
一个Servlet对象<
-------------一个ServletConfig对象
ServletContext
整个webapplication都可使用的参数ServletContext对象,该对象也由WebContainer创建.。
ServletConfig级别的参数只能在web.xml中静态生成。
ServletContext级别的参数,可在web.xml中静态生成,也可由程序动态生成。
getServletConfig():
获取Servlet对象对应的ServletConfig对象。
ServletConfig接口在javax.servlet包中;
getServletContext():
获取webapplication的ServletContext对象。
ServletContext接口在javax.servlet包中。
Servlet对象.getInitParameter(参数名):
获取Servlet对象的servletconfigparameter。
Servlet对象.getServletContext().getAttribute():
获取一个contextparameter
Servlet对象.getServletContext().settAttribute(参数名,对象):
设置一个contextparameter
多线程的并发问题
多线程的并发问题,其实是数据的安全性、完整性问题。
在实际开发中,用“同步”来处理多线程的并发。
不同程序块越短越好。
SingleThreadModel
实现SingleThreadModel接口的Servlet,由多线程处理,并成单线程处理。
SingleThreadModel虽然解决了多线程并发的问题,但是它的性能大大降低。
“同步”机制:
多个线程,只在“同步点”串行执行,其他时间多个线程是并行执行的。
“SingleThreadModel”:
多个线程,对servlet只能排队使用。
一个接一个的。
上述的两种机制,有一个共同点:
都可对多个客户端(线程)提供服务。
还有一种多线程控制方式:
一个servlet只为一个客户端提供服务。
还可以用sygo
Module4:
DistributedModels
分布式计算的特点:
1-不同主机(集群),协同工作;
2-模块重用性高;
3-易移植、扩展、更新、维护
DAO模式
VO模式
DAO模式、VO模式的共同点:
将可变因素,集中处理。
本地通讯和远程通讯
一个进程内部的通讯,称为“本地通讯”;
两个进程间的通讯,称为“远程通讯”。
JavaBean
1-java类
2-可序列化,实现了序列化接口:
java.io.Serializable
3-只要要有一个无参的构造方法
4-JavaBean中,希望对外暴露的属性,都要有set和get方法。
5-完成对数据的映射:
原始数据------对象
DataSource和ConnectionPool
Servlet访问数据库的中间过程
1-Servelt提交信息到Server
2-WebContainer-------DataSource
3-DataSource-----------在ConnectionPool中获取连接
4-DataSource-----------将连接返回给WebContainer
5-WebContainer-------Servelt
在WebLogic的Console上,配置DataSource和ConnectionPool
1-登录console
2-到以下路径下配置
可连接的database有多种类型:
Oracle,Mysql,DB2….
每种database类型都有许多driver可供使用。
通过数据源来连接数据库
Contextct=newContext();
DataSourceds=(DataSource)ct.lookup(数据源);
Connectionconn=ds.getConnection();
除了上面的代码外,作为webapplication,还要在web.xml下进行配置。
Servlet间的互相访问
两种方式:
forward
include
forward
include
资源访问
访问数据库
commonJDBCclient
trhoughJNDI
以下访问资源,通过requestdispatcher
jsp
servlets
以下访问资源,通过JNDI
environmententries
resourceenvironmententries
EJBs
Module5:
PersistentStateinHttpServlets
Http协议
http是无状态的,不能识别不同的客户端。
保存客户端信息的技术
Cookies
Session
Hidden
1-整个浏览器作为客户端程序,一台机器只有一个客户端。
2-Cookies,是记录客户端信息的工具。
3-Cookies做为文件,存放在客户端的机器上。
4-客户端可禁用Cookies。
创建Cookie
Cookiec=newCookie(“name”,”value”);
设置Cookie
res.addCookie(c);
获取Cookie
Cookie[]cookies=req.getCookies();
client对server的第一次访问时,无cookie。
因此req.getCookies()返回null。
browser前后两次请求一个server,就会自动带上cookie。
Windows中,cookie保存在用户目录下的Cookies目录下。
Session是以Browser的一个实例作为client。
因此,打开n个Browser进程,就会有n个客户端。
(原理:
两个进程间的一次连接。
)
如何获取Session
Session是由WebServer创建的。
因此,获取session使用:
req.getSession()。
获取特定的session
(1)Cookie可用
服务器自动在response时,将session的id放在cookie上。
使用getName(),getValue()方法去获取session的id,结果如下:
myCookie.getName():
JSESSIONID
myCookie.getValue():
**************
(2)Cookie禁用
使用URLRewriting(URL硬编码)可创建session的id
response.encodeURL(URL)或response.encodeRedirectURL(URL)
如何操作Session
setAttribute和getAttribute
session的标识符:
session的id。
session的id在session被创建时就自动创建。
server总是试图将session的id,加到response的cookie中,这与客户端是否禁用cookie无关。
新创建的session是无数据的。
如何维护Session
session的销毁用两种方式:
(1)根据设定条件销毁
设置session的最长生存时间:
sessiontimeout
设置session的最长停滞时间:
idletimeout
(2)手动销毁
sesison.invalidate()
用户离开网站时,应该销毁session;
用户长时间没有与server进行交互时,应销毁session
关闭浏览器时,session并不会随之销毁。
session的销毁应在上述情况。
补充:
部署方式:
动态部署和静态部署
动态部署
直接将Applicationcopy到server上。
放在domain下的application目录下。
静态部署
将Application的.war文件,放到server上。
放在domain下的myserver\upload目录下。
*.war--一个webapplication的压缩文件
*.jar---一个j2eeapplication
Module6.FilterProgramming
Filter
Filter是一个过滤器。
Filter的两大作用:
(1)对请求进行分析、预处理
截获请求
对请求预处理
将请求发给组件
(2)拒绝请求
Filter是双向过滤的。
在某些情况下,有些工作可能不是双向过滤的。
filter可又多层,组成一个filterchain。
filter的url-pattern
/*:
表示过滤对该应用程序下的所有资源的请求。
/date:
表示过滤对该路径下的资源的请求。
程序中实现双向过滤
Filterchain
如何组成filterchain
按<
filter-mapping>
标签中的url-pattern来区分,同一url-pattern的filter组成filterchain.
filter在filterchain中的执行顺序
filter的执行顺序,就是<
filter>
标签的排列顺序
如何调整filter的执行顺序
通过调整<
标签的顺序
当访问某一URL时,映射到同一<
标签上的所有filter,都会被执行。
Filter的包装类
使用Filter的包装类,可实现对request,reponse的修改,更新。
比较servlet,filter,eventlistener的实例的创建时间
servlet可在server中预先创建;
servlet可因客户端的第一次请求而创建。
filter,eventlistener只要一部署上webapplication,就会被创建实例。
filter,eventlistener,servlet都是java类,因此它们都可以有构造方法。
EventListener
(1)要有事件处理器,它实现EventListener接口
(2)要向WebContainer注册事件处理器:
在web.xml中部署。
(3)事件由组件触发,WebContainer将事件交给事件处理器处理。
MySQL是否支持数据源方式的update操作?
在booksore程序中,我试图使用BookDAO类的update方法,来更新数据,但是不能成功.
end