精华内容
下载资源
问答
  • 获取tomcat容器路径
    千次阅读
    2018-11-23 15:09:24
    getServletContext().getRealPath("/");
    
    //返回项目在容器中的实际发布运行的根路径。
    //C:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps\project

     

    更多相关内容
  • HttpServletRequest request//获取的是ROOT项目在tomcat下的路径方法1:String path = request.getSession().getServletContext().getRealPath("/");path值如下:C:\develop\apache-tomcat-7.0.75\webapps\ROOT\方法...

    HttpServletRequest request

    //获取的是ROOT项目在tomcat下的路径

    方法1:

    String path = request.getSession().getServletContext().getRealPath("/");

    path值如下:

    C:\develop\apache-tomcat-7.0.75\webapps\ROOT\

    方法2:

    String path=System.getProperty("catalina.home");

    path值如下:

    C:\develop\apache-tomcat-7.0.75

    /**

    * 根据图片路径,判断图片是否为空,如果不为空则看是否存在硬盘中,如果不存在则给默认图片,否则显示出该图片

    */

    String photo="/upload/noimg.png";

    String headSculpturePath = request.getSession().getServletContext().getRealPath("/upload")+"/"; //如:C:\\develop\\apache-tomcat-7.0.75\\webapps\\ROOT\\upload

    String serverPath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort();//如:http://localhost:9099

    if(!"".equals(torgcadre.getPhoto())&&torgcadre.getPhoto()!=null){

    File file = new File(headSculpturePath+torgcadre.getPhoto());

    if(!file.exists()){

    torgcadre.setPhoto(serverPath+photo);

    }else{

    torgcadre.setPhoto(serverPath+"/upload/"+torgcadre.getPhoto());

    }

    }else{

    torgcadre.setPhoto(serverPath+photo);

    }

    展开全文
  • springmvc之Tomcat容器

    2022-04-04 18:34:14
    tomcat详解

    1. 为什么有servlet容器

    前面讲到了servlet是一种规范,不能够独立提供服务,需要被部署到容器内部,由servlet容器来管理和运行servlet。servlet容器提供功能:

    • 生命周期管理:容器提供了servlet的运行环境,控制生命周期,负责加载、初始化和销毁servlet。
    • 通信支持:容器封装了http协议、端口监听、流创建读取等功能,可以是开发者更集中在servlet中service方法逻辑。
    • 多线程支持:容器在接收请求后自动创建多线程处理;

    2. servlet容器分类介绍

    先明白几个基本概念:

    2.1 web服务器和web容器

    用一张清晰的图片呈现:

    图来自:各种容器与服务器的区别与联系:Servlet容器、WEB容器、Java EE容器、应用服务器、WEB服务器、Java EE服务器 - ppjj - 博客园

    • 服务器是提供计算服务的设备;
    • 容器屏蔽了服务器平台的复杂性,为部署在容器内的应用程序提供运行环境;

    所以容器是位于应用程序/组件和服务器平台之间的接口集合,使得应用程序/组件可以方便部署到服务器上运行。

    • WEB容器:可以部署多个WEB应用程序的环境。
    • WEB服务器:一般指网站服务器,可以向浏览器等WEB客户端提供文档浏览、数据文件下载等WEB服务。

    2.2 web 容器和servlet容器

     图来自:各种容器与服务器的区别与联系:Servlet容器、WEB容器、Java EE容器、应用服务器、WEB服务器、Java EE服务器 - ppjj - 博客园

    web容器是管理servlet(通过servlet容器),以及监听器(Listener)和过滤器(Filter)的。没有servlet容器,也可以用web容器提供静态页面访问,比如安装一个apache等。web容器主要有:Apache、IIS、Tomcat、Jetty、JBoss、webLogic等,而Tomcat、Jetty、JBoss、webLogic同时也是servlet容器,或者说他们还包含了servlet容器。

    几种常见web容器的比较:

    Tomcat
    • 是Apache下一个免费的开放源代码的Web 应用服务器;
    • 运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;
    • 适用于中小型系统和并发访问用户不是很多的场合
    Jboss
    • JBoss是免费的,开放源代码J2EE的实现,它通过LGPL许可证进行发布
    • 安装非常简单,JBoss需要的内存和硬盘空间比较小;

    • JBoss能够"热部署",部署BEAN只是简单拷贝BEAN的JAR文件到部署路径下就可以;

    • JBoss与Web服务器在同一个Java虚拟机中运行,Servlet调用EJB不经过网络,从而大大提高运行效率,提升安全性能。

    Weblogic
    • 美国bea公司出品的基于j2ee架构的中间件,纯Java代码开发的;
    • 用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器;
    • 支持业内多种标准,可扩展性强,包括客户机连接的共享、资源pooling以及动态网页和EJB组件群集;
    • 部署灵活,有很高的可靠性
    WebSphere
    • WebSphere 是 IBM 的集成软件平台
    Resin
    • Resin是Caucho公司的产品,是一个非常流行的支持Servlet和JSP的服务器,速度非常快。
    • Resin本身包含了一个支持HTML的Web服务器,这使它不仅可以显示动态内容,而且显示静态内容的能力也毫不逊色,因此许多网站都是使用Resin服务器构建。

    3. Tomcat容器

      Tomcat是一个JSP/Servlet容器,也是一个web容器。作为一个servlet容器,有三种工作模式:

    • 独立的servlet容器:servlet容器是web服务器的一部分
    • 进程内的servlet容器:servlet容器是作为web服务器的插件和java容器的实现,web服务器插件在内部地址空间打开一个jvm使得java容器在内部得以运行。反应速度快但伸缩性不足
    • 进程外的servlet容器,servlet容器运行于web服务器之外的地址空间,并作为web服务器的插件和java容器实现的结合。反应时间不如进程内但伸缩性和稳定性比进程内优;

    根据进入tomcat容器的请求,工作模式分为如下两类:

    • 应用程序服务器:请求来自于前端的web服务器,这可能是Apache, IIS, Nginx等;
    • 独立服务器:请求来自于web浏览器; 

    解压tomcat,目录结构有:

    tomcat:
        |---bin:存放启动和关闭tomcat脚本
        |---conf:存放不同的配置文件(server.xml和web.xml)
        |---doc:存放Tomcat文档;
     |---lib/japser/common:存放Tomcat运行需要的库文件(JARS);
     |---logs:存放Tomcat执行时的LOG文件;
     |---src:存放Tomcat的源代码;
     |---webapps:Tomcat的主要Web发布目录(包括应用程序示例);
     |---work:存放jsp编译后产生的class文件;

    顶层结构:

    Tomcat中最顶层的容器是Server,一个Server可以包含多个Service,一个Service只有一个Engine,但是可以有多个Connectors。Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;Engine用于封装和管理Servlet,以及具体处理Request请求;

    这种架构设计的优点:

    • 各组件模块化相互配合独立,具备良好的扩展性
    • 允许子容器集成服容器的配置,简化配置;
    • 便于组件的生命周期管理(每个组件管理生命周期并通知其子节点)

    tomcat的核心组件

    server.xml位于$TOMCAT_HOME/conf目录下;

    <Server port="8005" shutdown="SHUTDOWN">
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
      <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
      <Listener className="org.apache.catalina.core.JasperListener" />
      <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
      <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
    
      <GlobalNamingResources>
        <Resource name="UserDatabase" auth="Container"
                  type="org.apache.catalina.UserDatabase"
                  description="User database that can be updated and saved"
                  factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                  pathname="conf/tomcat-users.xml" />
      </GlobalNamingResources>
    
      <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
        <Engine name="Catalina" defaultHost="localhost">
          <Realm className="org.apache.catalina.realm.LockOutRealm">
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                   resourceName="UserDatabase"/>
          </Realm>
    
          <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true">
            <Context />
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access_log." suffix=".txt"
                   pattern="%h %l %u %t "%r" %s %b" />
          </Host>
        </Engine>
      </Service>
    </Server>

    3.1 顶级组件server

    Server表示正在运行的Tomcat实例,可包含一个或多个Service子容器;

    图片来自:Tomcat整体架构分析 - 灌木大叔 - 博客园 

    JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。JNDI已经成J2EE的标准之一,所有的J2EE容器都必须提供一个JNDI服务。

    Naming,所谓名称服务,简单来说就是通过名称查找实际对象的服务;

    Directory,是一种特殊的名称服务,目录服务(Directory Service)提供了对目录中对象(directory objects)的属性进行增删改查的操作。比如命名服务中根据打印机名称去获取打印机对象(引用),然后进行打印操作;同时打印机拥有速率、分辨率、颜色等属性,作为目录服务,用户可以根据打印机的分辨率去搜索对应的打印机对象。

    3.2 connector 

    Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。 通过配置Connector,可以控制请求Service的协议及端口号. 如上配置:

    # 默认BIO模式
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    #默认NIO模式
    <Connector port="9090"  protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />
    #默认APR模式
    <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
    connectionTimeout="20000" redirectPort="8443" />

     Tomcat Connector(Tomcat连接器)有bionioapr三种运行模式。

    模式默认运行版本处理方式
    BIO运行模式Tomcat7或以下版本一个线程处理一个请求;缺点:并发量高是,线程数较多,浪费资源
    NIO运行模式Tomcat8版本利用Java的异步IO处理,可通过少量的线程处理大量请求;
    APR运行模式Tomcat7 或 8 在win7或以上系统中默认使用

    APR是使用原生C语言编写的非堵塞I/O,利用了操作系统的网络连接功能,速度很快;

    以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作;

    需先安装apr和native;

    3.3 Engine

    Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。

    <Engine name="Catalina" defaultHost="localhost">

    3.3.1 HOST

            Host是Engine的子容器。Engine组件中可以内嵌1个或多个Host组件,每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。

    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

    3.3.2 Context

            Context是Host的子容器,每个Host中可以定义任意多的Context元素,Context元素代表在特定虚拟主机上运行的一个Web应用。

    Tomcat可以开启自动部署,当Web应用没有在server.xml中配置静态部署,可以由Tomcat通过特定的规则自动部署。要开启Web应用的自动部署,需要配置所在的虚拟主机deployOnStartup和autoDeploy属性。deployOnStartup为true时,Tomcat在启动时检查Web应用,且检测到的所有Web应用视作新应用;autoDeploy为true时,Tomcat在运行时定期检查新的Web应用或Web应用的更新。

            除了自动部署,也可以在server.xml中通过<context>元素静态部署Web应用。静态部署与自动部署是可以共存的。在实际应用中,并不推荐使用静态部署,因为server.xml 是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。而自动部署可以在Tomcat运行时通过定期的扫描来实现,不需要重启服务器。

    server.xml中使用Context元素配置Web应用,Context元素应该位于Host元素中。举例如下:

    <Context path="/" docBase="/home/admin/app/app1.war" reloadable="true"/>

    docBase:静态部署时,docBase可以在appBase目录下,也可以不在;

    path:静态部署时,可以显式指定path属性,但是仍然受到了严格的限制:只有当自动部署完全关闭(deployOnStartup和autoDeploy都为false)或docBase不在appBase中时,才可以设置path属性。

    tomcat的三种部署模式:

    自动部署复制war包到tomcat的webapps目录中
    增加web部署文件
    在server.xml中,在<Host/>节点中添加一个context
    <Context Path="/test"Docbase="E:\workPlace-2019\test" Debug="0" Reloadable="True"></Context>

    3.3.3 Valve

    valve是处理元素,它可以被包含在每个Tomcat容器的处理路径中--如engine、host、context以及servelt包装器。若要增加Valve到Tomcat容器则需要在server.xml中使用<Valve>标签。在server.xml中这些标签的执行顺序与其物理顺序相同。

    3.4 tomcat的类加载机制

    3.4.1 tomcat为什么要打破双亲委派机制

    • 一个web容器可以部署多个应用程序,不同应用程序可能会依赖同一个第三方类库的不同版本,不能要求同一个类库在同一个服务器只有一份,因此要保证每个应用程序的类库都是独立的,保证相互隔离。
    • 部署在同一个web容器中相同的类库相同的版本可以共享。
    • web容器也有自己依赖的类库,不能与应用程序的类库混淆,应该让容器的类库和程序的类库隔离开来;

    如果使用Java自带的类加载器,就不能加载两个相同类库的不同版本。

    3.4.2 tomcat类加载器

    在这里插入图片描述

    图片来自:Tomcat怎么打破双亲委派机制的_Jackyyl729的博客-CSDN博客_tomcat打破 

    • commonLoader:Tomcat最基本的类加载器,加载路径中的class可以被Tomcat容器本身以及各个Webapp访问;
    • catalinaLoader:Tomcat容器私有的类加载器,加载路径中的class对于Webapp不可见;
    • sharedLoader:各个Webapp共享的类加载器,加载路径中的class对于所有Webapp可见,但是对于Tomcat容器不可见;
    • WebappClassLoader:各个Webapp私有的类加载器,加载路径中的class只对当前Webapp可见;

    WebAppClassLoader中,查找class方法源码:

        @Override
        public Class<?> findClass(String name) throws ClassNotFoundException {
            ...
    
            Class<?> clazz = null;
            try {
                try {
                    if (securityManager != null) {
                        PrivilegedAction<Class<?>> dp =
                            new PrivilegedFindClassByName(name);
                        clazz = AccessController.doPrivileged(dp);
                    } else {
                        // 先在应用内找
                        clazz = findClassInternal(name);
                    }
                } catch(AccessControlException ace) {
                    log.warn(sm.getString("webappClassLoader.securityException", name,
                            ace.getMessage()), ace);
                    throw new ClassNotFoundException(name, ace);
                } catch (RuntimeException e) {
                    if (log.isTraceEnabled())
                        log.trace("      -->RuntimeException Rethrown", e);
                    throw e;
                }
                // 委托父类找
                if ((clazz == null) && hasExternalRepositories) {
                    try {
                        clazz = super.findClass(name);
                    } catch(AccessControlException ace) {
                        log.warn(sm.getString("webappClassLoader.securityException", name,
                                ace.getMessage()), ace);
                        throw new ClassNotFoundException(name, ace);
                    } catch (RuntimeException e) {
                        if (log.isTraceEnabled())
                            log.trace("      -->RuntimeException Rethrown", e);
                        throw e;
                    }
                }
                if (clazz == null) {
                    if (log.isDebugEnabled())
                        log.debug("    --> Returning ClassNotFoundException");
                    throw new ClassNotFoundException(name);
                }
            } catch (ClassNotFoundException e) {
                if (log.isTraceEnabled())
                    log.trace("    --> Passing on ClassNotFoundException");
                throw e;
            }
    
            ...
            return clazz;
        }

    加载类的实现:

    @Override
        public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
            synchronized (JreCompat.isGraalAvailable() ? this : getClassLoadingLock(name)) {
               
                // (0) Check our previously loaded local class cache
                clazz = findLoadedClass0(name);
                if (clazz != null) {
                    if (log.isDebugEnabled())
                        log.debug("  Returning class from cache");
                    if (resolve)
                        resolveClass(clazz);
                    return clazz;
                }
    
                // (0.1) Check our previously loaded class cache
                clazz = JreCompat.isGraalAvailable() ? null : findLoadedClass(name);
                if (clazz != null) {
                    if (log.isDebugEnabled())
                        log.debug("  Returning class from cache");
                    if (resolve)
                        resolveClass(clazz);
                    return clazz;
                }
    
                // (0.2) Try loading the class with the system class loader, to prevent
                //       the webapp from overriding Java SE classes. 
                String resourceName = binaryNameToPath(name, false);
    
                ClassLoader javaseLoader = getJavaseClassLoader();
                boolean tryLoadingFromJavaseLoader;
                try {
                   
                    URL url;
                    if (securityManager != null) {
                        PrivilegedAction<URL> dp = new PrivilegedJavaseGetResource(resourceName);
                        url = AccessController.doPrivileged(dp);
                    } else {
                        url = javaseLoader.getResource(resourceName);
                    }
                    tryLoadingFromJavaseLoader = (url != null);
                } catch (Throwable t) {          
                    ExceptionUtils.handleThrowable(t);                
                    tryLoadingFromJavaseLoader = true;
                }
                // 核心类加载器加载
                if (tryLoadingFromJavaseLoader) {
                    try {
                        clazz = javaseLoader.loadClass(name);
                        if (clazz != null) {
                            if (resolve)
                                resolveClass(clazz);
                            return clazz;
                        }
                    } catch (ClassNotFoundException e) {
                        // Ignore
                    }
                }
    
                // (0.5) Permission to access this class when using a SecurityManager
                if (securityManager != null) {
                    int i = name.lastIndexOf('.');
                    if (i >= 0) {
                        try {
                            securityManager.checkPackageAccess(name.substring(0,i));
                        } catch (SecurityException se) {
                            String error = sm.getString("webappClassLoader.restrictedPackage", name);
                            log.info(error, se);
                            throw new ClassNotFoundException(error, se);
                        }
                    }
                }
    
                boolean delegateLoad = delegate || filter(name, true);
    
                // (1) Delegate to our parent if requested,委托给父类
                if (delegateLoad) {
                    try {
                        clazz = Class.forName(name, false, parent);
                        if (clazz != null) {
                            if (resolve)
                                resolveClass(clazz);
                            return clazz;
                        }
                    } catch (ClassNotFoundException e) {
                        // Ignore
                    }
                }
    
                // (2) Search local repositories
                try {
                    clazz = findClass(name);
                    if (clazz != null) {
                        if (resolve)
                            resolveClass(clazz);
                        return clazz;
                    }
                } catch (ClassNotFoundException e) {
                    // Ignore
                }
    
                // (3) Delegate to parent unconditionally,自己加载
                if (!delegateLoad) {
                    try {
                        clazz = Class.forName(name, false, parent);
                        if (clazz != null) {
                            if (resolve)
                                resolveClass(clazz);
                            return clazz;
                        }
                    } catch (ClassNotFoundException e) {
                        // Ignore
                    }
                }
            }
    
            throw new ClassNotFoundException(name);
        }

    4. tomcat调优

    4.1 内存调优

    Tomcat运行在JVM上,所以存在JVM调优。修改TOMCAT_HOME/bin/catalina.sh
    JAVA_OPTS="-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m

    4.2 连接器调优

    4.2.1 连接器线程池调优

    4.2.2 IO 调优

    Tomcat8以上版本,默认使用的就是NIO模式,如果是BIO更改为NIO。apr是Tomcat生产环境运行的首选方式.

    4.2.3 禁用AJP

    4.3 动静分离

    将静态资源从Tomcat分离,交由Nginx处理。

    4.4 禁用DNS解析

    修改server.xml文件中的enableLookups参数值改为false:enableLookups="false"。

    参考文献:

    几种常见web 容器比较 - kaleidoscopic - 博客园 

    Tomcat原理详解及请求过程 - 奋斗de程序猿 - 博客园

    详解Tomcat 配置文件server.xml - 编程迷思 - 博客园

    Tomcat的三种运行模式_Jack Tian的博客-CSDN博客

    展开全文
  • Tomcat:主机虚拟路径1.在tomcat服务器:目录里有 **conf/server.xml 文件 1.在tomcat服务器:目录里有 **conf/server.xml 文件 server.xml 文件:里面有:下面代码:(我摘抄一些代码) 其中: Host name=...

    1.在tomcat服务器:目录里有 **conf/server.xml 文件

    在这里插入图片描述
    server.xml 文件:里面有:下面代码:(我摘抄一些代码)

    其中:
    Host name=“localhost” appBase=“webapps”,是用localhost 代替了webapps
    (真实路径)
    所以我们:使用

    http://localhost:8080/demo3_war_exploded/demo1

    相对于:
    D:\java web\apache-tomcat-8.5.72\webapps\demo3_war
    这个真实路径
    访问的是:自己目录下的:webapps目录下的demo3_war里面的
    文件(可能是index.jsp,html文件.等等)
    在这里插入图片描述

    
     <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    
    
     <Host name="localhost"  appBase="webapps">
     <Context path="/qqq" docBase="D:\java web\apache-tomcat-8.5.72\bbb"></Context>
          </Host>
    

    当你修改:
    Host name=“localhost” appBase=“webapps”
    修改为:
    Host name=“wertyu” appBase=“webapps”
    访问就要写:网址
    http://wertyu:8080/demo3_war_exploded/demo1**
    对比:只换了:localhost
    http://localhost:8080/demo3_war_exploded/demo1

    展开全文
  • 获取tomcat路径

    2019-07-18 09:42:43
    request.getSession().getServletContext() 获取的是Servlet容器对象,相当于tomcat容器了。getRealPath("/") 获取实际路径,“/”指代项目根目录,所以代码返回的是项目在容器中的实际发布运行的根路径 ...
  • 3)进入tomcat容器 # tomcat9jdk8 是容器名称,也可以用容器id指定 docker exec -it tomcat9jdk8 /bin/bash 4)更改webapps目录 # 将webapps 改为webapps2(随意名字) ,将webapps.dist 改为webapps mv webapps ...
  • 本文主要记录对内置容器优化和定制的方式,用于自己加深对SpringBoot理解。本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友参考下吧
  • getRealPath("/") 获取实际路径,“/”指代项目根目录,所以代码返回的是项目在容器中的实际发布运行的根路径如: String realPath1 = request.getServletContext().getRealPath("/"); realPath1=E:\IDEA_Workspace_...
  • docker cp 本地文件路径 ID全称:容器路径 下面来举个例子: 我要把本地电脑的mysql-connector-java-5.1.46.jar上传到Linux下Docker里面的logstash容器下的/usr/share/logstash/lib目录。 1.首先使用ssh工具上传jar...
  • 上一篇文章 :CentOS7环境下安装docker 开搞!如果你还没有在CentOS7系统中安装好了docker,请看一下上篇文章 启动docker sudo systemctl start docker ...3:需要先随便安装第一个容器(为什么说先随便安...
  • 随着存储数据越来越多的情况,我们不得不把数据存放到另外的服务器例如 nas 等等,通常这个时候数据文件已经不在我们的Tomcat容器下了,那这个时候我们获取图片通常有两种方式 1.nginx 配置访问图片。(这里就不细说...
  • Tomcat只是一个容器,它的安装与配置原来这么简单!新版的IDEA2021.1中如何创建并配置JavaWeb项目,又如何将其部署到Tomcat容器中呢?文章将一步一步和你一起使用Tomcat从0到1部署一个网站,快来get你的第一个网站...
  • Tomcat 设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。 连接器负责对外交流,容器负责内部处理。 最顶层是 Server 服务器,这里的 Server 指的就是一个 Tomcat 实例。一个 Server...
  • 上一篇讲完了spring cloud,Spring boot,Tomcat容器之间关系以及执行顺序,这次再继续讲当一个请求到达服务时,执行的流程: 首先我们得把Tomcat讲清楚: 综上所述,一个tomcat只包含一个Server,一个Server可以...
  • Tomcat(二).web容器Tomcat知识点一文中,我们直接将项目war包放在tomcat/webapps目录下,访问:http://localhost:8080/helloServlet/login.html,需要加上helloServlet,那么如何不需要加呢? 方法一 将...
  • –文件系统,提供了容器运行时需要用到的文件和参数配置 仓库repository?–管理容器的镜像的地方 Docker容器?–docker软件+镜像运行后提供所需要的服务 二、linux系统准备工作 虚拟机中可用的linux空系统 1....
  • 那么问题来了,SpringBoot没有做这些配置,是怎么做到内置Tomcat容器,并让Tomcat启动的呢? 【SpringBoot和Tomcat的初始化】 我们先来看Tomcat的启动时在SpringBoot启动的哪一步?这里只列举比较关键的几步...
  • 由于在spring cloud启动源码加载过程中,没太弄清楚tomcat容器,spring 容器,spring cloud容器整体的加载顺序以及关系,所以想分析下这个流程,先不多说,上图 容器大致分为三层: BootStrap Spring 容器:由...
  • 有无"/":类比sturts2,有"/"表示从Action容器根目录开始寻找(也就是上下文根目录),如果无则最好给出访问资源的绝对路径。–这里不是很清晰,可以略过。 超链接是在servlet容器内进行(即服务器根目录)。所以struts2...
  • 如果使用了Engine容器,那么它总是处于容器层级的最顶层,添加到Enginer容器中的子容器通常是org.apache.catalina.Host 或者 org.apahce.catalina.Context的实现,默认情况下Tomcat会使用一个Engine容器并且使用一个...
  • 在Tomact中有一个Manager应用程序,它是用来管理已经部署的web应用程序,在这个应用程序中,ManagerServlet是他的主servlet,通过它我们可以获取tomcat的部分指标,远程管理web应用程序,不过这个功能会受到web应用...
  • ssl证书获取tomcat和nginx设置https

    千次阅读 2021-12-01 23:35:08
    1 SSL证书获取 SSL(Secure Sockets Layer 安全套接层) 是为网络通信提供安全及数据完整性的一种安全协议 作用: 机密性: SSL协议使用密钥加密通信数据 可靠性: 服务器和客户都会被认证,客户认证服务器是可选的...
  • 那么在JavaWeb项目中如何获取当前项目或Java类的路径呢?如下代码是一个简单的Servlet 类:public class First extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)...
  • Tomcat连接池测试,获取数据源 try { //初始化查找命名空间 Context ctx = new InitialContext(); //参数java:/comp/env为固定路径 Context envContext = (Context)ctx.lookup("java:/comp/env"); ...
  • 关于Tomcat和Servlet容器的小结

    千次阅读 2018-08-30 17:37:45
    Tomcat是一个servlet容器,实现了对Servlet和JSP的支持,除此之外,tomcat还可以作为 一个web应用服务器。独立的Servlet容器Tomcat的默认模式。管理和运行Servlet/JSP的 容器也称为WEB容器Tomcat服务器接受客户...
  • 目录:repositoryorgspringframework ootspring-boot .0.4.RELEASEspring-boot-2.0.3.RELEASE.jar
  • Tomcat是如何加载类的

    2021-01-01 20:53:39
    不会有风险,加载 JVM 的Bootstrap 和 Tomcat是个web容器, 那么它要解决什么问题: 1. 一个web容器需要部署多个程序,保证每个应用程序都是独立的,保证相关隔离。 2.部署在同一个 web 容器中相同的类库的版本...
  • Tomcat 服务详解

    万次阅读 2021-10-17 19:09:38
    文章目录一、简介 一、简介   Tomcat 是一款免费、开放源代码的 Web 应用服务器,是 Apache 软件基金会的一个核心开源项目,属于轻量级应用服务器。 官网:https://tomcat.apache.org/
  • 最近有个需求:在Tomcat的webapps中建立个文件夹config,里面都是存放着properties配置文件比如db,log4j等。...只能用绝对路径可以获取到,但是相对路径不行啊。求解。war包和config文件在同一级目录
  • 在windows上用eclipse写上传文件的功能的时候,request....但当项目部署到tomcat服务器后request.getServletContext().getRealPath(“\uploadFile\”)获取的就是Tomcat下的项目的uploadFile目录的路径,这时就可通过ur.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,417
精华内容 22,966
关键字:

获取tomcat容器路径

友情链接: 1.Amplitude-Modulation.rar