方法1:web服务启动时自动加载servlet
就是写一个servlet,在init()方法中写好想要执行的程序,
同时,在web.xml配置文件中指出
<servlet> <servlet-name>XXXX</servlet-name> <servlet-class>XXXX</servlet-class> <load-on-startup>1</load-on-startup></servlet>
其中粗体部分即可实现tomcat启动时执行该servlet,Jboss中同样适用~
load-on-startup的值必须为整数
当load-on-startup值为负整数或者未指定时,容器在该servlet被调用时加载
当其值为0和正整数时,容器启动时加载,值越小,优先级越高
方法2:让服务启动或停止时自动执行代码
原理是使用servlet的监听器,建立一个servlet类并且实现ServletContextListener 接口:
import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class TestListener implements ServletContextListener { public void contextInitialized(ServletContextEvent event) { //启动时要自动执行的代码
} public void contextDestroyed(ServletContextEvent event) { //停止时要自动执行的代码
}}
在web.xml中添加一个listener ,以便让该servlet类自动执行,在web.xml中添加如下内容:
< listener > < listener-class > TestListener </ listener-class > </ listener >listener-class里面的内容就是刚才添加的servlet类
例:
web.xml如下
<!--
<!- 初始化数据库 ->
<listener>
<listener-class>main.java.com.qxbg.init.InitDataSource</listener-class>
</listener>
<!- 初始化页面模块显示的数据 ->
<listener>
<listener-class>main.java.com.qxbg.init.InitIndexShowBox</listener-class>
</listener>
<servlet>
<servlet-name>initdata</servlet-name>
<servlet-class>main.java.com.qxbg.init.Init</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
-->
<servlet>
<servlet-name>InitialSetServlet</servlet-name>
<servlet-class>main.java.com.qxbg.init.InitIndexShowBox</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
类代码如下:
InitDataSource.java
package main.java.com.qxbg.init;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import net.abbp.dao.spring.manager.DataSourceManager;
/**
* 初始化数据源
*
* @version 1.0
* @author <a herf="chenbin_2008@126.com">chenbin</a>
* @since EQ 1.0
*
* <pre>
* 历史:
* 建立: Jul 17, 2012 chenbin
* </pre>
*/
public class InitDataSource implements ServletContextListener {
public InitDataSource(){
System.out.println("InitDataSource被实例化了");
DataSourceManager.INSTANCE.initDataSources(this.getClass().getClassLoader().getResourceAsStream(
"resources/datasource.xml"));
}
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("InitDataSource被实例化了");
DataSourceManager.INSTANCE.initDataSources(this.getClass().getClassLoader().getResourceAsStream(
"resources/datasource.xml"));
}
public void contextDestroyed(ServletContextEvent arg0) {
}
public static void main(String[]s){
new InitDataSource();
}
}
InitIndexShowBox.java
package main.java.com.qxbg.init;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import main.java.com.qxbg.model.entity.Content;
import main.java.com.qxbg.utils.ContentShowBox;
import net.abbp.dao.DaoFactory;
import net.abbp.dao.IDao;
import net.abbp.dao.condition.DefaultCondition;
import net.abbp.dao.condition.ICondition;
import net.abbp.dao.spring.manager.DataSourceManager;
/**
* 服务器启动时初始化模块数据
*
* @version 1.0
* @author <a herf="chenbin_2008@126.com">chenbin</a>
* @since EQ 1.0
*
* <pre>
* 历史:
* 建立: Aug 1, 2012 chenbin
* </pre>
*/
public class InitIndexShowBox extends HttpServlet {
private static final long serialVersionUID = 4907822263290955712L;
private static String authorityconf = "WEB-INF/authority.txt";
public void init() throws ServletException {
ServletContext context = this.getServletContext();
System.out.println("InitDataSource被实例化了");
DataSourceManager.INSTANCE.initDataSources(this.getClass().getClassLoader().getResourceAsStream(
"resources/datasource.xml"));
// 用户审批信息
ContentShowBox userBox = this.initUserBox();
// 区县工作动态
ContentShowBox qxWorkBox = this.initQxWorkBox();
// 科研动态
ContentShowBox scienticBox = this.initScientic();
// 其他
ContentShowBox otherBox = this.initOther();
// 新闻信息通知
ContentShowBox newsInfoBox = this.initNewsInfo();
//存入map
Map<String,ContentShowBox> boxMap = new HashMap<String,ContentShowBox>();
boxMap.put("userBox", userBox);
boxMap.put("QxWorkBox", qxWorkBox);
boxMap.put("scienticBox", scienticBox);
boxMap.put("otherBox", otherBox);
boxMap.put("newsInfoBox", newsInfoBox);
// 将map存入Applocation
context.setAttribute("initBox",boxMap);
// context.setAttribute();
// context.setAttribute();
// context.setAttribute();
// context.setAttribute();
}
// 初始化用户审批信息
private ContentShowBox initUserBox() {
ContentShowBox box = new ContentShowBox();
// ......
// box = this.get5(list);
return box;
}
// 初始化新闻信息通知
private ContentShowBox initNewsInfo() {
ContentShowBox box = new ContentShowBox();
List<Content> list = new ArrayList<Content>();
list = this.selectBySql("新闻信息通知");
box = this.get5(list);
return box;
}
// 初始化区县工作动态
private ContentShowBox initQxWorkBox() {
ContentShowBox box = new ContentShowBox();
List<Content> list = this.selectBySql("区县工作动态");
box = this.get5(list);
return box;
}
// 初始化科研动态
private ContentShowBox initScientic() {
ContentShowBox box = new ContentShowBox();
List<Content> list = this.selectBySql("科研动态");
box = this.get5(list);
return box;
}
// 初始化其他
private ContentShowBox initOther() {
ContentShowBox box = new ContentShowBox();
List<Content> list = this.selectBySql("其他");
box = this.get5(list);
return box;
}
/**
* 取出最近的新闻信息
*
* @param list
* @return
*/
private ContentShowBox get5(List<Content> list) {
ContentShowBox box = new ContentShowBox();
// 获得‘容量’
int maxSize = box.getMaxSize();
for (int i = 0; i < maxSize; i++) {
box.add(list.get(i));
}
return box;
}
/**
* 根据分类条件查询出对应的数据
*
* @param clas
* @return
*/
private List<Content> selectBySql(String clas) {
List<Content> list = new ArrayList<Content>();
IDao dao = DaoFactory.INSTANCE.newDao();
ICondition icn = new DefaultCondition("clas", clas);
list = dao.query(Content.class, icn);
return list;
}
}
分享到:
相关推荐
<description>Socket服务随web启动而启动 <listener-class>service.ServerSocketListener ``` 值得注意的是,尽管也可以通过`<servlet>`标签来实现类似的功能,但这种方式在服务器关闭时可能会导致资源未被...
在Java Web开发中,我们经常需要在服务器启动时自动加载特定的Servlet,并让它们执行一些初始化操作或定时任务。这通常涉及到对Web应用的配置文件`web.xml`以及Servlet类本身的编程。以下将详细讲解如何实现这个功能...
在Web服务开发中,Servlet是Java Web应用的核心组件之一,用于处理HTTP请求并响应客户端。在Web服务启动时自动...这样,Web服务启动时就会自动加载Servlet并执行相应的数据库操作,提高了系统的响应速度和用户体验。
总结来说,这个Java Web项目的自动打补丁包流程利用了Maven进行项目构建,通过bat脚本启动自动化,使用SVN记录版本变化,而Python脚本则负责解析日志并智能地更新指定文件。这种自动化方法大大提高了开发效率,降低...
Java Web项目的自动部署是开发流程中的重要一环,它能够极大地提高开发效率,减少手动部署的时间和出错可能性。在本项目中,我们利用Apache Tomcat服务器进行自动化部署,具体的步骤和关键知识点如下: 首先,我们...
### Jenkins自动化部署流程详解——Web项目 #### 一、项目背景与目标 随着软件开发项目的不断迭代和更新,持续集成和持续部署(CI/CD)成为提升开发效率和软件质量的关键手段之一。Jenkins作为一款开源的持续集成...
5. **构建项目**:执行`mvn clean package`命令,Maven会清理之前的构建产物,编译源代码,运行测试,并最终打包成WAR文件。 6. **部署到Tomcat**:将生成的WAR文件(如`target/webdemo.war`)复制到Tomcat的`...
这些任务通常与Web应用一起运行,即当Web容器启动时自动初始化并开始执行。本文将详细介绍如何实现定时启动任务,并确保其能够跟随Web容器一起启动。 #### 一、实现原理 要实现定时启动任务跟随Web容器启动,主要...
除了基本的启动方式,Jetty插件还支持许多高级特性,如热部署(自动检测代码变化并重新加载)、配置自定义服务器端口、添加额外的JAR到类路径等。通过调整`jetty-maven-plugin`的配置,可以满足各种复杂的需求。 ...
【程序启动自动执行sql升级脚本】是一种自动化数据库更新的机制,旨在解决开发过程中sql脚本管理和执行的混乱情况。这种机制通常应用于敏捷开发环境,其中数据库结构会随着业务需求频繁变化,需要定期进行更新。 在...
这样,当项目启动时, InitListener 类的 contextInitialized 方法将被执行,从而执行指定的方法。 总结来说,使用 ServletContextListener 可以轻松地实现 Java 项目启动时执行指定方法。通过实现这个接口,我们...
1. 新建项目:在Eclipse中选择“文件”->“新建”->“动态Web项目”,输入项目名称,选择目标运行时(如Tomcat或WebLogic),设置项目属性。 2. 结构配置:项目创建后,会自动生成标准目录结构,包括src/main/java...
当你保存或修改了代码后,Eclipse会自动编译修改过的类文件。如果没有集成开发环境,你可以使用命令行工具如`javac`来手动编译。确保你的项目目录结构遵循标准的Java Web项目结构,例如,Java源代码放在`src/main/...
9. **编写按钮执行代码**:实现当用户点击按钮时,脚本能够读取输入参数,更新工程文件,然后调用批处理命令执行ANSYS Workbench脚本。 10. **处理并发问题**:为了避免多个用户同时运行导致的冲突,可以设定全局...
要实现在Tomcat启动时自动执行的Servlet,我们需要在Servlet的`init()`方法中添加代码来创建一个后台线程。`init()`方法是Servlet生命周期中的初始化阶段,当Servlet被加载时,Tomcat会调用这个方法。我们可以在`...
【标题】:“使用Resin在IDE中快速启动Web项目” 【描述】:Resin是一款高性能、轻量级的Java应用服务器,尤其适用于处理Web应用程序。它以其高效的Servlet和JSP支持而闻名,对于开发和部署Java Web项目非常方便。...
特别是在Web应用开发中,自动化测试工具能够帮助我们快速地验证代码的功能和性能。谷歌浏览器(Chrome)因其速度快、性能稳定而广受欢迎,同时也提供了专门用于自动化测试的驱动程序——ChromeDriver。本篇文章将...
选择正确的JRE版本对于运行和部署Web项目至关重要,因为不同的Web应用服务器可能需要特定版本的Java环境。 3. **配置编译文件**: 在“Project Structure”窗口中,切换到“Project”选项卡,选择合适的项目SDK,...
本教程将深入讲解如何利用IntelliJ IDEA创建一个完整的Java Web项目,并提供源代码供学习参考。 首先,我们需要了解Java Web项目的组成部分。它通常包含前端资源(HTML、CSS、JavaScript)、后端服务器逻辑(Java ...
内嵌式Tomcat是开发Java Web应用时常用的一种方式,它允许我们将Tomcat服务器与应用程序打包在一起,无需单独部署到外部服务器。这种方式尤其适合于快速开发、测试和演示,因为它简化了部署流程,并且便于自动化构建...