servlet

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对象的功能。
相关推荐
范什么特西2 天前
idea里面jsp找不到图片
java·开发语言·servlet
多敲代码防脱发3 天前
Spring进阶(Bean的生命周期与Bean的后处理器)
java·服务器·开发语言·spring boot·spring·servlet
甲方大人请饶命3 天前
Java-面向对象进阶之接口与内部类
java·开发语言·servlet
解决问题no解决代码问题5 天前
Quartz 1.6.5
数据库·servlet·oracle
Linux运维技术栈5 天前
Jenkins服务器更新密钥后任务构建不了?排查实录与解决方案
服务器·servlet·jenkins
小碗羊肉7 天前
【JavaWeb | 第十一篇】文件上传(本地&阿里云OSS)
java·阿里云·servlet
橙淮8 天前
Servlet项目结构搭建指南
servlet
今天也是元气满满的一天呢9 天前
浏览器的常见报错解析(404、500等)
servlet
Simon523149 天前
常见404 500错误解析
网络·学习·servlet·html5
广师大-Wzx10 天前
JavaWeb:后端部分
java·开发语言·spring·servlet·tomcat·maven·mybatis