day05笔记servlet基础入门.docx

上传人:b****5 文档编号:7251137 上传时间:2023-01-22 格式:DOCX 页数:12 大小:382.99KB
下载 相关 举报
day05笔记servlet基础入门.docx_第1页
第1页 / 共12页
day05笔记servlet基础入门.docx_第2页
第2页 / 共12页
day05笔记servlet基础入门.docx_第3页
第3页 / 共12页
day05笔记servlet基础入门.docx_第4页
第4页 / 共12页
day05笔记servlet基础入门.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

day05笔记servlet基础入门.docx

《day05笔记servlet基础入门.docx》由会员分享,可在线阅读,更多相关《day05笔记servlet基础入门.docx(12页珍藏版)》请在冰豆网上搜索。

day05笔记servlet基础入门.docx

day05笔记servlet基础入门

【教学内容】

1、Servlet快速入门

2、Servlet接口实现关系

3、servlet生命周期

4、编写Servlet的注意事项

5、servlet路径配置

6、Servlet启动配置

7、servletConfig对象与ServletContext对象

【教学总结】

【第一阶段】

【目标:

serlvet快速入门】

编写快速入门的servlet步骤:

1.使用MyEclipse创建webproject

2.通过向导创建Servlet继承HttpServlet

3.配置Servlet虚拟路径

4.覆盖doGet或者doPost方法进行输出

举例:

一:

首先编写个类继承HttpServlet,然后重写doGet()和doPost()方法

packagecn.itcast.servlet;

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclassHelloServletextendsHttpServlet{

//当请求方式是get时会调用

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

//通过resp对象代表向客户端输出数据。

resp.getWriter().print("hello,goodmorning.");

}

//当请求方式是post时会调用

@Override

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

}

二:

在WEB-INF目录下的web.xml文件中配置。

分为两小步,配置如下。

--1.注册写好的HelloServlet-->

HelloServlet

cn.itcast.servlet.HelloServlet

--2.为注册的HelloServlet配置对外的访问路径,这里配置的是/hello-->

HelloServlet

/hello

 

三:

将写好的servlet发布到tomcat服务器的webapps目录下。

 

然后点击finish,点击OK,这样就发布到tomcat服务器了。

四:

启动tomcat服务器去访问刚刚的发布的web应用。

 

Servlet的访问过程,如图:

 

按照上图中①②③④序号,最终找到了HelloServlet.

【学习效果】

1.掌握servlet编写的步骤。

2.掌握如何给一个servlet配置对外访问路径。

3.知道如何去访问一个已经配置好的servlet.

4.掌握servlet的访问路径。

【知识点过渡】

接下来讲解Servlet接口实现关系。

【第二阶段】

【目标:

Servlet接口实现关系】

在通读了servlet接口的文档之后,发现编写一个servlet程序有两种方式,一种是继承GenericServlet,一种是继承HttpServlet。

那么,为什么我们刚刚在编写快速入门的servlet程序时,要继承HttpServlet呢?

大家首先看一下这几个类的继承关系,如图:

 

我们在编写一个servlet时是如下的一个继承关系。

Servlet接口------实现类GenericServlet-----子类HttpServlet----自定义Servlet继承HttpServlet

Servlet技术sun公司最早推出时,并不是仅面向于HTTP协议的,Servlet接口规范与协议无关的

*Servlet技术基于请求-响应模型的

GenericServlet通用的Servlet,只是实现了与协议无关API,并没有提供任何与协议相关API

HttpServlet是一个面向HTTP协议Servlet程序,提供了与协议相关API

自定义Servlet都是面向HTTP协议,如果实现Servlet接口,继承GenericServlet.使得开发更加复杂------只需要继承HttpServlet拥有与HTTP协议相关API开发简单

 

【学习效果】

1.了解servlet规范中这几个类的继承关系

2.能够明白为什么我们要继承HttpServlet,而不直接去实现servlet接口和GenericServlet.

【知识点过渡】

接下来讲解servlet生命周期。

【第三阶段】

【目标:

servlet生命周期】

纵观servlet接口的api发现,servlet接口中定义了如下这5个方法:

上图被框住的方法是按照如下的这个调用顺序。

Init()方法--------》》第一次访问创建对象时被调用,只调用一次

Service()方法-----》》每次响应客户端的请求时会被tomcat容器调用

Destroy()方法----》》当servlelt对象销毁时调用

这三个方法,我们将其称之为servlet生命周期的方法。

那么,什么叫做声明周期的方法呢?

大家要注意,我们经常会对某个对象的创建一直到销毁的过程进行描述,那么为了有一条清晰的脉络,所以一般会用生命周期的方法来描述这个过程。

也就是描述了某个对象“从生到gameover”的过程。

实验:

自己动手演示servlet生命周期方法的调用过程。

在这个演示的过程中,从打印的log中发现,发现当一次servlet被访问时

Init方法调用,然后service方法被调用,然后每次来自客户端的请求,

又一直会调用service方法,知道最后,关闭tomcat服务器时,发现destory

方法又被调用。

【学习效果】

弄清楚servlet生命周期方法的调用过程。

【知识点过渡】

接下来讲解编写Servlet的注意事项。

【第四阶段】

【目标:

编写Servlet的注意事项】

1.Servlet初始化时覆盖init(),无需覆盖init(config)

init(ServletConfig)是Servlet生命周期的方法

GenericServlet内部覆盖了init(ServletConfig),在有参数init方法中调用无参数init

2根据Http请求的方式,覆盖相应的doGet或者doPost方法,无需覆盖Service方法

我们跟踪源码发现,在HttpServlet的方法中,又定义了一个service方法,而在servlet的生命周期方法中,service方法调用了后来定义的这个类中新定义的service方法,然后这个service方法才最终根据请求方式的不同调用了doGet或doPost方法。

