• 08 Servlet


    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>
    ---------thinking、architecture、code、treasure---------
  • 相关阅读:
    Python基础篇【第十一篇】:正则表达式之计算器
    Python基础篇【第十篇】:正则表达式
    Python基础篇【第九篇】:剖析装饰器
    Python基础篇【第八篇】:剖析递归函数
    Python基础篇【第七篇】:文件操作
    Python基础篇【第六篇】:函数补充
    Python基础篇【第五篇】:sed和函数
    TCP/IP详解之:Ping程序、Traceroute程序
    TCP/IP详解之:ICMP协议
    TCP/IP详解之:ARP协议 和 RARP协议
  • 原文地址:https://www.cnblogs.com/elaa/p/4052792.html
Copyright © 2020-2023  润新知