Servlet学习笔记

   1.  JSP的前身就是Servlet,Servlet是Java服务器端编程,运行于服务器上的。Servlet通常都会继承一个父类HttpServlet类,它没有main方法;java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。
    Servlet可完成功能:创建并返回基于客户请求的动态HTML页面;创建可嵌入到现有HTML页面中的部分HTML页面(HTML片段);与其他服务器资源(如数据库或基于Java的应用程序)进行通信。

   2.  写一个Servlet的步骤:

    a. 编写一个类来继承HttpServlet类

    b. 重写doGet()和doPost()方法

    c. 在web.xml中配置Servlet(Servlet3.0版本可以使用注解的方式不用配置)

   3. Servlet的配置与工作过程

1 <servlet>
2        <servlet-name>servlet的名字</servlet-name>
3        <servlet-class>具体访问servlet的类(类名要写完整,包含包名)</servlet-class>
4 </servlet>
5 <servlet-mapping>
6        <servlet-name>与上面的servlet是一一对应关系</servlet-name>
7        <url-pattern>表示servlet的访问路径,和请求路径一一对应</url-pattern>
8 </servlet-mapping>

    工作过程:用户将请求提交服务器后,服务器会进行判断是否存在请求的Servlet的实例,如果存在就直接调用实例的Service方法,然后根据用户的请求方式自动去调用它的doGet()或doPost()方法;如果不存在,服务器就会在web.xml中寻找与请求相对应的url地址,在servlet-mapping中寻找与请求相同的url-pattern并获得与请求相对应的servlet-name;再根据servlet-name到servlet标签中寻找与之相对应的Servlet-class,然后装载servlet类并生成一个相应名字的实例,调用Servlet的init()方法初始化实例对象,初始化完成后,调用Servlet的service方法,根据用户的提交方式自动去调用它doGet()或者doPost()方法;当服务器关闭的时候再调用Servlet的Destroy()方法销毁Servlet实例。

    工作过程示意图:

    4. Servlet的生命周期

    a. 初始化Servlet对象阶段,调用init()方法

    b. 响应客户端请求阶段,调用service()方法。由service()方法根据提交方式选择执行doGet()或者doPost()方法。

    c. 终止阶段,当Servlet对象退出生命周期时,负责释放占用的资源,调用destroy()方法。

    5. Tomcat在什么情况下加载Servlet?

    在以下三种情况Tomcat(Servlet)容器装载Servlet:

    a. Servlet容器启动时自动装载某些Servlet,实现它只需要在web.xml文件中的<Servlet></Servlet>之间添加如下代码<loadon-startup>1</loadon-startup>数字越小表示优先级别越高。

    b. 在Servlet容器启动后,客户首次向Servlet发送请求。
    c. Servlet类文件被更新后,重新装载Servlet。
    Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。

   6. Servlet与内置对象之间的关系

 

    7. 实用技巧

    a. Servlet路径跳转问题(绝对路径和相对路径)

    例子:/servlet/helloServlet(相对路径),第一个斜线代表服务器的根目录

    绝对路径:可以使用页面中定义的path变量,"<%=path%>/servlet/helloServlet"   表单中action的URL地址的写法,与超链接方式完全相同,url-pattern处必须以/开头,这里的/表示项目的根目录

    请求重定向写连接地址需要加上上下文地址(request.getContextPath()),例如:response.sendRedirect(request.getContextPath+"/test.jsp")

    服务器内部跳转,这里的斜线表示项目的根目录,例子:request.getRequestDispatcher("/test.jsp").forward(request,response)或者request.getRequestDispatcher("../test.jsp").forward(request,response);

    b. 对于Tomcat来说,它会将客户传递过来的参数放在一个Hashtable中(String ->String[]的键值映射)

    c. 某些Servlet在web.xml文件中只有<servlet>元素而没有<servlet-mapping>元素,这样我们就无法通过url地址的方式来访问这个Servlet了,这种Servlet通常会配置一个<load-on-startup>子元素,让容器在启动的时候自动加载该servlet,并且调用其init方法来完成一些全局行的初始化工作。

posted @ 2017-07-03 16:28  守明  阅读(78)  评论(0编辑  收藏  举报