目录

web服务器基本原理及Tomcat配置

web服务器基本原理及Tomcat配置

一、Web服务器基本知识

转自:http://www.cnblogs.com/fnng/archive/2012/11/08/2761713.html

在开始了解

Apache前,我们先熟悉一下web服务器,因为apache也是web服务器的一种。

Web系统由客户端(浏览器)和服务器端两部分组成。Web系统架构也被称为B/S架构。最常见的Web服务器有Apache、IIS等,常用的浏览器有IE、Firefox、

chrome

等。当你想访问一个网页时,需要在浏览器的地址栏中输入该网页的URL(Uniform Resource Locator,简称为URL)地址,或者是通过超链接链接到该网页。浏览器会向该网页所在的服务器发送一个HTTP请求,服务器会对接收到的请求信息进行处理,然后将处理的结果返回给浏览器,最终将浏览器处理后的结果呈现给用户。

https://i-blog.csdnimg.cn/blog_migrate/cd8c2ee3774d4b410f52597c960e4456.jpeg

web

服务器端的

工作流程

(1)客户端发送请求

客户端(通过浏览器)

和Web服务器建立TCP连接,连接建立以后,向Web服务器发出访问请求(如get)。根据HTTP协议,该请求中包含了客户端的IP地址、浏览器的类型和请求的URL等一系列信息。

(2)服务器解析请求

Web服务器对请求按照HTTP协议进行解码来确定进一步的动作,设计的内容有三鼐要点:方法(GET)、文档(/sample.html)、和浏览器使用的协议(HTTP/1.1)其中方法告诉服务器应完动的动作,GET方法的含义很明显是:服务器应定位、读取文件并将它返回给客户。

Web服务器软件现在就知道了,它应该找到文件/sample.html,并使用HTTP/1.1协议将内存返回给客户。信息是经过与请求到来相同的连接发出的,所以服务器不需要定们客户或创建新的连接。

(3)读取其它信息(非必须步骤)

Web服务器根据需要去读取请求的其它部分。在HTTP/1.1下,客户还应给服务器提供关于它的一些信息。元信息(metainformation)可用来描述浏览器及其能力,以使服务器能据此确定如何返回应答。

(4)完成请求的动作

若现在没有错误出现,

WWW服务器将执行请求所要求的动作。要获取(GET)一个文档,web服务器在其文档树中搜索请求的文件(/sample.html)。这是由服务器机器上作为操作系统一部分的文件系统完成的。若文件能找到并可正常读取,则服务器将把它返回给客户。

如果成功:文件被发送出去。

首先,web服务器发送一个状态码及一些描述信息。既然文件已经找到,则发送状态码200,表示一切都OK ,文档随后发出,因为发送的信息是HTML文档,所以Content-type 取值为text/html。文档长为1024个字节,所以Content-type 取1024 。服务器软件的标识及文件的时间属性信息也被包含在头域中。

如果失败:返回错误指示。

如果请求的文件没有找到或找到但无法读取,测请求无法满足。这时将返回不同于200的状态码。最常见的问题是请求中的文件名拼写有误,所以服务器无法找到该文件。这种情况下,服务器将发送一个状态码—404 给客户。

(5)关闭文件和网络连接,结束会话。

当文件已被发邮或错误已发出后,

web服务器结束整个会话。它关闭打开的的被请求文件,关闭网络端口从而结束网络连接。有关的其它工作则是由客户端来完成的,包括接收数据,并以用户可读的方式呈现出来。这些与服务器无关。

apache架构

Apache 作为历史最悠久的

web

服务器,一直是

web

应用系统的首选,是世界上被广泛应用的

web

服务器软件,它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的

web

服务器端软件之一,也是流行架构

LAMP

的重要组成部分。

作为世界上最流行的Web服务器,Apache遵循的同样是HTTP协议,默认端口号为80。下面来是apache 架构图。

https://i-blog.csdnimg.cn/blog_migrate/7b538d9b1a38480080f436e270aee32f.jpeg

