kettas笔记ServletWord文档下载推荐.docx

上传人:b****2 文档编号:3061445 上传时间:2023-05-01 格式:DOCX 页数:24 大小:96.75KB
下载 相关 举报
kettas笔记ServletWord文档下载推荐.docx_第1页
第1页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第2页
第2页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第3页
第3页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第4页
第4页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第5页
第5页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第6页
第6页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第7页
第7页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第8页
第8页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第9页
第9页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第10页
第10页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第11页
第11页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第12页
第12页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第13页
第13页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第14页
第14页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第15页
第15页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第16页
第16页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第17页
第17页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第18页
第18页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第19页
第19页 / 共24页
kettas笔记ServletWord文档下载推荐.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

kettas笔记ServletWord文档下载推荐.docx

《kettas笔记ServletWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《kettas笔记ServletWord文档下载推荐.docx(24页珍藏版)》请在冰点文库上搜索。

kettas笔记ServletWord文档下载推荐.docx

在编写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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2