场景:
目前公司部署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 php jar包tomcat php jar包tomcat php jar包tomcat php jar包
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class...测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录中的jar实现类。
主要给大家介绍了关于tomcat8改了jar加载顺序的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
Tomcat解决跨域时需要用到的Jar包 cors-filter-1.5.0.1.jar和java-property-utils-1.9.1.jar
加载jar这一部分很容易,可是卸载jar就没那么容易了。加载jar的时候需要用反射去调用URLClassLoader的addURL方法。}%>jars.jar内
项目使用springboot启动一个web项目,在启动阶段看到console中出现了异常“1.10.3-1.4.3\hdf5.jar 系统找不到指定的文件”,虽然这些异常不影响项目的正常运行,但作为一个严谨的技术人员,看到这些异常就像见到...
spring 重新动态加载数据库或xml中的bean,可以不用重启tomcat
如果你在本机上安装了Tomcat,那么这个jar包一般都在tomcat安装目录\lib 文件夹下面有,当你把web项目部署到tomcat,会自动加载这个jar包来识别Serlvet一些对象。 当然你创建的是一个普通JavaProject,那么就需要...
修改tomcat安装目录下的\bin\catalina.bat文件, 增加set JAVA_OPTS=-noverify -javaagent:d:/javarebel.jar 发布项目时可设置:reloadable="false" \apache-tomcat-5.5.36\conf\Catalina\localhost 目录下.xml文件...
该资源是用于配置Myeclipse修改java文件后不需要重启Tomcat服务的jar包,提高开发效率。
Solr结合Java所需Jar,Solr结合Java所需Jar,Solr结合Java所需Jar
tomcat运行时会自动加载tomcat/lib下的所有类库 将soap.war放到tomcat/webapps下,重启tomcat。 会看到tomcat已经解压soap.war 到此搭建好了tomcat下的soap协议服务 测试: 输入:...
然后修改环境变量中的classpath,把tomat安装目录下的common\lib下的servlet.jar追加到classpath中去,修改后的classpath如下: classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\...
Tomcat无法加载css和js等静态资源文件的情况想必从事相关行业的工作人员都有遇到过吧,接下来为大家介绍下详细的解决方法,感兴趣的朋友可以参考下
在tomcat下部署成功,迁移到weblogic下,报错,一般都是配置和jar包问题,配置问题开发根据报错能解决,jar冲突比较烦人,这里给出了解决方案。
详解tomcat热部署和热加载的方法 我在项目开发过程中,经常要改动Java/JSP 文件,但是又不想从新启动服务器(服务器从新启动花时间),想直接获得(debug)结果.有两种方式热部署 和热加载: 1.热加载:在server.xml...
支持servlet的jar包。应该叫servlet-api.jar 你如果编写过servlet就...如果你安装了Tomcat,这个jar包一般在tomcat安装目录\lib 文件夹下面有,当你把web项目部署到tomcat,会自动加载这个jar包来识别Serlvet一些对象。
servlet就知道要用到HttpServletRequest和HttpServletResponse等对象...如果你安装了Tomcat,这个jar包一般在tomcat安装目录\lib 文件夹下面有,当你把web项目部署到tomcat,会自动加载这个jar包来识别Serlvet一些对象。