zoukankan      html  css  js  c++  java
  • Servlet

        一】Servlet入门
            1)是SUN公司基于Java技术的一个开发动态资源支持的规范,以
            2)Servlet是一种特殊的Java类,运行时服务端/容器中,接收每一个客户端的请求并响应,遵循HTTP协议
            3)Servlet手工开发过程,参见<<手工创建Servlet的全过程.txt>>
            
            配置环境变量set classpath=%classpath%;
            配置servlet如何被外界访问
            <servlet>
                <servlet-name>MyServlet</servlet-name>//Servlet的名字
                <servlet-class>cn.itcast.web.servlet.MyServlet</serblet-class>//Servlet全路径
            </servlet>
            <servlet-mapping>
                <servlet-name>MyServlet</servlet-name>  //servlet名字,必须和上述一致
                <url-pattern>/my</url-pattern>//以/开头,提供外界用户访问的路径
            </servlet-mapping>
            
            
        二】开发Servlet的三种方式
            1)实现Servlet接口
                
            2)继承并扩展GanericServlet类
            
            3)继承并扩展HttpServlet类,注意:此类只适合Http协议的类型。
                1》如果浏览器以get方式提交,复写doGet()方法
                2》如果浏览器以post方式提交,复写doPost()方法
            
            补充:
                1》web.xml配置:
                    <servlet>
                        <servlet-name>Dem11[servlet名字,可以任意]</servlet-name>
                        <servlet-class>cn.itcast.web.servlet.Demo11[servlet全路径名]</srevlet-class>
                    </servlet>
                    <servlet-mapping>
                        <servlet-name>Demo11[servlet名字,必须和上述一致]</servlet-name>
                        <url-pattern>/qq[以/开头,提供外界用户访问的路径]</url-pattern>
                    </servlet-mapping>
                2》如果需要输出中文,需要在Servlet中做如下设置:
                    //服务端通知浏览器以指定的编码方式来显示中文
                    response.setContentType("text/html;charset=utf-8");
                    response.getWriter().write("欢迎学习JavaServlet程序!");
                    方法原型:
                            void setContentType(String type);
     
        三】Servlet调用的详细步骤
            1》当浏览器第一次访问Servlet时,服务器首先会解析web.xml文件,根据浏览器访问的路径,解析出该Servlet的全路径
            2》找到Servlet后进行反射(Class.forName().newInstance),创建一个Servlet对象(此时会调用构造方法)
            3》调用init()方法:Servlet作初始化工作
            3》调用doXxxx()方法:为浏览器响应
            4》如果浏览器再次访问相同的Servlet,只需从服务端维护的Servlet实例结合中取得对象的实现,来进行相应的动作
            5》当服务器决定销毁Servlet实例之前(如重新部署工程时),调用此Servlet实例的destroy()方法,销毁此对象。
            注意:
                1》每创建一个Servlet实例后,会自动放入服务端的Servlet实例池(容器)当中存储,备用。
                2》同一个Servlet实例,在服务端只有一个。
                3》每个实例只会调用一次的方法:构造方法、init()方法,Destroy()方法
            
            输出结果:
                Demo2()--hashCode://构造函数,在反射阶段调用
                init()--hashCode:
                doGet()--hashCode:
                doGet()--hashCode:
                doGet()--hashCode:
                doGet()--hashCode:
        四】Servlet细节
            1)浏览器访问的url-pattern只是一个符合格式的任意字符串,以/开头
            2)一个Servlet的url-pattern可以是1个或者多个
            3)url-pattern只能有两种格式,但只能使用其中一种:
                        1》*.后缀名(后缀名是任意的)
                        2》/*
                        即:/和*不能同时使用                               */
            4)多种url-pattern的优先级:
                    1》不同方式:/*优先级大于*.后缀名            */
                    2》同种方式:最相似的为准。
            5)程序员编写的Servlet其实是由tomcat容器中Servlet引擎来处理的,引擎会产生
                    对应的HttpServletRequest、HttpServletResponse等对应传入到Servlet的doXxxx()等方法中
            6)允许在用户第一次方法之前就做一些初始化工作:
                        通过在web.xml中配置代码,让Servlet在部署时就创建。
                        即,加上:<load-on-startup>n</load-on-startup>//n为正整数,或者0,不能为负数
                            n越小,部署的时候,先加载。
                    eg:
                         <servlet>
                            <servlet-name>Demo1</servlet-name>
                            <servlet-class>cn.itcast.web.servlet.Demo1</servlet-class>
                            <load-on-startup>2</load-on-startup>
                          </servlet>
            7)url-pattern为/的servlet是一个缺省的servlet,专用于处理当前web应用下,访问路径错误的请求。
                    所以,只需要修改web.xml就可以设置一个缺省的servlet了。
                    且,任何web服务器都有一个缺省的servlet来处理。
                eg:
                    <servlet-mapping>
                    <servlet-name>Demo3</servlet-name>
                    <url-pattern>/</url-pattern>
                  </servlet-mapping>
                  
            补充:当访问Tomcat服务器中的某个静态HTML文件和图片时,实际是在访问这个缺省的Servlet,
                        只是此缺省的Servlet里面带有转向到静态HTML的功能而已。            
            8)每个线程会共享同一个Servlet的实例变量,所以要对临界资源进行加锁的操作。
                    产生线程安全问题的条件(缺一不可):
                        1》单例
                        2》实例变量
                        3》实例变量进行修改操作
                    解决办法:
                        1》通过加锁的方式,对敏感数据块进行代码的同步。
                        2》过时的方式:实现类SingleThreadModel(实际运行会出错。)

  • 相关阅读:
    document.getElementById("mytxt").style.left=""style.left在IE的FF中注意
    asp.net 用户控件中 使用相对路径的解决方法 图片路径问题(用户控件、图片路径) ,ResolveUrl
    探索 Block (一) (手把手讲解Block 底层实现原理)
    iOS 多线程开发 (概念与API简介)
    iOS 性能小点
    iOS runtime (二)(runtime学习之AutoCoding源码分析)
    探索 NSRunLoop (二)(NSRunLoop 自己动手实现SimpleRunLoop)
    iOS NSNotificationCenter (自己实现一个通知中心XMCNotificationCenter)
    iOS runtime (三)(runtime学习之YYModel源码分析)
    iOS runtime(一)(runtime 分析理解)
  • 原文地址:https://www.cnblogs.com/SkyGood/p/3960820.html
Copyright © 2011-2022 走看看