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(实际运行会出错。)

  • 相关阅读:
    网络流模型之二分图匹配问题
    省选测试8
    省选测试9
    省选测试7
    省选测试6
    网络流最大流、最小割学习笔记
    kruskal重构树学习笔记
    省选测试5
    Python 打包成exe 方式
    JQuery
  • 原文地址:https://www.cnblogs.com/SkyGood/p/3960820.html
Copyright © 2011-2022 走看看