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

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

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

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

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

  关于线程安全:

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

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

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

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


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

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

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

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

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

 public User{//只有读的方法,没用写的方法
private String name;
private int age; public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
}

1.Servlet与线程安全

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

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

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

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

 <servlet>
<servlet-name>FServlet</servlet-name>
<servlet-class>one.servlet.FServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>FServlet</servlet-name>
<url-pattern>/FServlet</url-pattern>
</servlet-mapping>

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

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

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

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

 <servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-mapping>/AServlet</url-mapping>
<url-mapping>/BServlet</url-mapping>
</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路径。

     <servlet>
<servlet-name>default</servlet-name>//它的优先级最低,如果一个请求没有人处理,那么它来处理!它显示404。
<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>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
//------------------------------------------------------------ <servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
//什么情况下会访问DefaultServlet??
//当访问路径不存在时,会执行该Servlet!其实我们在访问index.html时也是在执行这个Servlet。

     <servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
//========================================= <servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
//可以通过扩展名.jsp或.jspx来访问JspServlet

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

5.Servlet与反射

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

Servlet(自己实现的Servlet)细节的更多相关文章

  1. Servlet开发中注意的细节问题

    客户端访问服务器的时候是通过URL访问的,所以我们要想用浏览器访问我们的Servlet的时候,我们就需要将我们的Servlet映射到一个URL上(通过我们的web.xml文件中的<servler ...

  2. Servlet主要相关类核心类 容器调用的过程浅析 servlet解读 怎么调用 Servlet是什么 工作机制

      WEB简介   Web项目 是 B/S结构 浏览器/服务器模式的 浏览器发起请求,服务器作出响应   请求的发起和响应使用HTTP协议进行通讯 所谓协议也就是一种固定格式   而Socket是应用 ...

  3. 深入Jetty源码之Servlet框架及实现(Servlet、Filter、Registration)

    概述 Servlet是Server Applet的缩写,即在服务器端运行的小程序,而Servlet框架则是对HTTP服务器(Servlet Container)和用户小程序中间层的标准化和抽象.这一层 ...

  4. [原创]java WEB学习笔记04:Servlet 简介及第一个Servlet程序(配置注册servlet,生命周期)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. 为什么要有 Servlet ,什么是 Servlet 容器,什么是 Web 容器?

    本文已收录至 https://github.com/yessimida/yes ,这里有我的所有文章分类汇总,欢迎 star! 以下代码相信大家都很熟悉,大学时学 Java Web 都写过这样的代码. ...

  6. 【原】tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决

    现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...

  7. Java中前台JSP请求Servlet实例(http+Servlet)

    1.前台jsp代码 himily.jsp,定义了用户名和密码两个输入框,使用post方式提交:/order-web/HimilyServlet其中order-web为站点名称,HimilyServle ...

  8. java编译错误 程序包javax.servlet不存在javax.servlet.*

    java编译错误 程序包javax.servlet不存在javax.servlet.* 编译:javac Servlet.java 出现 软件包 javax.servlet 不存在 软件包javax. ...

  9. JavaWeb学习之什么是Servlet、如何使用servlet、为什么这样使用、servlet的虚拟路径、关于缺省Servlet(2)

    1.什么是Servlet? * 服务器端Java程序,servlet需要交给服务器来运行. * 与javax.servlet.Servlet接口有关的java程序 2.如何使用servlet?[必须] ...

  10. JavaWeb学习之Servlet(三)----Servlet的映射匹配问题、线程安全问题

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140529.html 一.Servlet映射匹配问题: 在第一篇文章中的 ...

随机推荐

  1. 帆软报表(finereport) 动态报表

    动态表实现了不同的人根据需要选择不同的表进行查看,从而提高查询效率 在定义数据集时,通过if函数来判断参数的值从而来实现调用不同的数据表 如直接将SQL语句定义成:SELECT * FROM ${if ...

  2. 51nod--1185 威佐夫游戏 V2 (博弈, 乘法模拟)

    题目: 1185 威佐夫游戏 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 有2堆石子.A B两个人轮流拿,A先拿.每次可以从一堆中取任意个或从2堆中 ...

  3. 【原创】Linux基础之linux服务器服务器间拷贝文件

    linux服务器服务器间拷贝文件,有几种方式: 1 如果是定时任务,可以用rsync 2 如果是基于ssh登录,可以用scp,优点是可以实现远程到远程的拷贝,缺点是需要账号密码 upload: scp ...

  4. docker简单介绍----镜像和容器管理

    docker可以分为三部分:docker镜像   docker仓库  docker容器 docker镜像:一个image可以包含一个镜像,也可以理解为一个系统模板,里面安装了相关应用,也可以是纯净版的 ...

  5. 克隆虚拟机+Linux互相登录+秘钥认证(四)

    1.虚拟机右键管理_克隆 修改虚拟机名称后完成! 2.开机启动虚拟机 随时保存快照 3.开启两台虚拟机,进行互相登录切换!(W命令查看系统负载) 补充: IP登录: ssh IP: 例如:ssh 19 ...

  6. LVS前奏-ARP知识回顾

    什么是ARP协议: ARP协议,全称“Address Resolution Protocol”(地址解析协议),使用ARP协议,可以实现将IP地址解析成对应主机的物理地址(MAC地址) 为了能够正确的 ...

  7. Zabbix告警发送邮件时附带性能图

    脚本处理逻辑分析: 通过zabbix传递给脚本的message参数,筛选出报警信息的itemid; 通过itemid获取到图片并保存; 将报警信息和图片组装成html; 发送邮件. 后续脚本里面的处理 ...

  8. hdu4352 数位dp+状态压缩+一个tip

    按照nlogn求lis的方法,把lis的状态压缩了,每次新加一个数就把它右边第一个数的位置置为0,然后把这个数加进去 一个需要注意的地方,如果前面都是0,那么状态s中代表0的位置不可以是1,因为这种情 ...

  9. 关于CentOS

    dd if=/dev/cdrom of=centos72.iso 自动挂载镜像: vi /etc/fstab /root/centos72.iso   /mnt/cdrom   iso9660  de ...

  10. 在.NET开发中的单元测试工具之(1)——NUnit

    NUnit介绍 NUnit是一个专门针对于.NET来写的单元测试框架,它是xUnit体系中的一员,在xUnit体系中还有针对Java的JUnit和针对C++的CPPUnit,在开始的时候NUnit和x ...