Apache 特点:

  • 支持最新的HTTP/1.1通信协议。Apache是最先使用HTTP/1.1协议的Web服务器之一,它完全兼容HTTP/1.1协议并与HTTP/1.0协议向后兼容。Apache已为新协议所提供的全部内容做好了必要的准备。
  • 支持多计算机平台。Apache几乎可以在所有的计算机操作系统上运行,包括主流的UNIX、Linux及Windows操作系统。
  • 配置文件简单,易操作。用户可以通过直接修改Apache的配置文件信息来修改Apache,操作起来十分方便。
  • 支持实时监视服务器状态和定制服务器日志。Apache在记录日志和监视服务器自身运行状态方面提供了很大的灵活性,可以通过Web浏览器来监视服务器的状态,也可以根据自己的需要来定制日志。
  • 支持多种方式的HTTP认证。
  • 支持Web目录修改。用户可以使用特定的目录作为Web目录。
  • 支持CGI脚本,如Perl、PHP等。
  • 支持服务器端包含指令(SSI)。
  • 支持安全Socket层(SSL)。
  • 支持FastCGI。
  • 支持虚拟主机。即通过在一台服务器上使用不同的主机名来提供多个HTTP服务。Apache支持基于IP、主机名和端口号三种类型的虚拟主机服务。
  • 跟踪用户会话。当用户浏览基于Apache的Web站点时,可以通过Apache的mod_usertrack模块对其进行跟踪。
  • 支持动态共享对象。Apache的模块可在运行时动态加载,这就意味着这些模块可以被装入服务器进程空间,从而减少系统的内存开销。
  • 支持多进程。当负载增加时,服务器会快速生成子进程来处理,从而提高系统的响应能力。
  • 支持第三方软件开发商提供的功能模块。比如Apache加载mod_jserv模块后可以支持Java Servlet,这样就可以运行Java应用程序了。
  • 支持多线程和多进程混合模型的MPM。 当MPM类型指定为worker时,由于是使用线程来处理,所以可以处理海量的请求,而系统资源的开销要小于基于进程的服务器。

Apache

工作模拟

Apache 2.X 支持插入式并行处理模块,称为多路处理模块(

MPM

)。在编译

apache

时必须选择也只能选择一个

MPM

,对类

UNIX

系统,有几个不同的

MPM

可供选择,它们会影响到

apache

的速度和可伸缩性。

Worker MPM : 使用多个子进程,每个子进程中又有多个线程。每个线程处理一个请求,该

MPM

通常对高流量的服务器是一个不错的选择。因为它比

prefork MPM

需要更少的内存且更具有伸缩性。

Prefork MPM : 使用多个子进程,但每个子进程不包含多线程。每个进程只处理一个连接。在许多系统上它的速度和

worker MPM

一样快,但是需要更多的内存。这种无线程的设计在某些性况下优于

worker MPM

,因为它可在应用于不具备线程安全的第三方模块上(如

PHP3/4/5

),且在不支持线程调试的平台上易于调试,另外还具有比

worker MPM

更高的稳定性。

(后面会介绍如果这两种模式以及apache更多的设置与监控等)

二、附一个socket实例加深web访问理解

(摘自 传智播客 视频)

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
 * Socket服务器端程序:本地资源共享给外地访问
 */

public class ServerTest {

	public static void main(String[] args) throws Exception{
		//1、创建ServerSocket
		ServerSocket server=new ServerSocket(8888);
		System.out.print("服务器已经启动成功。。。");
		//2、接收客户端的连接
		Socket socket=server.accept();
		//3、读取本地文件html文件
		FileInputStream in=new FileInputStream(new File("E:/bookmarks_2017_3_7.html"));
		//4、构件数据输出通道
		OutputStream out=socket.getOutputStream();
		//5、发送数据
		byte[] buf=new byte[1024];
		int len=0;
		while((len=in.read(buf))!=-1){
			out.write(buf,0,len);
		}
		//6、关闭
		out.close();
		in.close();
	}

}

运行服务器端程序ServerTest;然后在浏览器输入 http://localhost:8888即可有效果

三、Tomcat 8配置

转自:http://blog.csdn.net/zhang5690800/article/details/49929565

首先感谢博主“六号码头”,本文是在他的原创文章《Apatch Tomcat8.0 的配置遇到问题全面总结》的基础上又做的补充。 https://img-blog.csdn.net/20151119165006837

此文章默认已经安装并配置好了 开发环境。

这里少说两句关于Tomcat8的下载及安装。

直接上Tomcat官网上下载Windows64位的zip版

https://img-blog.csdn.net/20151119161239375

下载并解压,我的放到了D盘,解压目录为D:\apache-tomcat-8.0.28,如下图:

https://img-blog.csdn.net/20151119161706139

下面是Tomcat相关的环境变量 (正确写法)【其实RUNNING.txt文件里边也说了一下配置步骤哈,只不过English】

变量
CATALINA_BASED:\apache-tomcat-8.0.28
CATALINA_HOMED:\apache-tomcat-8.0.28
TOMCAT_HOMED:\apache-tomcat-8.0.28
JAVA_HOMEC:\Program Files\Java\jdk1.8.0_60

