-
2018-11-23 15:09:24
getServletContext().getRealPath("/"); //返回项目在容器中的实际发布运行的根路径。 //C:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps\project
更多相关内容 -
java中获取项目在tomcat目录下的路径方法
2021-02-26 11:08:11HttpServletRequest 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:14tomcat详解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连接器)有bio、nio、apr三种运行模式。
模式 默认运行版本 处理方式 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 -Xmx2048m4.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程序猿 - 博客园
-
javaWeb:Tomcat:主机虚拟路径
2021-11-12 18:12:19Tomcat:主机虚拟路径1.在tomcat服务器:目录里有 **conf/server.xml 文件 1.在tomcat服务器:目录里有 **conf/server.xml 文件 server.xml 文件:里面有:下面代码:(我摘抄一些代码) 其中: Host name=...Tomcat:主机虚拟路径
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:43request.getSession().getServletContext() 获取的是Servlet容器对象,相当于tomcat容器了。getRealPath("/") 获取实际路径,“/”指代项目根目录,所以代码返回的是项目在容器中的实际发布运行的根路径 ... -
Docker教程-3-Tomcat容器的安装配置使用
2021-10-15 17:12:283)进入tomcat容器 # tomcat9jdk8 是容器名称,也可以用容器id指定 docker exec -it tomcat9jdk8 /bin/bash 4)更改webapps目录 # 将webapps 改为webapps2(随意名字) ,将webapps.dist 改为webapps mv webapps ... -
Spring Boot 定制与优化内置的Tomcat容器实例详解
2020-08-28 15:18:09本文主要记录对内置容器优化和定制的方式,用于自己加深对SpringBoot理解。本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友参考下吧 -
request.getServletContext().getRealPath(“/“)的路径资源问题?部署资源路径(tomcat容器)
2021-12-19 20:03:50getRealPath("/") 获取实际路径,“/”指代项目根目录,所以代码返回的是项目在容器中的实际发布运行的根路径如: String realPath1 = request.getServletContext().getRealPath("/"); realPath1=E:\IDEA_Workspace_... -
Docker 如何上传本地文件到容器目录?
2021-01-09 09:49:37docker cp 本地文件路径 ID全称:容器路径 下面来举个例子: 我要把本地电脑的mysql-connector-java-5.1.46.jar上传到Linux下Docker里面的logstash容器下的/usr/share/logstash/lib目录。 1.首先使用ssh工具上传jar... -
CentOS7环境下,在docker中安装tomcat容器,学不会你打我.....
2022-04-12 14:07:51上一篇文章 :CentOS7环境下安装docker 开搞!如果你还没有在CentOS7系统中安装好了docker,请看一下上篇文章 启动docker sudo systemctl start docker ...3:需要先随便安装第一个容器(为什么说先随便安... -
Tomcat从项目目录外的其他存储位置获取图片
2021-12-01 16:53:44随着存储数据越来越多的情况,我们不得不把数据存放到另外的服务器例如 nas 等等,通常这个时候数据文件已经不在我们的Tomcat容器下了,那这个时候我们获取图片通常有两种方式 1.nginx 配置访问图片。(这里就不细说... -
踩坑+排雷新版IDEA2021.1创建配置Javaweb项目并部署在Tomcat容器,完整详细
2022-02-08 22:43:09Tomcat只是一个容器,它的安装与配置原来这么简单!新版的IDEA2021.1中如何创建并配置JavaWeb项目,又如何将其部署到Tomcat的容器中呢?文章将一步一步和你一起使用Tomcat从0到1部署一个网站,快来get你的第一个网站... -
Tomcat的连接器和容器简介
2020-09-21 16:07:19Tomcat 设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。 连接器负责对外交流,容器负责内部处理。 最顶层是 Server 服务器,这里的 Server 指的就是一个 Tomcat 实例。一个 Server... -
Spring boot,Tomcat容器之间关系以及请求执行流程
2020-05-14 16:06:16上一篇讲完了spring cloud,Spring boot,Tomcat容器之间关系以及执行顺序,这次再继续讲当一个请求到达服务时,执行的流程: 首先我们得把Tomcat讲清楚: 综上所述,一个tomcat只包含一个Server,一个Server可以... -
Tomcat(三).项目访问路径去掉项目名之tomcat配置
2021-09-17 20:44:16在Tomcat(二).web容器Tomcat知识点一文中,我们直接将项目war包放在tomcat/webapps目录下,访问:http://localhost:8080/helloServlet/login.html,需要加上helloServlet,那么如何不需要加呢? 方法一 将... -
使用idea打war包并发布到docker的tomcat容器中
2021-11-20 09:38:07–文件系统,提供了容器运行时需要用到的文件和参数配置 仓库repository?–管理容器的镜像的地方 Docker容器?–docker软件+镜像运行后提供所需要的服务 二、linux系统准备工作 虚拟机中可用的linux空系统 1.... -
【SpringBoot】深入分析SpringBoot如何内嵌Tomcat容器
2019-08-07 12:59:18那么问题来了,SpringBoot没有做这些配置,是怎么做到内置Tomcat容器,并让Tomcat启动的呢? 【SpringBoot和Tomcat的初始化】 我们先来看Tomcat的启动时在SpringBoot启动的哪一步?这里只列举比较关键的几步... -
spring cloud,sping boot,微服务,tomcat容器关系及创建执行顺序详解
2020-05-13 14:51:57由于在spring cloud启动源码加载过程中,没太弄清楚tomcat容器,spring 容器,spring cloud容器整体的加载顺序以及关系,所以想分析下这个流程,先不多说,上图 容器大致分为三层: BootStrap Spring 容器:由... -
Servlet的详解以及在Tomcat环境下的路径问题分析
2019-06-14 01:50:04有无"/":类比sturts2,有"/"表示从Action容器根目录开始寻找(也就是上下文根目录),如果无则最好给出访问资源的绝对路径。–这里不是很清晰,可以略过。 超链接是在servlet容器内进行(即服务器根目录)。所以struts2... -
Tomcat中的Host和Engine级别的servlet容器.docx
2022-06-20 21:54:18如果使用了Engine容器,那么它总是处于容器层级的最顶层,添加到Enginer容器中的子容器通常是org.apache.catalina.Host 或者 org.apahce.catalina.Context的实现,默认情况下Tomcat会使用一个Engine容器并且使用一个... -
详解如何通过tomcat的ManagerServlet远程部署项目
2021-01-10 20:09:01在Tomact中有一个Manager应用程序,它是用来管理已经部署的web应用程序,在这个应用程序中,ManagerServlet是他的主servlet,通过它我们可以获取tomcat的部分指标,远程管理web应用程序,不过这个功能会受到web应用... -
ssl证书获取与tomcat和nginx设置https
2021-12-01 23:35:081 SSL证书获取 SSL(Secure Sockets Layer 安全套接层) 是为网络通信提供安全及数据完整性的一种安全协议 作用: 机密性: SSL协议使用密钥加密通信数据 可靠性: 服务器和客户都会被认证,客户认证服务器是可选的... -
javaWeb项目下获取当前类的绝对路径
2021-03-01 06:31:04那么在JavaWeb项目中如何获取当前项目或Java类的路径呢?如下代码是一个简单的Servlet 类:public class First extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)... -
tomcat容器下配置数据库连接池并测试
2018-06-21 23:48:09Tomcat连接池测试,获取数据源 try { //初始化查找命名空间 Context ctx = new InitialContext(); //参数java:/comp/env为固定路径 Context envContext = (Context)ctx.lookup("java:/comp/env"); ... -
关于Tomcat和Servlet容器的小结
2018-08-30 17:37:45Tomcat是一个servlet容器,实现了对Servlet和JSP的支持,除此之外,tomcat还可以作为 一个web应用服务器。独立的Servlet容器是Tomcat的默认模式。管理和运行Servlet/JSP的 容器也称为WEB容器。 Tomcat服务器接受客户... -
springboot内置tomcat所在位置
2022-04-08 12:20:10目录: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/ -
spring的propertyPlaceholderConfigurer怎么获取到相对路径
2019-01-07 15:31:58最近有个需求:在Tomcat的webapps中建立个文件夹config,里面都是存放着properties配置文件比如db,log4j等。...只能用绝对路径可以获取到,但是相对路径不行啊。求解。war包和config文件在同一级目录 -
JavaWeb-tomcat关于request.getServletContext().getRealPath(“\uploadFile\”)获取项目外的路径导致获取...
2020-05-15 09:46:51在windows上用eclipse写上传文件的功能的时候,request....但当项目部署到tomcat服务器后request.getServletContext().getRealPath(“\uploadFile\”)获取的就是Tomcat下的项目的uploadFile目录的路径,这时就可通过ur.