标签: tomcat服务器

Eclipse配置tomcat服务器

Eclipse配置tomcat服务器

*近在用Eclipse开发web项目过程中,发现有的时候服务器启动了,项目也部署了,但是work中只有一个空的项目目录,然后项目访问的过程中,总是出错,查了一些资料,发现可以通过一下方式解决:

  1. 打开Eclipse,新建Tomcat服务器

%title插图%num

2.选择服务器版本和运行环境,然后直接Finish

%title插图%num

注意:*好是直接Finish,保证服务器*次创建,并且里面没有部署任何项目,只有这样才可以再第4步中修改Server Locations的配置

3.选择刚创建的服务器,右键选择Open打开服务器配置

%title插图%num

4.在Tomcat配置界面中修改Server Locations和Timeouts的配置

%title插图%num

注意:Server Location有三种配置,分别是:使用工作空间路径、使用Tomcat安装路径、自定义路径;我这里选择了第三种自定义路径,主要考虑方便去管理,请根据自己需要自行选择,但是Deploy Path:就是项目部署的目录一定要把默认的改为webapps;Timeouts的时间设置建议都要改一改,否则会出现项目部署之后丢失文件或不成功的情况
*后:通过以上的配置,在使用eclipse开发调试的时候基本上就不会出现部署成功,编译项目文件夹为空的问题了
结语:
登高者必自卑,行远者必自迩,在这个世界上,重要的不是你正站在哪里,而是你前进的方向!

Tomcat服务器结构浅析

*近有点懒,博客更新少,补上一篇之前的欠债。。。这篇博客内容基于《Tomcat架构解析》,这里把Tomcat主要的结构介绍了下,更详细的内容大家可以参考该书。

Tomcat是全世界*著名的基于Java语言的轻量级应用服务器,是一款完全开源免费的Servlet容器实现。同时,它支持HTML,JS等静态资源的处理,因此也可作为轻量级的WEB服务器来使用。在以前的WEB开发当中,我们主要通过将程序打包,将打包文件放到webapps下来进行访问,而在使用SpringBoot作为开发框架的情况下,由于SpringBoot已内嵌Tomcat,不需要将打包文件放在特定的文件夹下,而是直接运行程序即可。这篇博客*部分内容将介绍Tomcat的整体架构,第二部分介绍SpringBoot内嵌Tomcat的实现。

Tomcat总体架构
首先,让我们来看一张图:
%title插图%num

Tomcat总体的设计便是围绕着这张图来的。下面我们依次对上图中的各个部分做一下介绍。

Lifecycle 接口
该接口主要定义了容器整个生命周期过程中的各个阶段

public interface Lifecycle {
public void init() throws LifecycleException;

public void start() throws LifecycleException;

public void stop() throws LifecycleException;

public void destroy() throws LifecycleException;

public void addLifecycleListener(LifecycleListener listener);


}

该接口包含了容器初始化,开始,停止,销毁等过程。其实现类的各个组件在容器的工作过程当中需要做的工作,即在这几个函数中来完成。

Server
表示整个Servlet容器,因此Tomcat运行环境中只有唯一一个Server实例。在该接口的唯一实现类StandardServer中,除了表示Service的一个对象数组外,主要是一些关于Tomcat的属性,比如port,address等。该容器的这些属性,可以通过properties文件或者yaml文件进行配置(比如端口通过server.port=8080进行配置),或者是原来的开发方式,通过Server.xml进行配置。

Service
Service表示一个或者多个Connector的集合,这些Connector共享同一个Container(即Engine)来处理其请求。在同一个Tomcat实例内可以包含任意多个Service实例,它们彼此独立。Service其实是作为Tomcat中接收请求,以及处理请求的容器的纽带存在的。tomcat中的实现类StandardService有以下几个重要的属性:

public class StandardService extends LifecycleMBeanBase implements Service {
private Server server = null;
protected Connector connectors[] = new Connector[0];
private Engine engine = null;
protected final Mapper mapper = new Mapper();
}