所以结论是,servlet的service方法与doGet,doPost方法的关系是调用与

被调用的关系。

3.当doGet和doPost代码逻辑相同时,可以相互调用,简化编程。

然后为了简化平时编程的步骤,所以去更改下servlet的模版。

实验:

手动编译Servlet执行

1、在tomcat/webapps下新建网站目录结构

Root

----*.html*.jsp

----WEB-INF

----classes

----lib

----web.xml

2、编译Servlet程序位于classes目录

javac-classpathd:

\apache-tomcat-7.39\lib\servlet-api.jar-d.HelloServlet.java

3、在WEB-INF配置web.xml

结论:

1、编译Servlet需要API(servlet-api.jar)2、如果Servlet有包结构,在编译后,在classes目录下生成目录结构

 

【学习效果】

1.覆盖init方法时,要覆盖无参的,而不要覆盖有參的。

2.能够弄清楚service方法与doGet,doPost的关系。

3.知道doGet,doPost方法代码逻辑一样时,方法可以相互调用。

4.了解servlet编译生成的.class文件是发布在哪个目录下的。

【知识点过渡】

接下来讲解servlet路径配置。

【第五阶段】

【目标:

servlet启动的一些配置注意点】

URL-Pattern的三种配置方式

1、完全路径匹配以/开始不能包含统配符*例如:

/hello/init

2、目录匹配以/开始,/*结尾例如:

/*/aa/*/aaa/bbb/*

3、扩展名匹配不能以/开始,以*开始例如:

*.do*.action

经典错误:

/*.do

优先级:

完全匹配>目录匹配>扩展名匹配

注意,这个弄完了,把如下几个问题自己在过一遍。

对于如下的一些映射关系:

Servlet1映射到/abc/*

Servlet2映射到/*

Servlet3映射到/abc

Servlet4映射到*.do

问题:

当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应

Servlet引擎将调用Servlet1。

当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应

Servlet引擎将调用Servlet3。

当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应

Servlet引擎将调用Servlet1。

当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应

Servlet引擎将调用Servlet2。

当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应

Servlet引擎将调用Servlet2。

【学习效果】

1.了解serlvet路径配置的几种方式

2.了解配置的几种方式中优先级情况。

【知识点过渡】

接下来讲解Servlet启动配置。

【第六阶段】

【目标:

Servlet启动配置】

问题:

如何让Servlet在服务器启动时,加载创建对象,调用init?

可以在web.xml中添加如下配置。

invoker

org.apache.catalina.servlets.InvokerServlet

2

*配置load-on-startup使Servlet在服务器启动时创建对象完成init

默认的servlet:

如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前Web应用程序的缺省Servlet。

凡是在web.xml文件中找不到匹配的元素的URL,它们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求。

\conf\web.xml文件中,注册了一个名称为org.apache.catalina.servlets.DefaultServlet的Servlet,并将这个Servlet设置为了缺省Servlet。

当访问Tomcat服务器中的某个静态HTML文件和图片时,实际上是在访问这个缺省Servlet。

【学习效果】

1.能够认识到可以配置servlet在web应用一被加载的时候就创建servlet对象。

2.了解默认的servlet,在开发中不要误将自己的servlet弄成默认的servlet了。

【知识点过渡】

【第七阶段】

【目标:

servletConfig对象与ServletContext对象】

servletConfig对象:

Servlet的初始化init:

init(ServletConfig)-----ServletConfig对象Servlet配置对象,用来在Servlet初始化阶段向Servlet传递信息

*GenericServlet中将ServletConfig对象保存成员变量,同时提供getServletConfig方法

*自定义Servlet中通过getServletConfig()获得ServletConfig对象

StringgetInitParameter(Stringname)根据参数名称获得值

企业级应用:

load-on-startup结合init-param使一个Servlet在服务器启动时执行初始化,第一时间加载配置文件====>Struts框架

struts1中应用

action

org.apache.struts.action.ActionServlet

config

/WEB-INF/struts-config.xml,

/WEB-INF/struts-config-Wildcard.xml

2

***ServletConfig配置参数相当于当前Servlet局部变量,无法被其它Servlet访问的

servletContext对象:

(重要)

Servlet上下文对象ServletContext:

1、ServletContext每个工程对应一个

2、获得ServletContext----->servletConfig.getServletContext();

应用一:

全局初始化参数配置(所有Servlet都可以访问)

*和ServletConfig配置初始化参数区分开

1)配置全局初始化参数

--全局初始化参数-->

name

张三

2)获得ServletContext对象ServletContextcontext=getServletContext();

3)通过StringgetInitParameter(Stringname)获得全局参数

应用二:

多个Servlet之间可以共享数据(ServletContext唯一的)

共享全局唯一数据:

站点访问次数、数据库连接池,static

setAttribute(name,object)

getAttribute(name)

应用三:

读取web工程中资源文件

在day5工程中创建四个文件

1、在day5工程根目录创建1.txt

2、在WebRoot下创建2.txt

3、在WEB-INF下创建3.txt

4、在src下创建4.txt

1.txt因为在WebRoot外面不会发布到tomcat服务器,无法端读取

2.txt--->getServletContext().getRealPath("/2.txt");

3.txt--->getServletContext().getRealPath("/WEB-INF/3.txt");

4.txt位于src下,复制到WEB-INF/classes下--->getServletContext().getRealPath("/WEB-INF/classes/4.txt");

【学习效果】

1.知道servletConfig的用法,可以用来获得在web.xml中配置的参数值。

2.掌握servletContext读取全局配置的参数。

3.掌握servletContext实现全局共享数据。

4.掌握servletContext读取web资源的方法。

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

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1