Servlet技术
          * Servlet开发动态的Web资源的技术。    
         
          * Servlet技术
               * 在javax.servlet包下,接口。
               * 一个小的java程序,运行在服务器端,接收和响应从客户端(浏览器)发送过来的请求。
              
          * Servlet开速入门
               * 简单类,实现Servlet接口。(5个方法)
                    * 继承某个类(GenericServlet),重写一个方法。
                         * 重写public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException方法
                    * 配置Servlet(*****)
                   
          * 带包编译
               * javac -d . HelloServlet.java
              
          *  javax.servlet 不存在    
               * 解决问题:
                    设置临时环境变量:set classpath=%classpath%;servlet-api.jar   
                   
          * 配置Servlet
               * 在文件中配置:
                    <servlet>
                         <servlet-name>HelloServlet</servlet-name>
                         <servlet-class>cn.itcast.servlet.HelloServlet</servlet-class>
                    </servlet>
                    <servlet-mapping>
                         <servlet-name>HelloServlet</servlet-name>
                         <url-pattern>/hello</url-pattern>
                    </servlet-mapping>
                   
          * 启动服务器
          * 访问:http://localhost:80/website/hello    

在MyEclipse中开发Servlet

               * 实现Servlet接口,重写5个方法。
               * 配置Serlvet,项目web.xml中配置
              
Servlet的生命周期
               * 生命周期:实例创建,服务,销毁。
                   
               * Servlet实例被创建后,立即调用init方法,进行初始化。
                    init(ServletConfig config);
                   
               * 从客户端发来的请求,都被service方法处理
                    void service(ServletRequest req, ServletResponse res);
                   
               * 销毁调用destroy方法。
                    void destroy()
                   
总结:
  1. 第一次访问的时候,服务器创建了Servlet的实例,立即调用init方法进行初始化,init只调用一次。
  2. 从客户端发送过来的请求,调用service方法去处理,请求有多少次,service就执行多少次。
  3. 服务器关闭就销毁Servlet实例,调用destroy方法,调用一次。

关系    
               Servlet
                    |
               GenericServlet
                    |
               HttpServlet         
              
               * 编写一个普通的类,继承GenericServlet,初始化操作,重写init()的方法。
               * 编写一个普通的类,继承HttpServlet,重写doGet和doPost方法。
              
          * 如果再编写一个Servlet程序。
               * 编写一个普通的类,继承HttpServlet。
               * 重写doGet()和doPost()方法
               * 配置Servlet。(web.xml)
              
          * doGet和doPost逻辑相同,互相调用,简化编程。           
       
               doGet()
                    * 通过名称,查询数据,返回到页面。
               doPost()
                    doGet()

MyEclipse更方便的创建Servlet的方式。
               * 右键 -- 选择servlet -- 起名字 -- 选择doGet和doPost
                    -- 配置web.xml -- 起Servlet名称 -- 设置访问路径
                   
               * 修改模板
                    * 找到MyEclipse安装路径,找到com.genuitec.eclipse.wizards.xxx.jar
                    * 找到com.genuitec.eclipse.wizards_9.0.0.me201211011550.jar
                    * (千万别解压)-- 右键 -- 打开方式 -- 选择压缩工具 -- templates -- 找到Servlet.java
                    * MyEclipse先关闭。

配置Servlet自动加载:
     如果在<servlet>元素中配置了一个<load-on-startup>元素,那么WEB应用程序在启动时,就会装载并创建Servlet的实例对象、以及调用Servlet实例对象的init()方法
               * 在<servlet>
                    <load-on-startup>2</load-on-startup>
               </servlet>
              
               * 值是正整数,值越小,优先级越高。
