## Servlet技术(重点) ##
Servlet简介(理解)
1.什么是Servlet?
* 看的Servlet相关的知识,查看JavaEE的文档
* Servlet是一个接口,提供5个方法
* 提供两个实现类,GenericServlet和HttpServlet
2.Servlet什么的作用?
* Servlet是小的Java程序
* 运行在WEB服务器端
* 可以接收和响应从客户端发送过来的请求
* 请求:从客户端访问服务器(发送一些数据,请求的内容)
* 响应:从服务器端到客户端(把请求的内容返回给我)
3.编写Servlet
* 实现Servlet接口
* 继承GenericServlet或者HttpServlet
编写一个Servlet程序(掌握)
1.怎么样来编写Servlet程序,Servlet程序段配置文件
2.开发的步骤
* 第一步:实现Servlet接口,实现5个方法。
* 第二步:通过配置文件的方式(在web.xml)
<!-- 编写Servlet的配置文件 -->
<!-- 配置Servlet的基本信息 -->
<servlet>
<!-- 先配置Servlet的名称(自己随意的定,默认的情况下和类的名称是相同的) -->
<servlet-name>ServletDemo1</servlet-name>
<!-- 配置Servlet类的全路径(包名+类名) -->
<servlet-class>cn.itcast.servlet.ServletDemo1</servlet-class>
</servlet>
<!-- 配置Servlet的映射(Servlet怎么来访问呢) -->
<servlet-mapping>
<!-- 先配置Servlet的名称,和上面的名称必须是相同的 -->
<servlet-name>ServletDemo1</servlet-name>
<!-- 配置访问的路径(写法有很多种) http://localhost:80/day09/servlet1 -->
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
* 第三步:先把程序部署到服务器中,启动服务器,访问Servlet程序了。
Servlet生命周期(面试题)
1.生命周期:人的角度,出生,达到人生的巅峰,提供服务,死亡!!
2.Servlet实例对象:Servlet实例的创建、提供服务、Servlet实例销毁!!
3.Servlet接口中定义了三个方法
* init(ServletConfig) -- Servlet实例一被创建,立即调用init方法进行初始化。
* Servlet实例什么时候被创建呢?
* init方法调用几次呢?
* service(request,response) -- Servlet实例已经被创建完成了,使用service提供服务,处理从客户端发送过来的请求。
* service调用几次?
* destroy() -- Servlet实例被销毁之前,调用destroy方法(空的实现)。
* Servlet实例什么时候销毁?
* destroy调用几次?
4.总结
* Servlet是第一次访问的时候创建Servlet的实例对象,创建后立即调用init方法进行初始化,init方法调用一次。
* Servlet实例被创建之后,使用service方法提供服务,有一次请求,调用一次service方法。(servlet单例模式,创建一个新的线程)
* Servlet实例服务器关闭的时候销毁Servlet实例,销毁之前调用destroy的方法进行一些销毁的操作。destroy调用一次。
Servlet在Tomcat服务器怎么运行的(理解)
1.看图04.
Servlet的接口和实现类之间的关系(理解)
1.关系
* Servlet的接口,提供两个实现类,GenericServlet和HttpServlet
Servlet接口
|
GenericServlet
|
HttpServlet
|
MyServlet
2.以后的开发的步骤
* 编写一个类,继承GenericServlet,重写一些你需要的方法。
* 在web.xml中编写配置文件。
* 编写一个类,继承HttpServlet,重写一些方法。(基本就使用这种方式)
* 在web.xml中进行配置
3.GenericServlet类中的init方法的关系
* void init(ServletConfig config)
* void init()
* 总结:以后重写init方法的时候,需要重写无参数的Init方法
4.HttpServlet类中提供service方法
* service(ServletRequest req, ServletResponse res)
* 定义两个变量,强转。调用service(HttpServletRequest req, HttpServletResponse resp)
* service(HttpServletRequest req, HttpServletResponse resp)
* 获取的提交的方式,判断提交的方式
* 如果是GET请求,调用doGet方法
* 如果是POST请求,调用doPost方法
* 了解(ServletRequest是HttpServletRequest的爹)
* 总结
* service方法的内部判断提交的方式,决定调用doXXX的方法。
* 以后再开发Servlet程序,继承HttpServlet,手动的重写doGet和doPost方法,在web.xm编写配置文件。
修改Servlet开发的模板(修改一次)
1.先使用模板创建Servlet
2.修改模板的步骤
* 先找到MyEclisp的安装的路径
* 需要查找 plugins/com.genuitec.eclipse.wizards.xxx.jar
* 不要直接解压,右键 -- 选择打开方式 -- 使用压缩工具打开
* 选择模板文件夹 -- 找到Servlet.java文件
* 编写Servlet.java文件 -- 修改doPost和doGet的代码
* 把Servlet.java覆盖回去
* 重启MyEclipse就可以了
Servlet配置自动加载(理解)
1.第一次访问Servlet程序的时候,创建Servlet实例了。如果在Servlet中编写了一些代码(比较消耗时间的代码)
2.可以配置Servlet自动加载(根着服务器的启动,创建Servlet的实例对象)
3.通过配置文件配置Servlet自动加载
* 放在<servlet>标签下。
* <load-on-startup>值(正则数和0)</load-on-startup>
* 值越小,优先级越高
Servlet配置访问路径(掌握)
1.学习Servlet的访问的路径怎么来配置?怎么样来访问?(url-pattern配置)
2.学习url-pattern的配置写法
* 完全路径匹配 /web/servlet5 访问:http://localhost/day09/web/servlet5
* 目录匹配 /web/* 访问:http://localhost/day09/web/xxx
* 扩展名匹配 不能以/开头 *.do *.jsp *.html 访问:http://localhost/day09/web/xxx.do
3.优先级
* 完全路径匹配 > 目录匹配 > 扩展名匹配
* web.xml的配置文件中,可以配置多个Servlet程序。(/demo5 /* *.do) http://localhost/day09/demo5
Servlet开发中WEB阶段的路径问题(掌握)
1.相对路径和绝对路径(WEB阶段的路径问题),学习会路径的写法(看Tomcat服务器的路径)
2.搭建环境
* 在WebRoot目录下创建aa.html的文件,访问ServletDemo6
<h3>相当路径写法</h3>
<!--
访问aa.html http://localhost/day09/aa.html
访问ServletDemo6 http://localhost/day09/servlet6
-->
<a href="servlet6">aa.html</a> <br/>
<a href="./servlet6">aa.html</a> <br/>
* 在WebRoot目录下创建bb的文件夹,在bb文件夹下创建了bb.html的文件,访问ServletDemo6
<h3>相对路径</h3>
<!--
访问bb.html http://localhost/day09/bb/bb.html
访问ServletDemo6 http://localhost/day09/servlet6
-->
<a href="../servlet6">bb.html</a>
3.WEB开发中编写绝对路径
* 复杂的写法
* <a href="http://localhost/day09/servlet6">bb.html</a>
* 简便的写法
* <a href="/day09/servlet6">bb.html</a>
* /不能省略,必须要写的
4.绝对路径分成两种绝对路径
* 客户端绝对路径
* 编写的绝对路径包含项目名称的。
* 写法:/day09/servlet6
* 服务器端绝对路径
* 不用编写项目的名称
* 写法:/servlet6
ServletConfig对象(掌握)
1.在init(ServletConfig config),把配置文件的信息赋值给ServletConfig对象。就可以通过ServletConfig获取到配置文件相关的信息。
2.方法
* String getServletName() -- 获取的是<servlet-name>标签的文本的内容
* (掌握)String getInitParameter(String name) -- 获取的初始化参数
* (掌握)Enumeration getInitParameterNames() -- 获取的初始化参数
* (掌握)ServletContext getServletContext() -- 获取的是ServletContext对象
ServletContext对象(掌握)
1.ServletContext的简介
* 一个WEB的项目,只有一个ServletContext对象。
* 在WEB的项目中,所有的资源共享这一个ServletContext对象。
* ServletContext与天地同寿!!!
* Tomcat服务器在启动的时候,创建ServletContext对象,服务器关闭的时候,ServletContext销毁了。
2.怎么获取到ServletContext对象?
* ServletConfig对象可以获取到ServletContext对象。
* GenericServlet中提供了方法,获取到ServletContext对象。
域对象(概念)
1.域对象:在JavaWEB中学习4个域对象。掌握的有3个。
2.作用
* 进行数据的传递!!!
* 这些个域对象的域的作用的范围是不同!!
* ServletContext域对象(作用的范围整个WEB的项目)
3.方法
* setAttribute(String name,String value);
* getAttribute(String name)
* removeAttribute(String name)
ServletContext对象的作用和方法(掌握)
1.作用和方法
* 读取全局的初始化参数
* String getInitParameter(String name) -- 获取全局的初始化参数
* Enumeration getInitParameterNames() -- 获取全局的初始化参数
* 实现数据的共享(向ServletContext域对象中存取值)
* void setAttribute(String name, Object object) -- 项ServletContext存入值
* Object getAttribute(String name) -- 从ServletContext取值
* void removeAttribute(String name) -- 从ServletContext移除值
* 读取资源的文件
* InputStream getResourceAsStream(String path) -- 传入文件的路径,获取该文件的输入流
* String getRealPath(String path) -- 传入文件的路径,获取的是该文件的绝对磁盘路径
获取全局的初始化参数
1.全局初始化参数的配置
<!-- 配置全局的初始化参数 -->
<context-param>
<param-name>username</param-name>
<param-value>美美</param-value>
</context-param>
2.获取全局的初始化参数
* 全局的初始化参数被所有的Servlet共享,都能获取!!
实现数据的共享
1.ServletContext域对象中被WEB中所有的资源共享!!
2.模拟的例子,编写一个CountServlet,用来计数。再编写另外一个ShowServlet,显示访问的数量的!!
读取资源的文件
1.学习方法就OK了!!
* 读取资源的文件
* InputStream getResourceAsStream(String path) -- 传入文件的路径,获取该文件的输入流
* String getRealPath(String path) -- 传入文件的路径,获取的是该文件的绝对磁盘路径
2.读取db.properties文件
3.ServletContext域对象中获取文件的路径的写法
* 写服务器端的绝对路径,不包含项目名称!!!