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提取网页源码

    package com.sevennight; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io ...

  2. oracle---日期等plsql

    日期/时间 相关查询 1.获取当前月份的第一天 运行这个命令能快速返回当前月份的第一天.你可以用任何的日期值替换 "SYSDATE"来指定查询的日期. SELECT TRUNC ( ...

  3. C# 调用C++ SDK/API的问题总结

    1.回调函数的使用 c++的回调函数如下所示: typedef void (CALLBACK *Data)(long lHandle, DATA_TYPE eDataType, unsigned ch ...

  4. docker windows 7 mysql安装使用教程

    mysql 1. 镜像的下载 Docker pull MySQL 可以从https://docker.cn/docker/mysql 看到官方的同步镜像. 大约400多M. 2. 运行 每个镜像都有一 ...

  5. jQuery知识点一 each()和toggleClass()

    jQuery的一些东东比较容易忘,所以在这里整理一下... ... 1. each (1) $(selector).each(function(index,element))         inde ...

  6. JavaScript模板引擎原理,几行代码的事儿

    一.前言 什么是模板引擎,说的简单点,就是一个字符串中有几个变量待定.比如: var tpl = 'Hei, my name is <%name%>, and I\'m <%age% ...

  7. Windows 7安装解压版MySQL 5.6(不包含配置文件优化)

    到官网下载MySQL5.6 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html, 提供了 .exe版本 和 .zip解压版,因为我的操作系统是64位的 ...

  8. jdbctemplate中的批量更新使用,BigDecimal与造型的联系和区别

    //jdbctemplate批量新增的使用MENU_ID_LIST是前端页面传递到后端控制层,再由控制层传到实现层的List //JdbcTemplate是spring jdbctemplate通过注 ...

  9. dp 走格子问题

    问题: 一个5x8的格子,想从左下角走到右上角,求最短路径,共有多少种走法. 思路: 因为是求最短路径,所以,只会往右往上走. 我们可以把棋盘的左下角看做二维坐标的原点(0,0),把棋盘的右上角看做二 ...

  10. dex文件格式一

    一.生成dex文件 我们可以通过java文件来生成一个简单的dex文件 编译过程: 首先编写java代码如下: (1) 编译成 java class 文件 执行命令 : javac Hello.jav ...