server表示其所属Server,Engine作为处理该service中Connector的容器。Mapper可以看作是映射器,要来处理请求地址到处理该请求的容器及Servlet的映射。

Engine
在Tomcat中,Engine为*高层级的容器对象。尽管Engine不是直接处理请求的容器,却是获取目标容器的入口。

Host
Host 作为一类容器,表示Servlet引擎(Engine) 中的虚拟机, 与一个服务器的网络名有关,如域名等。客户端可以使用这个网络名连接服务器,这个名称必须要在DNS服务器上注册

Context
Context作为一类容器,用于表示ServetContext ,在Servlet规范中, 一个ServletContext表示一个独立的Web应用

Wrapper
Wrapper作为一类容器, 用于表示Web应用中定义的Servlet(其实是对Servlet进行了一层封装)。

Connector
表示Tomcat中的链接器,其主要作用是监听并转化Socket请求,并交由Container处理。其实就是对不同协议及协议处理器进行的封装。下面是我们需要关注的几个属性域:

public class Connector extends LifecycleMBeanBase {
protected Service service = null;
protected final ProtocolHandler protocolHandler;
}

Service是其父容器,ProtocolHandler表示协议处理器

ProtocolHandler
ProtocolHandler表示协议处理器,是一个接口,其实现类有以下几种:

%title插图%num

从图中我们大概能够猜到,其中的每一个实现类,其实都代表着一种I/O协议的处理过程,我们以同步非阻塞I/O的处理器Http11NioProtocol为例,其*初继承于抽象类AbstractProtocol,它的定义如下:

public abstract class AbstractProtocol<S> implements ProtocolHandler,
MBeanRegistration {
private final AbstractEndpoint<S> endpoint;
private Handler<S> handler;
private final Set<Processor> waitingProcessors = Collections.newSetFromMap(new ConcurrentHashMap<Processor, Boolean>());
}

AbstractEndpoint代表的是协议端点,比如,Nio使用的是NioEndpoint类,即为nio的实现逻辑,对nio类型的Socket进行监听, Handler作为AbstractEndpoint接收到I/O后,用来处理I/O的处理器。

请求处理过程
当我们的浏览器或者是其他工具发起一个Http请求时候,Tomcat的整个处理过程如下:

%title插图%num

从一开始的Endpoint监听到Http请求后,调用Processor进行处理,Process调用CoyoteAdapter进行处理,CoyoteAdapter通过Mapper获取到处理该请求的顶级容器Engine,通过一层层的查找,*终获取到处理该请求的Wrapper,经过Tomcat中定义的一系列过滤器(Filter)后,*终由Servlet(在SpringMVC中,便是被DispatcherServlet)进行了消费。Tomcat整个处理的流程便是这样的。

SpringBoot内嵌Tomcat
再完成了Tomcat简单的解析之后,我们还要问,在启动SpringBoot应用的过程当中,是如何启动Tomcat的呢?在Tomcat中,其已经为我们提供了一个表示其实例的Tomcat类,通过查找,我们知道,该类的实例是在TomcatEmbeddedServletContainerFactory类的getEmbeddedServletContainer函数中被创建的。启动一个简单的SpringBoot应用,通过断点,我们能够看到它被调用的路径:

%title插图%num

从上图可知,到Springboot应用刷新容器的时候,会在该过程当中创建Tomcat的实例,我们来下看下函数的实现过程:

public class TomcatEmbeddedServletContainerFactory
extends AbstractEmbeddedServletContainerFactory implements ResourceLoaderAware {
@Override
public EmbeddedServletContainer getEmbeddedServletContainer(
ServletContextInitializer… initializers) {
// 创建Tomcat的实例
Tomcat tomcat = new Tomcat();

// 为Tomcat设置应用的根目录
File baseDir = (this.baseDirectory != null ? this.baseDirectory
: createTempDir(“tomcat”));
tomcat.setBaseDir(baseDir.getAbsolutePath());

// 根据Springboot使用的I/O协议,创建Connector,默认的协议是`String DEFAULT_PROTOCOL = “org.apache.coyote.http11.Http11NioProtocol`,及NIO协议(同步非常阻塞)
Connector connector = new Connector(this.protocol);
// 为Service添加Connector,若Tomcat还没有Service,则getService函数中会创建
tomcat.getService().addConnector(connector);
customizeConnector(connector);
tomcat.setConnector(connector);

// 通过配置autoDeploy禁止虚拟主机自动部署Web应用
tomcat.getHost().setAutoDeploy(false);

// 配置Tomcat的顶级容器Engine
configureEngine(tomcat.getEngine());

// 添加额外的自定义协议的Connector
for (Connector additionalConnector : this.additionalTomcatConnectors) {
tomcat.getService().addConnector(additionalConnector);
}

// 配置虚拟主机Host,其内会进一步初始化Host的字容器
prepareContext(tomcat.getHost(), initializers);

// 对Tomcat进行包装,返回TomcatEmbeddedServletContainer的实例
return getTomcatEmbeddedServletContainer(tomcat);
}
}

关于Tomcat的内容其实还有很多,只是由于时间限制,不能在这里更深入地讲解,若后期有机会,会继续更加深入地介绍Tomcat的各个组件,这篇内容就做为Tomcat容器系列的*篇吧~

 

 

tomcat服务器、http

一、Tomcat服务器(会)
1、Web开发概述
javaSE:

javaEE:13种

javaME:

JavaEE规范: 13种技术的总称。Servlet/Jsp  JDBC  JNDI JTA…

Tomcat:Servlet/Jsp容器,轻量级服务器。

 

2、Tomcat的安装与配置
3.1、安装:
直接解压到指定目录即可。(注:目录不要太深;目录不要有中文或空格)

3.2、启动服务器:
F:\apache-tomcat-7.0.52\bin\startup.bat

启动服务器的前题:

配置JAVA_HOME:jdk的安装路径  path=%JAVA_HOME%\bin

进入到F:\apache-tomcat-7.0.52\bin>startup.bat才能执行命令

配置CATALINA_HOME: 没必要配置

F:\apache-tomcat-7.0.52

 

startup.bat 启动命令

shutdown.bat 停止命令

 

 

如果tomcat端口被占用,解决办法

> 修改F:\apache-tomcat-7.0.52\conf\server.xml

第70行:  <Connector port=”8081″/>

> 关闭端口号对应的进程:

cmd–>netstat-ano –>找到pid–>任务管理器–>显示pid–>关闭进程

3.3、测试服务器是否启动成功
http://localhost:8080

 

 

3.4、Tomcat的主要目录:(重要)
3、标准的JavaWeb应用的目录结构(很重要:记住)
应用:

MyApp

1.html

Css

myStyle.css

Js

My.js

WEB-INF : 注意:固定写法。此目录下的文件不能被外部直接访问。

classes:    我们编写的程序代码。.class文件

lib :  应用需要用的jar文件
web.xml  : 应用的配置信息

4、部署应用到Tomcat服务器
手动部署

> 开放目录部署方式

首先在F:\apache-tomcat-7.0.52\webapps下自己创建一个文件夹

然后把应用下webroot里面的内容直接复制到这个文件夹里面。

> 把应用打成war包。

打war包命令:jar  -cvf  MyApp.war .

把war包直接复制到F:\apache-tomcat-7.0.52\webapps下,应用自动解压

 

注:webapps目录下有几个目录就代表有几个应用;webapps就默认代表服务器的根目录。

 

自动部署

Tomcat服务器与MyEclipse集成(一定要掌握)

1、Tomcat集成

2、创建web应用

3、部署

 

修改myeclipse自带tomcat端口号方法:在myEclipse界面的左边,Servers->MyEclipseTomcat v7.0-config->server.xml   进到里面修改端口号(20,63,83行处)

 

URL: 统一资源定位符(网址)

URI: 统一资源标识符

http://localhost:8080/day08_02/1.html

协议  主机IP(端口号) URI(当前应用的资源路径)

 