例如:为web应用写一个InitServlet,这个servlet配置为启动时装载,为整个web应用创建必要的数据库表和数据。

 映射配置
               * <url-pattern>/demo</url-pattern>
              
               * 完全路径匹配          以/开头的          /demo    
                    * 只能/demo去访问
               * 目录匹配               以/开头的          /*          /demo/*
                    * /xxx都可以访问
               * 扩展名匹配          不能以/开头          *.do     *.action     *.xx
                    * xxx.do
                   
               * 优先级:完全路径匹配 > 目录 > 扩展名匹配

WEB开发中路径的问题
               * 相对路径
                    * 一个文件相对与另外一个文件的位置。
                    * 写法:不能以/开头     ../demo          ./demo          demo
                   
                    * 访问Demo8的Servlet:  http://localhost/day08/demo8
                    * 访问demo1.html的文件:http://localhost/day08/demo1.html
                   
                    * 相对路径:     ./demo8          demo8
                   
                    * http://localhost/day08/html/demo2.html
                    * http://localhost/day08/demo8
                    * 相对路径: ../demo8
                   
                    * 平时开发中少写相对路径,写绝对路径。
                   
               * 绝对路径
                    * http://localhost/day08/demo8"
                    * 简便写法:/day08/demo8
                    * 绝对路径以/开头。
                   
               * 服务器和客户端的绝对路径
                    * 客户端的绝对路径(经常使用)
                         * /day08/demo8
                   
                    * 服务器的绝对路径(很少使用)
                         * /demo8

ServletConfig接口
     A servlet configuration object used by a servlet container to pass information to a servlet during initialization. 
 
init(ServletConfig config);         
     * String getServletName()                           获取Servlet的名称       
     * ServletContext getServletContext() 
     * String getInitParameter(String name)       获取初始化参数
     * Enumeration getInitParameterNames()           获取初始化参数所有的名称  
在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。

ServletContext域对象
     会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
   获取WEB应用的全局初始化参数: 一般用于指定编码
                    * String getInitParameter(String name) 
                    * Enumeration getInitParameterNames()
     //只需要在web-app下加入即可
            <context-param>

                <param-name>encoding</param-name>
              <param-value>utf8</param-value>  
            </context-param>
                   

实现数据共享
                    * void setAttribute(String name, Object object) 
                    * Object getAttribute(String name)
                    * void removeAttribute(String name)
                   
读取资源文件
     * InputStream getResourceAsStream(String path)       通过路径获取文件的输入流

          //相对于tomcat对应webapp下用/aa/bb/kk.properties即可.
     * String getRealPath(String path)                           通过路径获取文件的绝对磁盘路径
          //path的获取方法也是和上面的一样,只是获得物理路径后可以直接new FileInputStream(path)进行更多的操作,不只是读,还能写.

缺省的servlet(了解)         
               * tomcat/web.xml中
                 <servlet>
                    <servlet-name>default</servlet-name>
                    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
                    <init-param>
                         <param-name>debug</param-name>
                         <param-value>0</param-value>
                    </init-param>
                    <init-param>
                         <param-name>listings</param-name>
                         <param-value>true</param-value> //本是false,但改成了true;只改这个
                    </init-param>
                    <load-on-startup>1</load-on-startup>
               </servlet>

08 Servlet的更多相关文章

  1. 关于Cookie的有关内容

    1.首先谈谈http协议与状态保持. Http协议本身是无状态的,这与http协议本来的目的是相符的,客户端只需要简单的向服务器发出请求操作,然后服务器对请求作出响应.无论客户端还是服务器都没有必要记 ...

  2. DWR搭建以及使用教程

    DWR搭建以及使用教程   DWR(Direct Web Remoting)是一个Ajax的开源框架,用于改善web页面与Java类交互的远程服务器端的交互体验,可以帮助开发人员开发包含AJAX技术的 ...

  3. Spring Boot → 08:嵌入式Servlet容器自定义

    Spring Boot → 08:嵌入式Servlet容器自定义

  4. [技巧篇]08.Struts2拦截器中获取Servlet API方法

    讲课中遇到的解决Session拦截器的后腿问题,还有如何在拦截器中获取Servlet API,这里留一个备注,方便学生查找

  5. Spring Boot 学习系列(08)—自定义servlet、filter及listener

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的filter及listener配置 在传统的Java web项目中,servlet.filter和li ...

  6. 08.利用Easymock测试简单的servlet

    1.首先导入需要使用的servlet的jar包 接下来我们编写一个登陆的servlet package com.fjnu.service; import java.net.HttpRetryExcep ...

  7. JSP数据交互(二)和Servlet基础

    01.Application原理与应用 01.application对象的作用域范围是整个应用服务,而它在应用中所承担的责任就类似于一个全局变量.只要服务启动,则application对象就会存在. ...

  8. Servlet目录

    Servlet目录   课时1 Servlet概述12:30 课时2 servlet的第一个例子31:08 课时3 servlet的生命周期18:18 课时4 HttpServlet详细讲解31:43 ...

  9. HttpClient_001_初步实现项目01的servlet,与项目02的servlet,之间数据访问

    HttpClient_001_初步实现项目01的servlet,与项目02的servlet,之间数据访问 代码下载地址: http://download.csdn.net/detail/poiuy19 ...

随机推荐

  1. 框架集(Framesets)

    1.Frameset的使用 所谓框架便是网页画面分成几个框窗,同时取得多个 URL.只 要 <FRAMESET> <FRAME> 即可,而所有框架标记 要放在一个总起的 htm ...

  2. zTree 循环树

    /// <summary> /// 初始化第一次节点加载 /// </summary> /// protected string _menu = string.Empty; p ...

  3. C#+ AE 注意问题汇总(不断更新)

    1.AE的COM对象释放问题尤其是IFeatureCursor 建议用 ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(pObj); 或者 int iRefs ...

  4. Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  5. Java Web学习笔记8

    上下文参数(context-param) 由于init-param是配置在<servlet>标签里的,只能有这个Servlet来读取,因此它不是全局的参数,不能被其他的Servlet读取. ...

  6. windows 10卸载自带软件

    http://jingyan.baidu.com/article/14bd256e4ad268bb6c26126d.html http://jingyan.baidu.com/album/ae97a6 ...

  7. jvm

    -Xms128m表示JVM Heap(堆内存)最小尺寸128MB,初始分配-Xmx512m表示JVM Heap(堆内存)最大允许的尺寸256MB,按需分配. 说明:如果-Xmx不指定或者指定偏小,应用 ...

  8. FreeCodeCamp练习笔记

    CSS样式表: 嵌套:body是最外层包围其他所有HTML元素(标签),其中的元素样式都可覆盖body的样式. 覆盖:同一元素有多个样式,位置靠后的样式覆盖位置靠前的样式. id:id与位置无关,可任 ...

  9. TopHat

    What is TopHat? TopHat is a program that aligns RNA-Seq reads to a genome in order to identify exon- ...

  10. maven项目常见问题

    问题1:Maven项目,右键-update project后报错如下的解决办法: 1).DescriptionResourcePathLocationType Java compiler level ...