Tomcat web.xml中context-param,listener的作用及加载过程
<context-param>的作用:
web.xml的配置中<context-param>配置作用(可在listener和servlet中使用,而
ContextLoaderListener及contextConfigLocation则由spring mvc来实现,可读取applicationContext.xml等springbean配置
)
1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param>
2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文.
3.容器将<context-param></context-param>转化为键值对,并交给ServletContext.
4.容器创建<listener></listener>中的类实例,即创建监听.
5.在监听中会有contextInitialized(ServletContextEvent args)初始化方法,在这个方法中获得ServletContext = ServletContextEvent.getServletContext();
context-param的值 = ServletContext.getInitParameter("context-param的键");
6.得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早.
换句话说,这个时候,你对<context-param>中的键值做的操作,将在你的WEB项目完全启动之前被执行.
7.举例.你可能想在项目启动之前就打开数据库.
那么这里就可以在<context-param>中设置数据库的连接方式,在监听类中初始化数据库的连接.
8.这个监听是自己写的一个类,除了初始化方法,它还有销毁方法.用于关闭应用前释放资源.比如说数据库连接的关闭.
如:
-
<!-- 加载spring的配置文件 --> -
<context-param> -
<param-name>contextConfigLocation</param-name> -
<param-value>/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml,/WEB- -
INF/jason-servlet.xml</param-value> -
</context-param> -
<listener> -
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> -
</listener>
又如: --->自定义context-param,且自定义listener来获取这些信息
-
<context-param> -
<param-name>urlrewrite</param-name> -
<param-value>false</param-value> -
</context-param> -
<context-param> -
<param-name>cluster</param-name> -
<param-value>false</param-value> -
</context-param> -
<context-param> -
<param-name>servletmapping</param-name> -
<param-value>*.bbscs</param-value> -
</context-param> -
<context-param> -
<param-name>poststoragemode</param-name> -
<param-value>1</param-value> -
</context-param> -
<listener> -
<listener-class>com.laoer.bbscs.web.servlet.SysListener</listener-class> -
</listener>
自定义listener
-
public class SysListener extends HttpServlet implements ServletContextListener { -
private static final Log logger = LogFactory.getLog(SysListener.class); -
public void contextDestroyed(ServletContextEvent sce) { -
//用于在容器关闭时,操作 -
} -
//用于在容器开启时,操作 -
public void contextInitialized(ServletContextEvent sce) { -
String rootpath = sce.getServletContext().getRealPath("/"); -
System.out.println("-------------rootPath:"+rootpath); -
if (rootpath != null) { -
rootpath = rootpath.replaceAll("\\\\", "/"); -
} else { -
rootpath = "/"; -
} -
if (!rootpath.endsWith("/")) { -
rootpath = rootpath + "/"; -
} -
Constant.ROOTPATH = rootpath; -
logger.info("Application Run Path:" + rootpath); -
String urlrewrtie = sce.getServletContext().getInitParameter("urlrewrite"); -
boolean burlrewrtie = false; -
if (urlrewrtie != null) { -
burlrewrtie = Boolean.parseBoolean(urlrewrtie); -
} -
Constant.USE_URL_REWRITE = burlrewrtie; -
logger.info("Use Urlrewrite:" + burlrewrtie); -
其它略之.... -
} -
}
上面大致理解其作用和过程,后面在
<servlet>
<servlet-name>initExmple</servlet-name>
<servlet-class>com.servlet.Exmple</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
后在initExmple类中使用@Resource时总是出错,只能使用
WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
RedisUtil redisUtil = (RedisUtil)wac.getBean("redisUtil");才可以
@Resource
RedisUtil redisUtil;是会报javax.naming.NamingException: Cannot create resource instance异常
1、Servlet 三大组件 Servlet、Filter、Listener 在传统项目中需要在 web.xml 中进行相应的配置。Servlet 3.0 开始在 javax.servlet.annotation 包下提供 3 个对应的 @WebServlet、@WebFilter、@WebListener 注解来简化操作。
2、@WebServlet、@WebFilter、@WebListener 写在对应的 Servlet、Filter、Listener 类上作为标识,从而不需要在 web.xml 中进行配置了。
3、应用中这三个注解默认是不被扫描的,需要在项目启动类上添加 @ServletComponentScan 注解, 表示对 Servlet 组件扫描。
Servlet介绍
1.Servlet不是框架,它是java库里面的一个类,Servlet是服务器端运行的一个程序。
2.当web容器启动的时候并且执行的时候,Servlet类就会被初始化。
3.用户通过浏览器输入url时,请求到达Servlet来接收并且根据servlet配置去处理。
通常项目中会用到不同的web容器,我这里用到是比较常见的Tomcat。在eclipse里面创建一个java web项目,会有一个WEB-INF的文件夹,为了不轻易被外界访问到,这个文件夹底下的文件都是受保护的。文件夹中包括了一个很重要的配置文件,web.xml,我们要实现的不同Servlet也要在这里配置才能使用。servlet在web.xml中的配置如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
访问顺序为1—>2—>3—>4,其中2和3的值必须相同。
url-pattern 标签中的值是要在浏览器地址栏中输入的 url,可以自己命名,这个 url 访问名为 servlet-name 中值的 servlet,两个 servlet-name 标签的值必须相同,因为通过 servlet 标签中的 servlet-name 标签映射到 servlet-class 标签中的值,最终访问 servlet-class 标签中的 class。
<servlet>
<servlet-name>contextLoader</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>contextLoader</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/WEB-INF/jsp/login.jsp</welcome-file>
</welcome-file-list>(路径入口)
本文介绍了Tomcat web.xml中<context-param>和<listener>的作用及加载过程,如容器读取web.xml,创建ServletContext并处理参数和监听等。还提及Servlet三大组件的配置方式,从传统web.xml配置到Servlet 3.0注解简化,以及Servlet的基本概念和在web.xml中的配置示例。
1130

被折叠的 条评论
为什么被折叠?



