让Eclipse的TomcatPlugin支持Tomcat 8.x

实现步骤:

1.下载eclipse tomcat 插件(略)

2.配置tomcat

tomcat插件下载完成后 Window-->Preperences 中找到tomcat配置项

 

 

3.配置server.xml

在conf/目录下找到server.xml文件,并在 Engine 标签中添加如下内容:

 

<Host name="www2.domain1.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">
  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
  <Context path="" reloadable="true" docBase="项目目录1\src\main\webapp" workDir="项目目录1\work" >
      <Loader className="org.apache.catalina.loader.DevLoader" reloadable="true" debug="1" useSystemClassLoaderAsParent="false" />
  </Context>
</Host>
<Host name="www2.domain2.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">
  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
  <Context path="" reloadable="true" docBase="项目目录2\src\main\webapp" workDir="项目目录2\work" >
      <Loader className="org.apache.catalina.loader.MyDevLoader" reloadable="true" debug="1" useSystemClassLoaderAsParent="false" />
  </Context>
</Host> 

4.配置hosts文件

在windows/system32/drivers/etc 目录下找到hosts文件,添加如下内容:

#	127.0.0.1       localhost
#	::1             localhost
127.0.0.1  	www2.domain1.com    www2.domain2.com    www2.domain3.com	

  

5.生成jar包

1.新建一个项目(或者使用原有的项目),创建一个包 名称为:org.apache.catalina.loader, 再创建一个类,名称为 MyDevLoader,拷贝下面java代码部分

备注:你可以随意创建一个包名和类名,但需要与 <Loader className="org.apache.catalina.loader.MyDevLoader" reloadable="true" debug="1" useSystemClassLoaderAsParent="false" /> 中的className保持一至即可。

2、消除编译报错的地方。主要是tomcat 中的lib目录下相关的jar包没有引入进来。

3、重新打成JAR包,命名DevloaderTomcat8.jar。

4、将这个jar文件放入tomcat 中的lib目录下。

package org.apache.catalina.loader;

