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. Codeforces Round #342 (Div. 2) B. War of the Corporations(贪心)

    传送门 Description A long time ago, in a galaxy far far away two giant IT-corporations Pineapple and Go ...

  2. RabbitMQ简介

    AMQP简介 在了解RabbitMQ之前,首先要了解AMQP协议.AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消 ...

  3. Structure And Representation Of MIB Object Names - SNMP Tutorial

    30.8 Structure And Representation Of MIB Object Names We said that ASN.1 specifies how to represent ...

  4. MVC前后端数据被编码

    @{ ViewBag.Title = "Home Page";}<script> function htmldecode(s) { console.log(s); va ...

  5. Linux下长时间ping网络加时间戳并记录到文本

    Linux下长时间ping网络加时间戳并记录到文本   由于一些原因,比如需要检查网络之间是否存在掉包等问题,会长时间去ping一个地址,由于会输出大量的信息而且最好要有时间戳,因此我们可以使用简单的 ...

  6. Google Maps API V3 之 路线服务

    Google官方教程: Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 ...

  7. 你想的到想不到的 javascript 应用小技巧方法

    javascript 在前端应用体验小技巧继续积累. 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElemen ...

  8. HTC学习笔记

    添加一个属性的setter, getter 建立一个页面 <html> <head> <title>TODO supply a title</title> ...

  9. LYDSY热身赛 escape

    Description 给出数字N(1<=N<=10000),X(1<=x<=1000),Y(1<=Y<=1000),代表有N个敌人分布一个X行Y列的矩阵上矩形的行 ...

  10. [Git] Git基础

    远程仓库 查看远程仓库: git remote -v 添加远程仓库: git remote add <repoName> <url> 拉取远程仓库数据: git fetch & ...