• 解决myeclipse部署maven时,src/main/resources里面配置文件加载不到webapp下classes路径下的问题。

    解决myeclipse部署maven时,src/main/resources里面配置文件加载不到webapp下classes路径下的问题。

    有时候是src/main/resources下面的,有时候是src/main/java下面的。

    把没有编译的文件,先点击:Excluded,然后再点击:Remove,即可。



    展开全文
  • 由于高版本的Maven-Eclipse插件,IDE在项目编译的时候会默认将src/main/resources下的静态资源排除(Exluded),导致程序执行的时候,找不到静态资源,报告错误如下: java.io.FileNotFoundException: class path ...

    具体区别表现可见:SpringBoot项目打成jar与war的区别

    为什么src/main/resources下的静态资源要被编译进入项目名\target\classes才能被外部访问,而src/main/webapp下的静态资源,无需编译到项目名\target\classes可以直接被访问到??

    • src/main/resources:放代码:
    /**
    	 * Create a new DefaultResourceLoader.
    	 * <p>ClassLoader access will happen using the thread context class loader
    	 * at the time of this ResourceLoader's initialization.
    	 * @see java.lang.Thread#getContextClassLoader()
    	 */
    	public DefaultResourceLoader() {
    		this.classLoader = ClassUtils.getDefaultClassLoader();
    	}
    

    这段代码,是Spring获得自己的 默认资源加载器 的过程,我们还知道Spring提供了ResourceHttpRequestHandler来配置src/main/resources(classpath)下指定访问目录,而DefaultResourceLoader(默认的资源加载器)本质上就是DefaultClassLoader(默认的类加载器),而类加载器主要是针对**.class文件的路径,所以此时我们可以理解:为什么src/main/resources(classpath)的静态资源也需要编译到classes目录下?

    • src/main/webapp:
      对于webapp我们似乎更容易理解,它主要是通过servlet containerContextPath来确定资源在文件系统中的位置,然后使用如下API从文件系统中获取对应资源
      这里写图片描述
    展开全文
  • 改配置文件, 打开.setting 文件夹下的 org.eclipse.wst.common.component文件 , 用记事本打开, ... 找到红色标识的那句话,将蓝色标识的文件夹目录改为你的webRoot 目录名 , 即可。...[b] [color=red]/WebCont....
    改配置文件,
    打开.setting 文件夹下的 org.eclipse.wst.common.component文件 ,
    用记事本打开,
    <wb-module deploy-name="AMS">
    <wb-resource deploy-path="/" source-path="[color=red]/WebContent[/color]"/>
    <wb-resource deploy-path="/WEB-INF/classes" source-path[color=red]="/src[/color]"/>
    <property name="context-root" value="web"/>
    <property name="java-output-path" value="/web/target/classes"/>
    </wb-module>
    找到红色标识的那句话,将蓝色标识的文件夹目录改为你的webRoot 目录名 , 即可。如果没有红色标识这一行,就自行加上去即可。

    [b] [color=red]/WebContent 改成 /src/main/webapp[/color][/b]

    同理

    /src 改成 /src/main/java
    展开全文
  • 如果没有显示src/main/java和src/test/java文件夹:  方法一: 修改一些配置  1.eclipse-&gt;window-&gt;preferences-&gt;java-&gt;compiler-&gt;选择本地默认的jdk版本  2.eclipse-&...

    如果没有显示src/main/java和src/test/java文件夹:

              方法一:  修改一些配置

              1.eclipse->window->preferences->java->compiler->选择本地默认的jdk版本

              2.eclipse->window->preferences->java->intstalledJREs->修改本机jdk

              3.选中项目右键——>build path ->configure build path ->Libraries ->JRE System Library ->点击edit -> 选择alternate jre ->选择jdk

              4.点击finish ->点击OK -> 自动出现src/main/java和src/test/java文件夹

                  方法二:  不用修改配置:

             1.本来存在,只是missing而已,看图:

          2.选中src/main/java并且点击edit,如图所示:

    3.复制 Floder Name,点击next进入inclusion和exclusion patterns

    4.点击add按钮,把刚刚复制的拷贝进去,然后一路确定或者finish就可以自动把src/main/java和src/test/java都添加进去了

     

    如果没有显示src/main/webapp文件夹:

          同上面方法一承接第三步:

          3.选中项目右键——>build path ->configure build path -> 选择Source -> Add Folder -> 勾选webapp -> OK

        4.点击确定后,自动出现src/main/webapp文件夹

    展开全文
  • 为什么JSP文件要放到SpringBoot工程的src/main/webapp目录下

    在使用到SpringBoot的工程中,如果要用到JSP文件,JSP文件需要放到src/main/webapp目录下,参考spring-boot-2.1.7.RELEASE.jar的源代码,看一下为什么会这样:

    org.springframework.boot.web.servlet.server.DocumentRoot

    package org.springframework.boot.web.servlet.server;
    
    import java.io.File;
    import java.net.JarURLConnection;
    import java.net.URL;
    import java.net.URLConnection;
    import java.security.CodeSource;
    import java.util.Arrays;
    import java.util.Locale;
    
    import org.apache.commons.logging.Log;
    
    /**
     * Manages a {@link ServletWebServerFactory} document root.
     *
     * @author Phillip Webb
     * @see AbstractServletWebServerFactory
     */
    class DocumentRoot {
    
    	private static final String[] COMMON_DOC_ROOTS = { "src/main/webapp", "public", "static" };
    
    	private final Log logger;
    
    	private File directory;
    
    	DocumentRoot(Log logger) {
    		this.logger = logger;
    	}
    
    	public File getDirectory() {
    		return this.directory;
    	}
    
    	public void setDirectory(File directory) {
    		this.directory = directory;
    	}
    
    	/**
    	 * Returns the absolute document root when it points to a valid directory, logging a
    	 * warning and returning {@code null} otherwise.
    	 * @return the valid document root
    	 */
    	public final File getValidDirectory() {
    		File file = this.directory;
    		file = (file != null) ? file : getWarFileDocumentRoot();
    		file = (file != null) ? file : getExplodedWarFileDocumentRoot();
    		file = (file != null) ? file : getCommonDocumentRoot();
    		if (file == null && this.logger.isDebugEnabled()) {
    			logNoDocumentRoots();
    		}
    		else if (this.logger.isDebugEnabled()) {
    			this.logger.debug("Document root: " + file);
    		}
    		return file;
    	}
    
    
    	private File getCommonDocumentRoot() {
    		for (String commonDocRoot : COMMON_DOC_ROOTS) {
    			File root = new File(commonDocRoot);
    			if (root.exists() && root.isDirectory()) {
    				return root.getAbsoluteFile();
    			}
    		}
    		return null;
    	}
    
    .....................
    }
    

    从以上代码可以看到,SpringBoot为ServletWebServer提供了三个根目录,用于查找JSP等资源,其中src/main/webapp就是最常用到的目录。

    如果使用Tomcat作为ServletWebServer,则会将上面代码中获取到的目录作为Tomcat的documentRoot。

    org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory

    package org.springframework.boot.web.embedded.tomcat;
    
    import java.io.*;
    import java.lang.reflect.Method;
    import java.net.URL;
    import java.nio.charset.Charset;
    import java.nio.charset.StandardCharsets;
    import java.time.Duration;
    import java.util.*;
    
    import javax.servlet.ServletContainerInitializer;
    
    import org.apache.catalina.*;
    import org.apache.catalina.WebResourceRoot.ResourceSetType;
    import org.apache.catalina.WebResourceSet;
    import org.apache.catalina.Wrapper;
    import org.apache.catalina.connector.Connector;
    import org.apache.catalina.core.AprLifecycleListener;
    import org.apache.catalina.loader.WebappLoader;
    import org.apache.catalina.session.StandardManager;
    import org.apache.catalina.startup.Tomcat;
    import org.apache.catalina.startup.Tomcat.FixContextListener;
    import org.apache.catalina.util.LifecycleBase;
    import org.apache.catalina.webresources.*;
    import org.apache.coyote.AbstractProtocol;
    import org.apache.coyote.http2.Http2Protocol;
    import org.apache.tomcat.util.scan.StandardJarScanFilter;
    
    import org.springframework.boot.web.server.*;
    import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory;
    import org.springframework.context.ResourceLoaderAware;
    import org.springframework.core.io.ResourceLoader;
    import org.springframework.util.*;
    
    
    public class TomcatServletWebServerFactory extends AbstractServletWebServerFactory
    		implements ConfigurableTomcatWebServerFactory, ResourceLoaderAware {
    
    	private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
    
    	private static final Set<Class<?>> NO_CLASSES = Collections.emptySet();
    
    	/**
    	 * The class name of default protocol used.
    	 */
    	public static final String DEFAULT_PROTOCOL = "org.apache.coyote.http11.Http11NioProtocol";
    
    	private File baseDirectory;
    
    	private List<Valve> engineValves = new ArrayList<>();
    
    	private List<Valve> contextValves = new ArrayList<>();
    
    	private List<LifecycleListener> contextLifecycleListeners = getDefaultLifecycleListeners();
    
    	private List<TomcatContextCustomizer> tomcatContextCustomizers = new ArrayList<>();
    
    	private List<TomcatConnectorCustomizer> tomcatConnectorCustomizers = new ArrayList<>();
    
    	private List<Connector> additionalTomcatConnectors = new ArrayList<>();
    
    	private ResourceLoader resourceLoader;
    
    	private String protocol = DEFAULT_PROTOCOL;
    
    	private Set<String> tldSkipPatterns = new LinkedHashSet<>(TldSkipPatterns.DEFAULT);
    
    	private Charset uriEncoding = DEFAULT_CHARSET;
    
    	private int backgroundProcessorDelay;
    
    	/**
    	 * Create a new {@link TomcatServletWebServerFactory} instance.
    	 */
    	public TomcatServletWebServerFactory() {
    	}
    
    	/**
    	 * Create a new {@link TomcatServletWebServerFactory} that listens for requests using
    	 * the specified port.
    	 * @param port the port to listen on
    	 */
    	public TomcatServletWebServerFactory(int port) {
    		super(port);
    	}
    
    	/**
    	 * Create a new {@link TomcatServletWebServerFactory} with the specified context path
    	 * and port.
    	 * @param contextPath the root context path
    	 * @param port the port to listen on
    	 */
    	public TomcatServletWebServerFactory(String contextPath, int port) {
    		super(contextPath, port);
    	}
    
    .....................
    
    	protected void prepareContext(Host host, ServletContextInitializer[] initializers) {
    		File documentRoot = getValidDocumentRoot();
    		TomcatEmbeddedContext context = new TomcatEmbeddedContext();
    		if (documentRoot != null) {
    			context.setResources(new LoaderHidingResourceRoot(context));
    		}
    		context.setName(getContextPath());
    		context.setDisplayName(getDisplayName());
    		context.setPath(getContextPath());
    		File docBase = (documentRoot != null) ? documentRoot : createTempDir("tomcat-docbase");
    		context.setDocBase(docBase.getAbsolutePath());
    		context.addLifecycleListener(new FixContextListener());
    		context.setParentClassLoader((this.resourceLoader != null) ? this.resourceLoader.getClassLoader()
    				: ClassUtils.getDefaultClassLoader());
    		resetDefaultLocaleMapping(context);
    		addLocaleMappings(context);
    		context.setUseRelativeRedirects(false);
    		try {
    			context.setCreateUploadTargets(true);
    		}
    		catch (NoSuchMethodError ex) {
    			// Tomcat is < 8.5.39. Continue.
    		}
    		configureTldSkipPatterns(context);
    		WebappLoader loader = new WebappLoader(context.getParentClassLoader());
    		loader.setLoaderClass(TomcatEmbeddedWebappClassLoader.class.getName());
    		loader.setDelegate(true);
    		context.setLoader(loader);
    		if (isRegisterDefaultServlet()) {
    			addDefaultServlet(context);
    		}
    		if (shouldRegisterJspServlet()) {
    			addJspServlet(context);
    			addJasperInitializer(context);
    		}
    		context.addLifecycleListener(new StaticResourceConfigurer(context));
    		ServletContextInitializer[] initializersToUse = mergeInitializers(initializers);
    		host.addChild(context);
    		configureContext(context, initializersToUse);
    		postProcessContext(context);
    	}
    
    	/**
    	 * Returns the absolute document root when it points to a valid directory, logging a
    	 * warning and returning {@code null} otherwise.
    	 * @return the valid document root
    	 */
    	protected final File getValidDocumentRoot() {
    		return this.documentRoot.getValidDirectory();
    	}
    	
    ..................................
    
    }
    

    protected void prepareContext(Host host, ServletContextInitializer[] initializers) 方法中第一行就是获取src/main/webapp作为documentRoot。

    展开全文
  • MAVEN配置文件生成到src/main/webapp/WEB-INF/classes目录下面
  • 把项目默认的jre修改成本地jre。
  • Git -c diff.mnemonicprefix=false -c core.quotepath=false checkout – antzb-web/src/main/webapp/js/ny-details.js  error: unable to unlink old ‘antzb-web/src/main/webapp/js/ny-details.js’: Invalid ...
  • 我在pom里是这样配置的: .../src/main/webapp/WEB-INF/classes src/main/resources * 在红色区域里,一开始是这样的:excluded:*.*,这样屏蔽所有文件,只有改成现在的样子才能自动生成。
  • 今天在Intellij Idea中编译项目的时候,运行起来一直会报出如下的...Web application not found src/main/webapp 解决方法: "Run-- edit Configuration"andset"Working directory"to $MODULE_WORKING_DIR$ ...
  • 相信大家在使用eclipse新建maven项目的时候,会遇到这样的情况:没有resources目录。  项目没有resources目录的样子(不正常)。  有resources目录的样子(正常)。   然后我们在项目-&... 在J...
  • 解决方案: Idea中工具栏 Run→ Edit Configuration 设置 Working directory为:$MODULE_DIR$ 参考地址:https://blog.csdn.net/cucmber/article/details/88870031
  • 1、maven工程新建Source Folder报错
  • 成功启动Tomcat的log信息,可以发现Spring成功初始化了。src/main/webapp加入到部署中
  • 一、说明本文会贴出如何使用Eclipse新建Maven项目并显示src/main/java、src/main/resources、src/test/java标准结构。二、实现(生成Maven项目)1、右键,New新建项目,选择Maven Project2、Filter输入web快速定位到...
  • 建立好一个Maven项目后,如果Java Resources资源文件下没有src/main/java文件夹,并且在手动创建这个文件时提示“已存在文件”。这说明,在这个项目配置中已经有了src/main/java这个文件夹, 原因是该Maven项目在...
  • 1.eclipse->window>preferences->java->compiler->选择本地要用的Java版本 2.eclipse->window>preferences->java->installJars->修改为本地jdk 3.项目右键->buildPath configure Build Path->点击选项卡Libraries-...
  • 1.在菜单栏找到RUN,并打开Run/Debug Configuration 2.找到Working directory,并设置为 $ MODULE_WORKING_DIR $ 3.设置成功后重新启动即可
  • 解决myeclipse部署maven时,src/main/resources里面配置文件加载不到webapp下classes路径下的问题。 有时候是src/main/resources下面的,有时候是src/main/Java下面的。 把没有编译的文件,先点击:Excluded,然后...
1 2 3 4 5 ... 20
收藏数 35,372
精华内容 14,148