场景:
目前公司部署web项目比较频繁,而且服务器网速比较慢,每次升级全量web项目比较耗时,所以能不能把通用的jar挪出来以便下次不用每次打包升级上去。
解决方法:
1. 备份一份通用的jar,每次升级时将通用的jar删除然后上传,然后部署时将jar复制到web项目下。不过每次升级需要挪出来。
2. 备份一份通用的jar,每次升级时将通用的jar删除然后上传,部署时启动Tomcat,将备份的jar加载到Tomcat中,以便以后每次升级不需任何操作。
思路:
1. 创建一个testjar.jar
2. 创建一个loadjar的web项目,依赖jar
3. maven打包javaweb项目
4. 将testjar.jar放置到其他目录下
4. 删除loadjar项目lib下testjar.jar
5. 放到tomcat下运行
6. tomcat启动时加载其他目录下的testjar.jar
实现:
1. 创建ClassLoadListener类,tomcat启动时加载jar
package loadjar; import java.io.File; import java.io.FilenameFilter; import java.net.MalformedURLException; import java.util.StringTokenizer; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.apache.catalina.loader.WebappClassLoader; /** * @FileName ClassLoadListener.java * @Description: * * @Date 2017年8月23日 * @author xurl * @version 1.0.1 * */ public class ClassLoadListener implements ServletContextListener { private static final String CONTEXT_PARAM_NAME_EXTLIBPATH = "extlibs"; @Override public void contextInitialized(ServletContextEvent event) { System.out.println("classLoadListener init..."); ServletContext context = event.getServletContext(); addJar(context); } @Override public void contextDestroyed(ServletContextEvent sce) { } synchronized private void addJar(ServletContext context) { //获取web.xml配置的extlibs路径 String extlibs = context.getInitParameter(CONTEXT_PARAM_NAME_EXTLIBPATH); System.out.println("extlibs: " + extlibs); if (extlibs == null || extlibs.length() == 0) { return; } //调用tomcat中的catalina.jar包中的WebappClassLoader类加载jar WebappClassLoader loader = (WebappClassLoader) this.getClass().getClassLoader(); StringTokenizer st = new StringTokenizer(extlibs, ","); while (st.hasMoreTokens()) { String jarPath = st.nextToken(); System.out.println("jarPath: " + jarPath); // String jarRealPath = context.getRealPath(jarPath); File jarDir = new File(jarPath); if (!jarDir.isDirectory()) continue; File[] jarFiles = jarDir.listFiles(new JarFileNameFilter()); for (File jarFile : jarFiles) { System.out.println("jarFile: " + jarFile); try { loader.addRepository(jarFile.toURI().toURL().toString()); } catch (MalformedURLException e) { } } } } class JarFileNameFilter implements FilenameFilter { public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".jar"); } } }
2. 写个TestServlet测试类,其中StringUtils中的trim是依赖于testjar.jar
package loadjar; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.myfams.testjar.util.StringUtils; /** * Servlet implementation class TestServlet */ public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public TestServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter pw = response.getWriter(); //调用testjar.jar中的StringUtils类 pw.append(StringUtils.trim(" hello world ")); pw.flush(); pw.close(); } }
3. 配置web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <context-param> <param-name>extlibs</param-name> <param-value>D:\\eclipseworkspace\\testjar\\testjar\\target</param-value> </context-param> <listener> <listener-class>loadjar.ClassLoadListener</listener-class> </listener> <servlet> <servlet-name>TestServlet</servlet-name> <display-name>TestServlet</display-name> <servlet-class>loadjar.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/TestServlet</url-pattern> </servlet-mapping> </web-app>
4. 按照上面的思路进行操作。
相关推荐
标题中的“tomcat下的lib下的jar包”指的是Apache Tomcat服务器中的`lib`目录下的Java Archive (JAR) 文件。Tomcat是一个流行的开源Web应用程序服务器,遵循Java Servlet和JavaServer Pages(JSP)规范。在Tomcat的...
- 将上述提到的JAR文件添加到Tomcat的lib目录下,确保Tomcat在启动时能加载这些库。 - 配置Tomcat的web.xml文件,设置PHPServlet的相关配置,包括Servlet的映射路径等。 - 在Tomcat的工作目录下,创建一个存放PHP...
在实际应用中,通常将`tomcat-juli.jar`添加到Tomcat的`lib`目录下,这样服务器启动时会自动加载该日志系统。而`tomcat-juli-adapters.jar`则根据需要进行选择性加载,如果应用使用了特定的日志框架,那么将这个...
- 将JAR文件放入`$CATALINA_HOME/lib`目录,这样Tomcat会自动加载其中的Servlet和过滤器。 - 将JAR文件放入`$CATALINA_HOME/webapps/WEB-INF/lib`目录,适合小型独立应用。 - 创建WAR(Web ARchive)文件,然后将...
5. Web Application ClassLoader:每个Web应用都有自己独立的类加载器,加载`WEB-INF/classes`和`WEB-INF/lib`目录下的类和JAR。 **二、优化JAR包加载** 1. **减少重复JAR**:检查各个Web应用的`WEB-INF/lib`目录,...
在深入探讨Tomcat源码分析之前,我们先要理解这些给定的jar包的作用和它们在Tomcat中的重要性。标题提到的是“Tomcat源码所需要jar包”,这表明我们将要讨论的是为了编译、构建或者理解Apache Tomcat源代码所必需的...
为了添加额外的功能,如集成其他服务或框架,我们需要将对应的jar包放入Tomcat的类加载路径中,通常是`lib`目录。 接下来,我们来探讨Memcached。Memcached是一个基于内存的键值对存储系统,用于存储临时数据,如...
- 集成方式:在Tomcat的`WEB-INF/lib`目录下放置Memcached客户端的jar包,使得Web应用能够访问和操作Memcached。 2. **Memcached客户端库** - spymemcached:一个流行的Java Memcached客户端,轻量级且高效,支持...
你需要将这个JAR包放到Tomcat的`lib`目录下,这样Tomcat在启动时就会加载这个库,从而使用Log4j进行日志记录。 配置文件部分,通常情况下,Log4j的配置文件名为`log4j.properties`或`log4j.xml`。这个资源包中的...
在"lib"目录下,我们可以找到以下几类重要的jar包: 1. **Servlet API**:如`servlet-api.jar`,包含了Servlet规范定义的接口和类,使得Tomcat可以处理HTTP请求和响应。 2. **JSP API**:如`jsp-api.jar`,提供了...
开发者需要将这些JAR文件添加到Tomcat的lib目录下,以便Tomcat在启动时自动加载,从而支持Comet4j的HTTP长连接特性。值得注意的是,`comet4j-tomcat6.jar`适用于Tomcat 6版本,而`comet4j-tomcat7.jar`适用于Tomcat ...
3. 将解压后的Tomcat7源码复制到项目根目录下。 4. 右键点击项目,选择“属性”>“Java构建路径”>“库”>“添加外部JARs”,然后选择`ant.jar`, `ecj-3.5.1.jar`, `jaxrpc.jar`, 和 `wsdl4j-1.5.1.jar`。 5. 如果...
你需要将这个JAR文件放入Tomcat的`lib`目录,确保服务器启动时能够识别并加载。 4. **重启Tomcat**:完成配置后,记得重启Tomcat服务,使新的配置生效。 5. **测试验证**:使用Ajax或其他HTTP库发起跨域请求,检查...
为了部署Web应用,你可以将WAR文件或解压后的应用目录放在webapps目录下,Tomcat会在启动时自动部署。 请注意,这个包不包含安装说明,因此在实际操作中可能需要查阅官方文档或在线教程。在部署生产环境时,还需要...
二是直接修改Tomcat的类加载策略,使其按照字母顺序加载JAR,但这可能会影响到其他应用的正确运行。 总的来说,理解Tomcat的类加载机制对于排查和解决问题至关重要。开发者应当注意,即使使用了相同版本的Tomcat和...
2. **添加依赖**:将下载的Memcached客户端库的jar包添加到Tomcat的`lib`目录下。这使得Tomcat在启动时可以加载这些库,使得所有部署的应用都能使用它们。 3. **配置Memcached连接**:在你的Java代码中,你需要创建...
在导入这些jar包到Tomcat项目时,通常会将其放置在`WEB-INF/lib`目录下,这样Tomcat在启动时会自动扫描并加载这些库。如果使用的是构建工具如Maven或Gradle,可以通过配置依赖管理来自动化这个过程。在开发过程中,...
1. 将JAR文件添加到Tomcat的`lib`目录下,使其可被服务器加载。 2. 配置Tomcat的`context.xml`或`server.xml`,指定使用Redis作为session存储。 3. 设置Redis连接参数,如主机地址、端口、密码等。 4. 重启Tomcat...
当Tomcat加载类时,它遵循以下顺序: - 使用Bootstrap类加载器尝试加载。 - 使用System类加载器尝试加载。 - 使用Webapp类加载器加载`WEB-INF/classes`下的类。 - 使用Webapp类加载器加载`WEB-INF/lib`中的jar...
首先,我们需要将cors-filter-1.7.jar添加到Tomcat的lib目录下,这是Tomcat服务器加载第三方库的地方。然后,我们需要配置web.xml文件,这是一个描述Web应用配置的文件,位于Web应用的WEB-INF目录下。在web.xml中,...