这其中有几点要注意:

  1. JAVA_HOME中的路径是JDK的路径,别错写成JRE的路径;

  2. JAVA_HOME中的路径不能使用分号结尾,如:C:\Program Files\Java\jdk1.8.0_60;

  3. CATALINA_BASE,CATALINA_HOME,TOMCAT_HOME中的路径不能以”\”结尾,

    如:E:\Java\apache-tomcat-6.0.29\

如果以上几点都做对了就不会出现闪退的问题。

最初我点击bin中的startup.bat文件,会出现闪退的问题。

要找出是哪里的原因导致的闪退,方法如下:

1、右击startup.bat文件,选择编辑

2、在最后一行的下一行写上“ pause ” (暂停)

3、再次运行startup.bat文件,这是DOS界面会显示错误原因

我的错误原因是:The CATALINA_HOME environment variable is not defined correctly.

解决方法就是参考了前面说的几点,全都确保改对了,之后再运行就成功了,如下图:

https://img-blog.csdn.net/20151119163842281

显示启动时间743ms,至此还有一布需要验证,就是在浏览器中输入 ,看能否进入下面页面。

https://img-blog.csdn.net/20151119164039374

顺便说一句,如果你把刚刚那个DOS界面关闭,你再进 就进不去了,必须是开着startup.bat那个DOS界面才行,不知道大家是不是也这样。


大功告成! ……..一下午没白忙活 https://img-blog.csdn.net/20151119164144867

做项目时经常遇到的关于Tomcat的问题:

1.环境变量

1.新建系统变量:变量名:CATALINA_BASE     变量值:D:\apache-tomcat-7.0.70(Tomcat目录)

2.新建系统变量:变量名:CATALINA_HOME     变量值:D:\apache-tomcat-7.0.70(Tomcat目录)

3.打开PATH,添加变量值:%CATALINA_HOME%\lib;%CATALINA_HOME%\bin;( 这里有个;一定要注意 )

在环境变量中修改添加变量时,一定要注意分号、空格,是否有多余的字母。作者就是因为path路径中多了一个字母,怎么都配置不成功。如果配置不成功,一定要反复检查。

以上错误,非常容易出现错误:CATALINA_HOME或是JAVA_HOME没有配置好。如错误提示“The CATALINA_HOME environment variable is not defined correctly”

2.乱码

1.配置 server.xml

<Connector port=“8080” protocol=“HTTP/1.1” connectionTimeout=“20000” redirectPort=“8443” URIEncoding=“UTF-8” />

3.Tomcat部署成功,浏览器显示空白

1.通过cmd输入netstat -a -n来查看Tomcat当前绑定的端口

2.http://localhost:8080或者http://127.0.0.1:8080是否能够访问小猫页面

3.查看Tomcat目录下是否存在ROOT文件   不存在就重新解压一份

4.使用startup启动Tomcat闪退

1.找到Tomcat目录下bin\startup.bat右击->编辑, 在文件头添加如下:

SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_51 (java jdk目录)

SET TOMCAT_HOME=D:\apache-tomcat-7.0.70(解压后的tomcat文件目录)

2.找到Tomcat目录下bin\shutdown.bat右击->编辑, 在文件头添加如下:

SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_51 (java jdk目录)

SET TOMCAT_HOME=D:\apache-tomcat-7.0.70(解压后的tomcat文件目录)

四、URL查找过程

转自:http://www.cnblogs.com/haozhengfei/p/6537825.html

Tomcat之URL查找的过程

https://i-blog.csdnimg.cn/blog_migrate/9a08a16912628b3288343fc018a06435.jpeg

webapps目录: tomcat共享目录。需要共享的本地资源放到此目录中。

Tomcat的目录结构

https://i-blog.csdnimg.cn/blog_migrate/1017ff603d1b7118ea738f6ebd10ea25.png

五、测试servlet学习

转自:http://www.cnblogs.com/xingyunblog/p/3758491.html

【总结一下步骤:1、编写一个继承HttpServlet的servlet程序;测试用的话只需要重写其doGet方法;2、找到写好的类的.class字节码文件,将其【包目录+文件】拷贝到Tomcat的一个web应用(默认webapps文件夹下边新建的文件夹)中的WEB-INF的classes文件下边;3、在web应用下的[WEB-INF文件夹下]web.xml文件配置servlet;4、气动Tomcat服务器,运行访问。】

操作方法:

1.新建工程;

File——>new——>Java Project——>TestServlet(工程名称)——>Finish.

2.加载servlet-api.jar类包;【

其实这个步骤有个更简单便捷的做法:在计算机内找到servlet-api.jar这个包,然后右键复制,粘贴到Eclipse的项目工程目录内,然后右键工程内的该包,Build Path->Add to Build Path

