虽然Spring Boot火了一段时间,Spring在旧的项目中还是有不少的用武之地,在Tomcat中部署Spring也是比较基础的技能。
web.xml
web.xml是tomcat servlet容器部署的描述文件,在每个需要使用tomcta部署的应用中都需要有这个文件。
常见标签:
<context-param>
<servlet>
<filter>
<listner>
参考:http://wiki.metawerx.net/wiki/Web.xml
ContextLoaderListener
在旧的项目中,我们常看到ContextLoaderListener的这种用法:
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:applicationContext.xml </param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
它有两种用途:
绑定ApplicationContext的生命周期到ServletContext
自动的创建ApplicationContext,因此你不需要精确的指定去创建ApplicatiionContext,这是一种更方便的用法。
参考:https://stackoverflow.com/questions/11815339/role-purpose-of-contextloaderlistener-in-spring
实际上,我们还有几种其它的用法,并非要明确的指定ContextLoaderListener
另外用法1:
先在xml文件中指定一个Servlet,指定其name,然后在web.xml同目录下创建一个其名称后缀加上-servlet的文件。
如:
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
然后创建dispatcherServlet-servlet.xml,其与web.xml在同一目录
另外用法2:
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext.xml,classpath*:applicationContext-web.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
一个错误
还有今天一直碰到的一个错误,没来得及解决
image.png
Spring的项目中依赖了etcd,bean的配置文件里一些bean的配置比如redis的连接时动态配置的,而动态配置的属性要在生效之前从etcd中拉取配置。
老的项目代码写的有点乱,启动的时候没有加载etcd的配置,etcd相关的代码没有执行,弄了半天没弄好。
碰其它的代码有时候难免有些问题...
最后
今天碰了下一个比较老的项目,关于Tomcat的一些内容有些忘记了,简单记录一下。