Servlet自学第11讲:Servlet细节讲解

一个已注册的Servlet可以映射到不同的url-pattern

一个已经注册的Servlet可以被多次映射即:

<servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <!-- servlet的注册名 -->
    <servlet-name>MyServlet1</servlet-name>
    <!-- servlet类的全路径(包名+类名) -->
    <servlet-class>com.hsp.servlet.MyServlet1</servlet-class>
  </servlet>
<!-- 对一个已经注册的servlet的映射 -->
  <servlet-mapping>
  <!-- servelt的注册名 -->
    <servlet-name>MyServlet1</servlet-name>
  <!-- servlet的访问路径 -->
    <url-pattern>/MyServlet1</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
  <servlet-name>MyServlet1</servlet-name>
  <url-pattern>/hsp</url-pattern>
  </servlet-mapping>

当映射一个servlet时候,可以多层 比如
/servlet/index.html
从这里还可以看出,后缀名是 html不一定就是html,可能是假象。只是一个映射名字,而不代表HTML文件。

Servlet通配符问题

  1. 使用通配符在servlet映射到URL中
    有两种格式:
    第一种格式 .扩展名 比如 .do *.ss
    第二种格式 以 / 开头 同时以 /* 结尾 比如 /* /news/*
    通配符练习题:
     Servlet1 映射到 /abc/*
     Servlet2 映射到 /*
     Servlet3 映射到 /abc
     Servlet4 映射到 *.do

问题(面试题):
 当请求URL为“/abc/a.html”,“/abc/”和“/”都匹配,哪个servlet响应
Servlet引擎将调用Servlet1。
 当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应
Servlet引擎将调用Servlet3。
 当请求URL为“/abc/a.do”时,“/abc/”和“.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet1。
 当请求URL为“/a.do”时,“/”和“.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet2。
 当请求URL为“/xxx/yyy/a.do”时,“/”和“.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet2。

  1. 在匹配的时候,要参考的标准:
    (1) 看谁的匹配度高,谁就被选择
    (2) *.do 的优先级最低

使用Servlet应该注意些什么问题(线程问题、单例问题)

当Servlet被第一次访问后,就被加载到内存,以后该实例对各个请求服务.即在使用中是单例,会共享该Servlet的成员变量。
因为 Servlet是单例,因此会出现线程安全问题,比如:售票系统。如果不加同步机制,则会出现问题。
解决方法:如果一个变量需要多个用户共享,则应当在访问该变量的时候,加同步机制
synchronized (对象){
//同步代码
}
如果一个变量(局部变量)不需要共享,则直接在 doGet() 或者 doPost()定义.这样不会存在线程安全问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值