Servlet Config (熟练)
ServletConfig对象对应web.xml文件中的<servlet>元素。例如你想获取当前Servlet在web.xml文件中的配置名,那么可以使用servletConfig.getServletName()方法获取!
你不能自己去创建ServletConfig对象,Servlet的init()方法的参数就是ServletConfig类型的。Tomcat在调用init()方法时,会传递ServletConfig对象。你可以在init()方法中使用它!
XML
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>cn.tx.servlet.Servlet1</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>txjava</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
XML
String username = Cservletonfig.getInitParameter("username");
System.out.println("username:"+username);
Enumeration<String> parameterNames = servletConfig.getInitParameterNames();
while (parameterNames.hasMoreElements()){
String element = parameterNames.nextElement();
System.out.println(element+":"+servletConfig.getInitParameter(element));
}
添加了两个初始化参数,第一个参数的名称为paramName1,第一个参数的值为paramValue1;第二个参数的名称为paramName2,第二个参数值为paramValue2。
在<servlet>元素中可以加载多个<init-param>,每个<init-param>表示一个参数。<init-param>下有两个子元素:<param-name>和<param-value>,其中<param-name>表示参数的名称,而<param-value>元素参数的值。
注意,<init-param>是添加到<servlet>元素中,而不是<servlet-mapping>中。
使用ServletConfig对象的getInitParameter(String paramName)方法可以获取指定参数名称的参数值。getInitParameterNames()方法返回所有参数的名字,返回值类型为Enumeration。
S ervlet 路径映射(熟练)
关于Url-Pattern的配置:
- 完全路径匹配 以/开头 例如 /aaa /aaa/bbb
- 目录匹配 以/开头 例如 /aaa/* /*
- 扩展名匹配 不能以/开头 例如 *.do *.action ....
优先级: 完全路径匹配 > 目录匹配 > 扩展名匹配
经典错误: /*.do
举例:
对于如下的一些映射关系:
- Servlet11 映射到 /abc/*
- Servlet22 映射到 /*
- Servlet33 映射到 /abc
- Servlet44 映射到 *.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。
服务器端路径 /demo4 (转发、包含...)
相对路径和绝对路径( 熟练 )
Java中使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的!
我们以下面的项目路径来进行举例:
绝对路径
绝对路径是指目录下的绝对位置,直接到达目标位置
带有协议完整路径 (跨网站) http://localhost/day5/hello
以/ 开始路径 (同一个站点内) : /day5/hello
服务器端和客户端对于/ 的区别
客户端访问路径:/day5/hello
服务器内部路径:/hello, 多用于服务器跳转, 页面包含(jsp)
测试结果
Servl etContext (熟练)
S ervlet Context 介绍
ServletContext是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。

- WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
- 由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
- 查看ServletContext API文档,了解ServletContext对象的功能。