• javaweb 开发总结五-----servlet开发(一)


    一 servlet运行过程

    Servlet程序由web服务器调用,web服务器收到客户端的servlet访问请求后

    1.web服务器首先检查是否已经装载 并创建了 该servlet的实例对象,如果是,直接执行第四部,否则,执行第二部

    2.装载并创建该Servlet的一个实例对象

    3.调用servlet实例对象的init()方法

    4.创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象

      作为参数传递进去

    5.web应用程序被停止或重新启动之前,servlet引擎将卸载servlet,并在卸载之前调用servlet的destroy()方法

    4.1Servlet接口实现类

    Servlet接口SUN公司定义了连个默认实现类: 分别为GenericServlet  HttpServlet

    HttpServlet能够处理HTTP请求的servlet,他在原有servlet接口上添加一些与HTTP协议处理方法,他比servlet接口的功能更加强大。因此开发人员在编写servlet时,通常应该

    继承这个类,而避免直接去实现servlet接口

    HttpServlet在实现servlet接口时,复写了service方法,该方法体内的代码会自动判断的用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要复写doGet 或 doPost方法,而不要复写service方法

    五 servlet开发注意细节

    5.1Servlet访问URL映射配置

       由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成

     <servlet>元素用于注册servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置servlet的注册名称和Servlet的完整类名

     一个<servlet-mapping>元素用于映射一个已注册的servlet的一个对外访问路径,它包含了两个子元素:<servlet-name>和<url-pattern>,分别用于指定

    Servlet的注册名称和Servlet的对外访问路径。例如:

    <servlet>

      <servlet-name>ServletDemo1</servlet-name>

      <servlet-class>gacl.servlet.study.ServletDemo1</servlet-class>

    </servlet>

    <servlet-mapping>

      <servlet-name>ServletDemo1</servlet-name>

      <url-pattern>/Servlet/ServletDemo1</url-pattern>

    </servlet-mapping>

    同一个Servlet可以被映射到多个url上,几多个<servlet-mapping>元素的<servlet-name>子元素的设置可以是同一个servlet的注册名

    <servlet>

      <servlet-name>ServletDemo1</servlet-name>

      <servlet-class>gacl.servlet.study.ServletDemo1</servlet-class>

    </servlet>

    <servlet-mapping>

      <servlet-name>ServletDemo1</servlet-name>

      <url-pattern>/1.htm</url-pattern>

    </servlet-mapping>

    <servlet-mapping>

      <servlet-name>ServletDemo1</servlet-name>

      <url-pattern>/2.jsp</url-pattern>

    </servlet-mapping>

    <servlet-mapping>

      <servlet-name>ServletDemo1</servlet-name>

      <url-pattern>/3.php</url-pattern>

    </servlet-mapping>

    <servlet-mapping>

      <servlet-name>ServletDemo1</servlet-name>

      <url-pattern>/Servlet/ServletDemo1</url-pattern>

    </servlet-mapping>

     通过上面的配置,当我们想访问servletDemo1的servlet,可以使用如下几个地址去访问

    http://localhost:8080/Javaweb_Servlet_study_20140531/servlet/ServletDemo1

    http://localhost:8080/Javaweb_Servlet_study_20140531/1.htm

    http://localhost:8080/Javaweb_Servlet_study_20140531/2.jsp

    http://localhost:8080/Javaweb_Servlet_study_20140531/3.php

     5.2 Servlet与普通java类区别
    Servlet是一个供其他java程序(servlet引擎)调用的java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。针对客户端的多次servlet请求,通常情况下,服务器只会创建一个servlet实力对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其他请求服务,直至web容器退出,servlet实例对象才会销毁。
      在servlet的整个生命周期内,servlet的init方法只被调用一次,而对一个servlet的每次访问请求都导致servlet引擎调用一次servlet的service方法。对于每次访问请求,Servlet引擎都会创建一个新的httpServletRequest请求对象和一个新的httpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法。
    service方法在根据请求方式分别调用doxxx方法
     
    5.5  Servlet的线程安全问题
       当多个客户端并发访问同一个Servlet时,web服务器会为每一个客户端的访问请求创建一个线程,并在这个线程上调用Servlet的service方法,因此service方法内如果访问了同一个资源的话,就有可能引发线程安全问题。例如下面的代码:
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Mysql_常规操作
    三剑客
    Nginx_安全2
    shell_常规小脚本
    redis数据库持久化
    redis数据库操作
    keepalived高可用lvs集群
    ansible的roles角色
    keepalived高可用
    keepalived概念
  • 原文地址:https://www.cnblogs.com/csli/p/6894148.html
Copyright © 2020-2023  润新知