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. 浅谈:java泛型与dao重用

    在进入今天的主题之前,我们先理解一下什么是泛型: 泛型是java中一种类型,泛型是被参数化的类型. 类型-->class 参数化-->class类型可以是任意参数 泛型存在的意义:泛型可以 ...

  2. git push如何至两个git仓库

    分别有仓库 A(github),B(JAE 的 git),本机为C. 假设以 a 仓库作为最终的使用仓库, b为发布仓库.分支都为 dev 第一步,增加远程仓库 git remote add orig ...

  3. elasticsearch curl operation

    Elastic Search API Index.简单的介绍了使用Elastic Search 如何建立索引. ElasticSearch-API-Index 索引创建API允许初始化一个索引.Ela ...

  4. js字符串方法

    字符串方法根据下标返回字符:str.charAt()//传入一个下标返回字符str.charCodeAt();// 传入一个下标获取编码String.formCharCode();//接受编码,编码转 ...

  5. Java程序员岗位

    Java程序员岗位面试题有哪些?   1.面向对象的特征有哪些方面(1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择 ...

  6. Dom4j把xml转换成Map(固定格式)

    /** * 可解析list * * @param fileName * @return * @throws Exception */ @SuppressWarnings("unchecked ...

  7. Node.js入门笔记(6):web开发方法

    使用node进行web开发 用户上网流程: 表面上看:打开浏览器--输入网址--跳转--上网. 背后的过程是什么呢? http请求网址到指定的主机--服务器接收请求--服务器响应内容到用户浏览器--浏 ...

  8. Zabbix 监控 Nginx(四)

    简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) [root@localhost ~]# /apps/product/ng ...

  9. webstorm常用快捷键

    常用快捷键—Webstorm入门 提高代码编写效率,离不开快捷键的使用,Webstorm拥有丰富的代码快速编辑功能,你可以自由配置功能快捷键. 快捷键配置 点击“File”-> “setting ...

  10. Android 基础篇(二)

    ADB进程 adb指令 adb install xxx.apk adb uninstall 包名 adb devices adb start-server adb kill-server adb sh ...