import java.io.File;
import java.io.FileFilter;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.StringTokenizer; import javax.servlet.ServletContext; import org.apache.catalina.Context; import org.apache.catalina.Globals; import org.apache.catalina.LifecycleException; /** * @author caoxiaobo * 备注:修改DevLoader源码后的,请生成jar包,然后放置tomcat中的lib目录下; */ public class MyDevLoader extends WebappLoader { private static final String info = "org.apache.catalina.loader.MyDevLoader/1.0"; private String webClassPathFile = ".#webclasspath"; private String tomcatPluginFile = ".tomcatplugin"; public MyDevLoader() { super(); } public MyDevLoader(ClassLoader parent) { super(parent); } /** * @see org.apache.catalina.Lifecycle#start() * 如果您使用的是tomcat7,此处的方法名称为start(),如果是tomcat8,此处的方法名称为startInternal() */ public void startInternal() throws LifecycleException { log("Starting MyDevLoader"); //setLoaderClass(DevWebappClassLoader.class.getName()); // 如果是tomcat7,此处调用 start()方法,如果是tomcat8,此处调用startInternal()方法 // super.start(); // tomcat7 super.startInternal(); // tomcat8  ClassLoader cl = super.getClassLoader(); if (cl instanceof WebappClassLoader == false) { logError("Unable to install WebappClassLoader !"); return; } WebappClassLoader devCl = (WebappClassLoader) cl; List webClassPathEntries = readWebClassPathEntries(); StringBuffer classpath = new StringBuffer(); for (Iterator it = webClassPathEntries.iterator(); it.hasNext();) { String entry = (String) it.next(); File f = new File(entry); if (f.exists()) { if (f.isDirectory() && entry.endsWith("/")==false) f = new File(entry + "/"); try { URL url = f.toURL(); devCl.addURL(url); // tomcat8 // devCl.addRepository(url.toString()); // tomcat7 classpath.append(f.toString() + File.pathSeparatorChar); log("added " + url.toString()); } catch (MalformedURLException e) { logError(entry + " invalid (MalformedURL)"); } } else { logError(entry + " does not exist !"); } } /* try { devCl.loadClass("at.kase.webfaces.WebApplication"); devCl.loadClass("at.kase.taglib.BaseTag"); devCl.loadClass("at.kase.taglib.xhtml.XHTMLTag"); devCl.loadClass("at.kase.common.reflect.ClassHelper"); devCl.loadClass("javax.servlet.jsp.jstl.core.Config"); log("ALL OKAY !"); } catch(Exception e) { logError(e.toString()); }*/ String cp = (String)getServletContext().getAttribute(Globals.CLASS_PATH_ATTR); StringTokenizer tokenizer = new StringTokenizer(cp, File.pathSeparatorChar+""); while(tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken(); // only on windows if (token.charAt(0)=='/' && token.charAt(2)==':') token = token.substring(1); classpath.append(token + File.pathSeparatorChar); } //cp = classpath + cp;  getServletContext().setAttribute(Globals.CLASS_PATH_ATTR, classpath.toString()); log("JSPCompiler Classpath = " + classpath); } protected void log(String msg) { System.out.println("[MyDevLoader] " + msg); } protected void logError(String msg) { System.err.println("[MyDevLoader] Error: " + msg); } protected List readWebClassPathEntries() { List rc = null; File prjDir = getProjectRootDir(); if (prjDir == null) { return new ArrayList(); } log("projectdir=" + prjDir.getAbsolutePath()); // try loading tomcat plugin file // DON"T LOAD TOMCAT PLUGIN FILE (DOESN't HAVE FULL PATHS ANYMORE) //rc = loadTomcatPluginFile(prjDir); if (rc ==null) { rc = loadWebClassPathFile(prjDir); } if (rc == null) rc = new ArrayList(); // should not happen ! return rc; } protected File getProjectRootDir() { File rootDir = getWebappDir(); FileFilter filter = new FileFilter() { public boolean accept(File file) { return (file.getName().equalsIgnoreCase(webClassPathFile) || file.getName().equalsIgnoreCase(tomcatPluginFile)); } }; while(rootDir != null) { File[] files = rootDir.listFiles(filter); if (files != null && files.length >= 1) { return files[0].getParentFile(); } rootDir = rootDir.getParentFile(); } return null; } protected List loadWebClassPathFile(File prjDir) { File cpFile = new File(prjDir, webClassPathFile); if (cpFile.exists()) { FileReader reader = null; try { List rc = new ArrayList(); reader = new FileReader(cpFile); LineNumberReader lr = new LineNumberReader(reader); String line = null; while((line = lr.readLine()) != null) { // convert '\' to '/' line = line.replace('\\', '/'); rc.add(line); } return rc; } catch(IOException ioEx) { if (reader != null) try { reader.close(); } catch(Exception ignored) {} return null; } } else { return null; } } /* protected List loadTomcatPluginFile(File prjDir) { File cpFile = new File(prjDir, tomcatPluginFile); if (cpFile.exists()) { FileReader reader = null; try { StringBuffer buf = new StringBuffer(); BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(cpFile))); String inputLine; while ((inputLine = in.readLine()) != null) { buf.append(inputLine); buf.append('\n'); } WebClassPathEntries entries = WebClassPathEntries.xmlUnmarshal(buf.toString()); if (entries == null) { log("no entries found in tomcatplugin file !"); return null; } return entries.getList(); } catch(IOException ioEx) { if (reader != null) try { reader.close(); } catch(Exception ignored) {} return null; } } else { return null; } } */ protected ServletContext getServletContext() { // return ((Context) getContainer()).getServletContext(); // tomcat7 return super.getContext().getServletContext(); // tomcat8  } protected File getWebappDir() { File webAppDir = new File(getServletContext().getRealPath("/")); return webAppDir; } }

  

 

右键项目--> Properties --> Tomcat

至此我们已经配置完结了!

点击如下图标开始启动项目

 出现如下信息表示配置成功.

 

猜你喜欢

转载自www.cnblogs.com/caoxb/p/9326773.html