TestServlet(右键)——>Build Path——>Configure Build Path——>Library

——>Add External JAR Selection——>(浏览在tomcat的lib目录下找到servlet-api.jar选中后点击打开)。——> OK

http://images.cnitblog.com/i/622489/201405/290848097288421.png

http://images.cnitblog.com/i/622489/201405/290851456663719.png

http://images.cnitblog.com/i/622489/201405/290857161971573.png

3.新建类HelloWorldServlet;

代码如下:

https://i-blog.csdnimg.cn/blog_migrate/69c5a8ac3fa60e0848d784a6dd461da6.gif

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class HelloWorldServlet extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        System.out.println("doGet");
        response.getWriter().write("<a href=http://www.baidu.com>go</a>");
    }

}

https://i-blog.csdnimg.cn/blog_migrate/69c5a8ac3fa60e0848d784a6dd461da6.gif

4.切换成navigator视图复制生成的class类。

http://images.cnitblog.com/i/622489/201405/290919588382946.png

http://images.cnitblog.com/i/622489/201405/290943553694377.jpg

5.在tomcat的webapps根目录下新建一个文件夹名称为test。

http://images.cnitblog.com/i/622489/201405/290948428841107.png

6.进入test文件夹,新建一个文件夹名称为WEB-INF http://images.cnitblog.com/i/622489/201405/290949503694256.png

7.新建一个文件名称为web.xml,里面内容如下:

https://i-blog.csdnimg.cn/blog_migrate/69c5a8ac3fa60e0848d784a6dd461da6.gif

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5"> 
<servlet> 
 <!--servlet的内部名称,可以自定义-->     
 <servlet-name>HW</servlet-name> 

<servlet-class>HelloWorldServlet</servlet-class>
</servlet>   
<servlet-mapping>  

<servlet-name>HW</servlet-name> 

<url-pattern>/ab</url-pattern>  </servlet-mapping></web-app>

https://i-blog.csdnimg.cn/blog_migrate/69c5a8ac3fa60e0848d784a6dd461da6.gif

注意:

HW名称上面的和下面的一致即可,HelloWorldServlet是你要测试的class文件的名称。

/ab是当浏览器访问:

http://127.0.0.1:8080/test/ab

时调用这个servelet

8.新建一个名称为classes的文件夹,把刚才复制的class文件放到里面。【这里需要把包路径+类文件拷贝到这里边】

http://images.cnitblog.com/i/622489/201405/290957491973071.png

http://images.cnitblog.com/i/622489/201405/290958171818021.png

  
9.启动tomcat服务,我用的apache-tomcat-7.0.54版本,设置好环境变量了,所以可以开始——运行——输入:startup就可以开启服务。

http://images.cnitblog.com/i/622489/201405/291003223385695.png

http://images.cnitblog.com/i/622489/201405/291003566342285.png

如果是tomcat6.0,那么开启服务需要双击这个打开服务。当然,也可以在开始菜单里面找到tomcat服务管理进行打开服务。

http://images.cnitblog.com/i/622489/201405/291005316667684.png

  
  
10.打开浏览器输入网址后回车:  
http://127.0.0.1:8080/test/ab  
  

http://images.cnitblog.com/i/622489/201405/291000081508153.png

说明:  
  
本servelt代码功能是  
  
1.tomcat后台打印出来doget,  
  
2.当点击go后,自动跳转到百度主页!  


## 六、eclipse环境下如何配置tomcat,并且把项目部署到Tomcat服务器上

相关博客:
http://m.blog.csdn.net/article/details?id=51830104、http://blog.csdn.net/shumago/article/details/47680625
http://blog.csdn.net/yerenyuan_pku/article/details/51852086、http://blog.csdn.net/lucklq/article/details/7621807
http://www.cnblogs.com/smyhvae/p/4046862.html
不知道怎么回事,配置时候总是出问题“Could not load the Tomcat server configuration at \Servers\Tomcat v8.0 Serve”;怒了,先试试MyEclipse吧;
上边博客中提到的一个Java EE切换跟web.xml自动生成
![](https://img-blog.csdn.net/20170319152430354?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2NsaXUxMjM0NQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170319152446307?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2NsaXUxMjM0NQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
“下面来说一下怎么修改html页面的字体样式
Windows ->Preferences->General->Appearance->Colorsand Fonts->Basic->Text Font
我一般都会选择字体为Courier New,大小设为11,感觉这个挺好看的 。” 引自:http://blog.csdn.net/tommonkey/article/details/51848579