kettas笔记ServletWord文档下载推荐.docx
- 文档编号:3061445
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:24
- 大小:96.75KB
kettas笔记ServletWord文档下载推荐.docx
《kettas笔记ServletWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《kettas笔记ServletWord文档下载推荐.docx(24页珍藏版)》请在冰点文库上搜索。
在编写Servlet时必须实现一个接口
3)每个Servlet都要对应一个特定的URL,Tomcat根据这个对应关系,来调用Servlet。
开发Servlet步骤:
1)按照接口实现Servlet的功能。
2)为Servlet分配URL(部署)
按照接口实现Servlet的功能
javax.servlet.Servlet
a)init用于初始化Servlet
b)Service用于处理请求(实现业务功能)
c)destroy销毁一个Servlet
编译:
需要用到两个jar包需要配置到CLASSPASE中。
TOMCAT/lib/servlet-api.jar和TOMCAT/lib/jsp-api.jar
部署Servlet
1)创建标准web应用的目录格式:
TOMCAT/
|-webapps所用的应用都存在这里
|->
myapp:
应用的根。
a.html
WEB-INF:
区分大小写
classes:
类文件及package
lib:
保存jar包.
web.xml部署描述符
web.xml:
是程序员提供给tomcat的使用说明书。
用来描述Servlet的用法(与url的对应关系)。
http:
//localhost:
8080/myapp/showTime
1)浏览器向tomcat发送请求.
2)Tomcat接受请求.
3)Tomcat查看web.xml,在这个文件中找到对应的Servlet
4)初始化Servlet对象,调用service方法。
开发Servlet的一般性步骤
1,编写Servlet类
1.1写一个类,实现javax.servlet.Servlet接口
1.2业务逻辑写在service(…)方法中.
1.3对源码进行编译(在CLASSPATH中导入jar包)
2,部署Servlet
2.1创建web应用的目录结构.
TOMCAT/
|-webapps/
|-myapp
|-WEB-INF/
|-classes
|-lib
|-web.xml
2.2将编译得到的类文件和package,拷贝到classes中.
2.3修改web.xml对Servlet进行配置.
<
web-appxxxxxxx>
<
servlet>
<
servlet-name>
随便取名<
/servlet-name>
servlet-class>
package.ClassName<
/servlet-class>
/servlet>
servlet-mapping>
定义过的名字<
url-pattern>
/showTime<
/url-pattern>
/servlet-mapping>
/web-app>
3重启tomcat,对servlet进行测试.
如何通过浏览器访问Servlet
通过在浏览器的地址栏输入地址
8080/appname/urlpattern
通过网页上的超级链接访问
<
ahref=”/myapp/a.html”>
xxxxxx<
/a>
ahref=”/myapp/urlpattern”>
3)通过表单访问Servlet.
formaction=”/myapp/showTime”>
inputtype=”text”name=”username”/>
inputtype=”submit”/>
/form>
Servlet中如何处理客户端提交的数据
request.getParameter(“参数名称”);
参数名称取决于输入框的name属性。
返回String类型的值
改Tomcat端口
Tomcat-->
conf-->
server.xml.找到8080端口,再修改
HttpServlet
HttpServlet是GenericServlet的子类,在这个子类中增加了对Http协议的特殊支持
客户端向服务器提交参数的手段.
1)通过表单
2)通过URL也可以携带参数.
http:
8989/myapp/login?
a=1234&
b=4567
相当于向服务器提交了两a,b个参数,参数值分别是1234和4567
Http协议中客户端与服务器的通信方式
客户端可以通过两种方法向服务器发送请求:
post:
只有在form表单中特别声明了action时,才会是post,其他时候都是get
get:
地址栏,超链接,表单默认的
通过Get方式提交的表单,在地址栏上能显示表单内容.
通过Post方式提交的表单,在地址栏上不显示表单内容
使用Get方式发送参数时,参数的总长度有限制.
通过Post方式发送参数时,参数长度没用限制.
在HttpServlet中,可以区分Get和Post两种请求,可以对两种请求进行分别处理。
service(….)
doGet,doPost
http:
8989/myapp/http?
a=12345&
b=67890
URL:
8989/myapp/http
URI:
/myapp/http
ServletPath:
/http
QueryString:
a=12345&
doGet,doPost替换serviceimplementsServlet(service)
ClientTomcat->
1号service:
不带Http的参数转化为带http的参数–>
2号service:
调用getMethod,获得客户端请求是Get还是Post–>
doGet/doPost
业务逻辑与显示逻辑分离
业务逻辑可以被多个显示逻辑共同使用,提高了业务逻辑的重用性以及可维护性.
显示逻辑灵活多变。
降低了二者之间的关联程度,实现了解耦合的目的.
需要解决的两个技术问题:
QueryServlet--ShowServlet
1)在多个Servlet之间转发请求。
不会改变地址栏里的地址
执行顺序:
客户端请求--->
服务器(在服务器内部跳转,客户端并不知道)得到结果传给客户端-->
客户端接收结果
RequestDispatcher:
相当于多个多个Servlet之间的接力棒.
RequestDispatcherdr=request.getRequestDispatcher("
/要跳转的类的名字"
);
dr.forward(request,response);
重定向:
会改变地址栏里的地址
客户端请求-->
服务器收到后返回另一个地址--->
客户端用另一个地址--->
服务器返回结果--->
response.sendRedirect("
路径"
):
处理统一业务的多个Servlet之间适合使用forward。
处理不同业务的Servlet之间适合使用sendRedirect
forward只能在用一个应用的Servlet之间工作。
重定向可以在不同应用之间完成,如果定向的目的地是跨应用的,地址应该写完整
2)在多个Servlet之间传递数据。
Request.setAttribute(名称,Object)
Request.getAttribute(名称)=Object
Reqest中的数据都是通过名字进行管理的,所以统称叫做命名属性
请求转发和重定向
请求转发:
forward
重定向:
sendRedirect
Forward在服务器内部完成。
浏览器中的地址不变
Redirect先将应答送回到浏览器,指示浏览器自己去申请其他资源.浏览器中的地址会改变.
Forward直能在用一个应用的Servlet之间工作.
重定向可以再不同应用之间完成,如果定向的目的地是跨应用的,地址应该写完整
Response.sendRedirect(“/myapp/emp/queryEmp”)统一应用
Response.sendRedirct(“”);
跨应用
处理同一业务的多个Servlet之间适合使用forward
处理不同业务的servlet之间适合使用redirect。
QueryServlet----forward---->
DispServlet
AddEmpServlet-----redirect------>
QueryServlet
DelEmpServlet-----redirect------>
QueryServlet
getSession(true)如果用户Session不存在,创建新的用户
getSession(false)如果Session不存在,返回null
getSession()getSession(true)
Request对象的生命周期只在一次请求和应答之间。
当应答回到浏览器之后,request对象就销毁了,如果浏览器向服务器再次发送新的请求,那么服务器会创建新的request对象给servlet使用.
受到生命周期的限制,request只能在多个由forward连接起来的Servlet之间共享数据。
因为forward(请求转发)是在服务器内部进行的。
因为应答一直没有回到客户端,所以可以利用request对象
追踪用户状态
1)Cookie
Cookie在服务器端使用一个对象表示。
在客户端是一个字符串
Javax.servlet.http.Cookie
|-->
nameCookie的名字
valueCookie的值
doman:
表示Cookie是由哪个应用存储的,浏览器在提交请求时,只会携带本应用存储的Cookie
maxAge:
字符串在客户端的存活周期(以秒为单位)
>
0:
实际保存的秒数.60*60*24*30(一个月)
-1:
和当前浏览器保持一致,叫做会话Cookie(默认)
=0:
表示删除一个Cookie
如何将Cookie写入到客户端浏览器
response.addCookie(Cookie)
如何在服务器端获得浏览器中的Cookie
request.getCookie()返回Cookie[]数组
2)HttpSession:
相当于服务器为每个用户单独提供的私人存储箱,用于在服务器端追踪用户状态,与Cookie相比,放在Session中的数据存储在服务器上,Cookie存储在客户端上,所以Session中的数据更加安全,但服务器要为此付出额外的存储空间(内存)。
不同用户调用这个方法会获得不同的Session对象。
每个用户都会得到属于个人的Session对象
1)如何获得HttpSession对象
service(….){HttpSessionsession=request.getSession(true);
}
不同用户调用这个方法会获得不同的Session对象,每个用户都会得到属于个人的session对象
2)如何操作HttpSession中的数据
Session.setAttribute("
String存储数据的名称"
Object存储的数据"
Session.getAttribute(“String存储数据的名称”);
返回object对象。
根据名称得到的对象需要强制类型转化
1)用户登录的标记:
Session
2)一次查询的结果:
request.
3)用户的权限:
Session和Request的区别:
1)Session生命周期长,适合存储在多次请求中重复使用的数据.
Request生命周期短,适合存放只在一次请求中用到的数据.
2)Session生命周期长,不适合存储体积较大(占用内存多)的数据。
Request生命周期短,可以存储体积大的数据.
Session的实际生命周期:
创建:
当用户第一次调用getSession(ture)的时候。
销毁:
通过超时机制(timeout)控制Session销毁。
两阶段:
1)内存---文件
存在Session中的数据最好实现Serializable接口.
2)从文件中删除.
HttpSession的实现原理
Request.getSession(true)
getSession(true)
1)首先从用户的请求中获得他的SessionID,SessionID是通过Cookie的形式保存在客户端浏览器上的.该Cookie的名字是JSESSIONID,值是实际的ID值.
2)根据SessionID的值,来返回相应的Session对象给客户使用.
3)JSESSIONID这个Cookie,是在用户第一次使用Session对象时保存在浏览器中的。
getSession(true)在请求中查找名字叫JSESSIONID的Cookie,没有找到,说明用户此前没有属于自己的Session对象。
getSession(true)会创建一个新的session对象给用户使用,同时,将新创建的SessionID,以Cookie的形式保存到客户端.服务器端用的地址可以不加应用名,客户端用的地址一定要加应用名。
getSession(true):
如果用户的Session不存在,则创建新的用户
getSession(false):
如果用户的Session不存在,则返回null
getSession()<
=>
getSession(true)
Servlet生命周期
Servlet生命周期受Tomcat的管理,由Tomcat为Servlet提供运行时环境(Request,Response),Tomcat可以叫做服务器,也可以叫做web容器或者Web中间件。
1)对于每一个Servlet来讲,在Tomcat中只有一个对象,这个对象在用户第一次访问这个Servlet时被创建。
这个对象在后面的多次请求中被重复使用
2)Tomcat如何调用Servlet对象中的方法
下面的箭头不代表调用过程,表示的是Servlet对象的生命周期
Init()在Servlet对象创建之后调用一次Service()每次接收到客户端请求时都会被调用,(多次)Destroy()Servlet对象被销毁之前调用一次
3)Servlet线程安全问题
由于Servlet只有一个实例,所以很可能被Tomcat运行在多线程的环境下,所以要求我们编写的Servlet一定是一个线程安全的对象。
线程安全问题是由多个线程同时操作一个对象的成员变量导致的。
在编程时尽量不在Servlet中定义成员变量,除非成员变量的值不会被修改
4)init用来初始化Servlet需要的一些数据,功能类似于构造函数。
Init的特殊作用在于init(ServletConfitconfit)能够接收Tomcat传递的ServletConfig对象。
init的一般实现方法是将ServletConfig对象保存在成员变量中,以便以后service使用。
如果我们的Servlet是继承自HttpServlet的话,init方法是由父类实现的,ServletConfig对象也就有父类保存在他的私有变量中了,在子类需要的时候,可以通过getServletConfig方法来获得这个对象。
如果子类要覆盖父类的init方法,要注意什么?
@Override
Publicvoidinit(ServletConfigconfig)throws…{
super.init(config);
//履行父类的职责
xxxxxxx;
ServletConfig对象的用法.
用于保存servlet的配置信息;
所有的XML格式的文件内容,都可以用一个java对象进行存储
employee>
name>
zhangsan<
/name>
age>
20<
/age>
salary>
100<
/salary>
/employee>
Employee(name,age,salary)
通过ServletConfig获得Servlet中的初始化参数
init-param>
param-name>
url<
/param-name>
param-value>
jdbc:
oracle…….<
/param-value>
/init-param>
driver<
oracle.jdbc…..<
数据源和连接池的管理和使用
每个线程必须拥有自己的连接,在需要连接时:
DriverManager.getConnection()----->
获得连接.创建数据库连接是程序中比较消耗资源的操作.为了减少数据库连接的创建次数,就需要在程序中使用连接池
在servlet如何找到DataSource对象.
Tomcat为了让Servlet能够得到DataSource对象,他会把DataSource对象存储到LDAPServer中.目的是为了Servlet能够从LDAP中把DataSource找出来使用。
LDAPServer,和数据库类似,是用来存储数据的软件,数据在数据库中是以表和行的形式存储的,在LDAP中是以对象的形式存储的。
LDAP的特征:
1)LDAP相当于是在内存中创建的一个目录结构,存储在LDAP中的数据是存储在某个目录中的.
/root/
a
b
c/
sub1/
sub2/
DataSource
2)java----JDBC--->
DataBase
Java-----JNDI---->
LDAP
在Servlet中使用连接池:
1)omcat的配置文件中对连接池进行配置。
2)序中通过JNDI找到DataSource---->
Connection
1)配置连接池和DataSource
编辑Tomcat/conf/context.xml
把数据库的驱动包保存在/Tomcat/lib中.
/Tomcat/lib:
这个目录中的jar,能被包括tomcat自己在内的所用应用共同使用
/WEB-INF/lib:
只能给本应用使用.
两个目录中不能有重复的jar包.
2)使用jndi查找数据源(DataSource)
Jndiname:
myapp/jdbc/oracle
Context:
表示LDAP中的一级目录.InitialContext:
表示LDAB的根目录
Contextctx=newInitialContext();
从LDAP的根目录(ctx)开始查找需要的对象:
DataSourceds=(DataSource)ctx.lookup(“myapp/jdbc/oracle”);
ds.getConnection()
在配置文件中对连接池中的配置
<
WatchedResource>
WEB-INF/web.xml<
/WatchedResource>
ResourcedriverClassName="
oracle.jdbc.OracleDriver"
url="
oracle:
thin:
@10.10.20.20:
1521:
kettas"
usern
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- kettas 笔记 Servlet