5、配置默认端口、默认应用、默认主页
A、把server.xml中<Connector port=”80″protocol=”HTTP/1.1″

connectionTimeout=”20000″

redirectPort=”8443″/>

浏览器http默认端口:80

B、默认应用:

默认应用:把配置的虚拟目录的配置文件名改为ROOT.xml即可。

C、默认主页

修改当前应用web.xml,添加以下内容:

当前的应用被执行了 在服务器端部署应用的过程

1安装服务器

2.打开服务器

3.创建应用

4.应用的发布: 手动发布:将应用(webroot下)放在服务器的webapps下面

自动发布:利用myeclipse实现发布 通过在myeclipse中安装服务器实现对服务器的操作 >安装的过程有两种:

1.使用myeclipse自带的服务器 2.使用单独的服务器与myeclipse关联 5.测试

 

 

二、HTTP协议
1、HTTP协议概述
> HTTP是HyperText Transfer Protocol(超文本传输协议)的简写,传输HTML文件。

> 用于定义WEB浏览器与WEB服务器之间交换数据的过程及数据本身的格式。

 

2、请求部分
1、请求消息行

GET  /day08_02/1.html  HTTP/1.1

请求方式:Get(默认) POST  DELETE  HEAD等

GET:明文传输 不安全,数据量有限,不超过1kb

GET/day08_02/1.html?uName=tom&pwd=123 HTTP/1.1

POST: 暗文传输,安全。数据量没有限制。

 

URI:统一资源标识符。去协议和IP地址。

 

协议/版本 :

 

2、请求消息头

从第2行到空行处,都叫消息头

Accept:浏览器可接受的MIME类型

告诉服务器客户端能接收什么样类型的文件。

Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集

Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip

Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。可以在浏览器中进行设置。

Host:初始URL中的主机和端口

Referrer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面

Content-Type:内容类型

 

告诉服务器浏览器传输数据的MIME类型,文件传输的类型

application/x-www-form-urlencoded

 

If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT利用这个头与服务器的文件进行比对,如果一致,则从缓存中直接读取文件。

User-Agent:浏览器类型.

Content-Length:表示请求消息正文的长度

Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接

Cookie:这是*重要的请求头信息之一 (在讲会话时解析)

Date:Date: Mon, 22Aug 2011 01:55:39 GMT请求时间GMT

 

3、消息正文: 当请求方式是POST方式时,才能看见消息正文

uName=tom&pwd=123

3、响应部分
1、响应消息行

*行:

HTTP/1.1   200  OK

协议/版本   响应状态码  对响应码的描述(一切正常)

响应状态码:

常用的就40多个。

200(正常)  一切正常

302/307(临时重定向)

304(未修改)

表示客户机缓存的版本是*新的,客户机可以继续使用它,无需到服务器请求。

404(找不到)  服务器上不存在客户机所请求的资源。

500(服务器内部错误)

 

2、响应消息头

Location: http://www.it315.org/index.jsp指示新的资源的位置

通常和302/307一起使用,完成请求重定向

Server:apachetomcat指示服务器的类型

Content-Encoding: gzip服务器发送的数据采用的编码类型

Content-Length:80 告诉浏览器正文的长度

Content-Language:zh-cn服务发送的文本的语言

Content-Type: text/html; charset=GB2312服务器发送的内容的MIME类型

Last-Modified:Tue, 11 Jul 2000 18:23:51 GMT文件的*后修改时间

Refresh: 1;url=http://www.it315.org指示客户端刷新频率。单位是秒

Content-Disposition: attachment; filename=aaa.zip指示客户端下载文件

Set-Cookie:SS=Q0=5Lb_nQ;path=/search服务器端发送的Cookie

Expires: -1

Cache-Control: no-cache (1.1)

Pragma: no-cache  (1.0)  表示告诉客户端不要使用缓存

Connection:close/Keep-Alive

Date:Tue, 11 Jul 2000 18:23:51 GMT
————————————————
版权声明:本文为CSDN博主「Bigoted_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Bigoted_/article/details/79320809

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速