关于web项目中启动加载

本文介绍了一种在Web应用启动时主动加载特定资源的方法。通过在web.xml中配置带有load-on-startup属性的servlet,可以实现不同优先级的资源加载。此方法适用于需要在应用启动初期完成初始化工作的场景。
近期项目中需要用到容器在web应用启动的时候主动加载特定的资源(如配置文件等)。其做法有下面小结。
在web.xml中引入执行相应功能的servlet,代码片段如下:
<servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>com.util.testServlet</servlet-class>
<init-param>
<param-name>xxxx</param-name>
<param-value>xxxx</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
代码中的元素作用是:
load-on-startup 元素在web应用启动的时候指定了servlet被加载的顺序,它的值必须是一个整数。该整数的设置有3种情况:1、如果它的值是一个负整数或是这个元素不存在,那么容器会在该servlet被调用的时候,加载这个servlet,正数的值越小,启动该servlet的优先级越高。;2、如果值是正整数或零,容器在配置的时候就加载并初始化这个servlet,容器必须保证值小的先被加载;3、如果值相等,容器可以自动选择先加载谁。
### ### Web项目启动的查找方法 在Web项目中,启动的查找通常取决于所使用的框架或服务器配置。对于传统的Java Web项目,没有一个显式的“启动”,而是通过 `web.xml` 文件定义的部署描述符来配置Servlet、Filter、Listener等组件。Web容器(如Tomcat)在启动时会加载这些配置,并根据需要初始化相应的。 对于现代的Spring Boot项目启动通常是一个带有 `@SpringBootApplication` 注解的,并通过 `main` 方法调用 `SpringApplication.run()` 来启动应用。该通常位于项目的主包路径下,例如: ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 在传统的Spring MVC项目中,启动可能是一个实现了 `WebApplicationInitializer` 接口的。该负责注册 `DispatcherServlet` 和 `ContextLoaderListener` 等核心组件。例如: ```java public class MyWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext container) { // 创建根应用上下文 AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); rootContext.register(AppConfig.class); container.addListener(new ContextLoaderListener(rootContext)); // 创建DispatcherServlet ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(rootContext)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); } } ``` 此方法适用于基于Java配置的Spring MVC项目,无需 `web.xml` 文件。Web容器在启动时会自动检测并调用 `onStartup` 方法[^3]。 对于非Spring框架的Java Web项目启动的查找可能涉及 `ServletContextListener` 或 `HttpServlet` 的配置。在 `web.xml` 中定义的 `listener` 或 `servlet` 会在服务器启动时被加载。例如: ```xml <listener> <listener-class>com.example.MyContextListener</listener-class> </listener> ``` 该配置会在Tomcat启动加载 `MyContextListener` ,并调用其 `contextInitialized` 方法。此通常用于执行初始化逻辑或注册全局资源。 在IDEA中配置Web项目时,项目的部署结构和资源路径也会影响启动的查找。例如,`web.xml` 文件通常位于 `src/main/webapp/WEB-INF` 目录下,而源代码和资源文件则分别存放在 `src/main/java` 和 `src/main/resources` 目录中。IDEA 会根据这些配置在运行时加载相应的和资源[^2]。 如果项目启动时遇到路径问题或找不到资源的情况,可以通过检查 `build` 目录下的 `classes` 文件夹来确认编译后的 `.class` 文件是否正确生成,并确保 `web.xml` 和其他配置文件的路径正确[^4]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值