• Servlet(自己实现的Servlet)细节


      Java中无状态的对象就是指某种没用任何属性的仅仅由方法组成的对象。

        *无状态:无状态方法的好处之一,就是在各种环境下,都可以安全调用。衡量一个方法

        是否有状态的,就看它是否改动了其他东西。

        *有状态:有状态的Java对象的状态用属性来表示,有属性,也就是有对象的变量,就表

        示是有状态的,有状态就是线程不安全的。

      关于线程安全:

        1)常量始终是线程安全的,因为只存在读操作。

        2)每次调用方法前都新建一个实例是线程安全的,因为不会访问共享的资源。

        3)局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部变量,它

         不是共享资源,局部变量包括方法的参数变量和方法内变量。


    *不要在Servlet中创建成员!创建局部变量即可!(初级的人)

    1 XXServlet extends HttpServlet{
    //不要在这些地方创建成员(方法和属性)
    2 doGet(){ 3 String str="xxx";//局部变量 4 ... 5 } 6 }

    *可以创建无状态成员!(入门了的人)

    1 public User{
    2  //里面无属性,只有方法
    3  public void fun(){
    4    System.out.println("hahahaha");
    5  }
    6 }
    1 public XXServlet extends HttpServlet{
    2  //类的成员
    3  private User user;//该引用类中只存在方法,即无状态的成员
    4  
    5  doGet(){...}
    6 }

    *可以创建有状态的成员,但状态必须为只读的!(熟练之后的人)

     1 public User{//只有读的方法,没用写的方法
     2  private String name;
     3  private int age;
     4 
     5  public String getName(){
     6   return this.name;
     7  }  
     8  public int getAge(){
     9    return this.age;
    10  }
    11 }

    1.Servlet与线程安全

      因为一个类型的Servlet只有一个实例对象,那么就有可能会出现一个Servlet同时处理多个请求,那么Servlet “不是线程安全的” 。这说明Servlet的工作效率很高,但是存在线程安全问题!

      所以我们不应该在Servlet中随便创建成员变量,因为可能会存在一个线程对这个成员变量进行写操作,另一个线程对这个成员变量进行读操作。

    2.让服务器在启动时就创建Servlet

      默认情况下,服务器会在某个Servlet第一次收到请求时创建它。也可以在web.xml中对Servlet进行配置,使服务器启动时就创建Servlet。

     1 <servlet>
     2  <servlet-name>FServlet</servlet-name>
     3  <servlet-class>one.servlet.FServlet</servlet-class>
     4  <load-on-startup>0</load-on-startup>
     5 </servlet>
     6 
     7 <servlet-mapping>
     8  <servlet-name>FServlet</servlet-name>
     9  <url-pattern>/FServlet</url-pattern>
    10 </servlet-mapping>

    在<servlet>中配置<load-on-startup>,其中给出一个一个非负整数!是servlet的创建顺序(从小到大)。

    3.<url-pattern>  -->url的模式(我自己的理解)

      <url-pattern>是<servlet-mapping>的子元素,用来指定Servlet的访问路径,即URL。它必须是以 “/”开头!!!

    1)可以在<servlet-mapping>中给出多个<url-pattern>,例如:

    1 <servlet-mapping>
    2  <servlet-name>AServlet</servlet-name>
    3  <url-mapping>/AServlet</url-mapping>
    4  <url-mapping>/BServlet</url-mapping>
    5 </servlet-mapping>

    那么这说明一个Servlet绑定了两个URL,无论访问/AServlet还是/BServlet,访问的都是AServlet。

    2)还可以在<url-pattern>中使用通配符,所谓通配符就是星号 “*” ,星号可以匹配任何URL前缀或后缀,使用通配符可以命名一个Servlet绑定一组URL,例如:

    ##<url-pattern>/servlet/*<url-pattern> : /servlet/a,/servlet/b,都能匹配/servlet/*绑定的Servlet;(路径匹配)

    ##<url-pattern>*.do<url-pattern> : /abc/def/ghi.do  , /a.do ,都匹配*.do;(扩展名匹配)

    ##<url-pattern>/*</url-pattern> : 匹配所有URL;

      请注意,通配符要么为前缀,要么为后缀,不能出现在URL中间的位置,也不能只有通配符。

     通配符是一种模糊匹配URL的方式,如果存在更具体的<url-pattern>,那么访问路径会去匹配具体的<url-pattern>。


    4.web.xml文件的继承(了解)

      每个完整的JavaWeb应用中都需要有web.xml,但我们不知道所有的web.xml文件都有一个公同的父文件,它在Tomcat的config/web.xml路径。

     1     <servlet>
     2         <servlet-name>default</servlet-name>//它的优先级最低,如果一个请求没有人处理,那么它来处理!它显示404。
     3         <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
     4         <init-param>
     5             <param-name>debug</param-name>
     6             <param-value>0</param-value>
     7         </init-param>
     8         <init-param>
     9             <param-name>listings</param-name>
    10             <param-value>false</param-value>
    11         </init-param>
    12         <load-on-startup>1</load-on-startup>
    13     </servlet>
    14 //------------------------------------------------------------
    15 
    16     <servlet-mapping>
    17         <servlet-name>default</servlet-name>
    18         <url-pattern>/</url-pattern>
    19     </servlet-mapping>
    20 //什么情况下会访问DefaultServlet??
    21 //当访问路径不存在时,会执行该Servlet!其实我们在访问index.html时也是在执行这个Servlet。

     

     1     <servlet>
     2         <servlet-name>jsp</servlet-name>
     3         <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
     4         <init-param>
     5             <param-name>fork</param-name>
     6             <param-value>false</param-value>
     7         </init-param>
     8         <init-param>
     9             <param-name>xpoweredBy</param-name>
    10             <param-value>false</param-value>
    11         </init-param>
    12         <load-on-startup>3</load-on-startup>
    13     </servlet>
    14 //=========================================
    15 
    16     <servlet-mapping>
    17         <servlet-name>jsp</servlet-name>
    18         <url-pattern>*.jsp</url-pattern>
    19         <url-pattern>*.jspx</url-pattern>
    20     </servlet-mapping>
    21 //可以通过扩展名.jsp或.jspx来访问JspServlet

    例如:请求http://localhost:8080/XJS_Servlet1/index.jsp  ,然后是请求的一个JspServlet,这个JspServlet把动态资源转换成静态资源,然后通过response响应------得到的是一个html页面。

    5.Servlet与反射

    就是在<servlet-class>全类名</servlet-class>  利用反射得到该类(Servlet)的信息,创建该类的实例以及其他信息 --->是Tomcat来完成的

  • 相关阅读:
    久违了,我的博客
    眼前一亮的WI微逸输入法
    致第一次安装(yong)小小输入法的你
    输入法使用体验及引申
    小小输入法使用小记
    RIME-使用小心得
    FreeRTOS run on eclipse
    流行输入法使用小记
    FreeBSD虚拟机——小折腾
    vmware版本选择
  • 原文地址:https://www.cnblogs.com/xjs1874704478/p/10761299.html
Copyright © 2020-2023  润新知