Tomcat服务器与Http协议之请求(get请求、post请求)和响应

发展历程

1、最早的web服务器-NCSA(美国国家超级计算应用中心的缩写),由于主要开发者的离开,让其前景变得不明朗。所以一些开发者聚集在一起,对其进行了缺陷修复和增强代码,发布了新的版本Apache,即:“打补丁后的Web服务器(A Patchy Web Server)”
2、Apache软件基金会(ASF),1999年成立。

主要职责:
1、通过供给 硬件、通信和商业基础设施的形式开放、协作式软件开发项目 提供基础。
2、用公司和个人捐赠的资源创建一个独立法定企业,保证这些资源都用于公益事业
3、为个人志愿者提供法律保护手段以避免受ASF项目相关的法律纠纷的影响。
4、保护Apache商标,以防止其被其他组织滥用。

3、Tomcat工程起源于早期的Java Servlet技术。Servlet是一种可以嵌入特定Web服务器中的Java应用程序(从此摆脱JavaSE基础,开始走向web应用),毫无疑问,第一个Servlet容器,即Java Web服务器是由Sun公司创建的。
于是在1999年的时候,Sun公司把Servlet容器的代码赠与ASF,于是 Servlet引擎+Apache Web服务器=Tomcat服务器

4、Tomcat服务器第一版本3.x系列,支持Servlet2.2JSP1.1(所以JSP的出现晚于Servlet)规范。
Tomcat4.0(代号Catalina)发布,Catalina对Tomcat的体系结构进行了完成的重构,并建立了新的代码库,支持Servlet2.3和JSP1.2规范

5、作为Servlet容器,Tomcat是庞大的一组标准的主要组成部分,这组标准被整体称为Java企业版(Java EE)平台。JavaEE标准定义了一组基于Java的API(应用程序接口),适合为企业创建Web程序~

6、

Java EE API 描述
企业版JavaBeans(EJB) 提供机制以使Java开发者易于使用组建中的扩展特性
Java Message(JMS) 提供高性能异步信息系统
网络服务API 网络服务的API套件和XML进程
Java 管理扩展(JMX) 标准化一个运行时交互式引导和管理应用程序
Java 事务处理API(JTA) 提供高性能异步信息系统
网络服务API 网络服务的API套件和XML进程

打好基础

1、web服务软件作用:把本地资源共享给外部访问
2、Tomcat服务器基本操作:

启动: %tomcat%/bin/startup.bat  
关闭: %tomcat%/bin/shutdown.bat 
访问tomcat主页:
http://localhost:8080 

3、web应用目录结构

 |- WebRoot   根目录 
        |-静态资源(html+css+javascript+images+xml)  可以直接被浏览器访问到的 
        |-WEB-INF                                  不可以直接被浏览器访问到 
            |-classes     存放class字节码文件 
            |-lib         存放jar包文件 
            web.xml      web应用的配置文件,配置servlet 

4、Servlet技术: 用java语言开发动态资源的技术

5、HTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

1)http协议:对浏览器客户端和服务器端之间数据传输的格式规范。 

2)http请求:浏览器->服务器端 
    格式:  
        请求行(请求方式(GET/POST) 请求资源(URI) http协议版本(http1.1)) 
        请求头(键值对形式存在。 host、user-agent、referer) 
        一个空行 
        实体内容(POST提交的参数) 
    HttpServletRequest对象: 请求对象。获取请求信息。 
    请求行:request.getMethod()   request.getRequestURI/getRequestURL()  request.getProtocol(); 
    请求头: request.getHeader("name")    request.getHeaderNames()   
    实体内容: request.getInputStream()  

    获取参数数据:(GET或POST) 
        request.getParameter("name")  一个值的参数 
        request.getParameterValues("name"); 多个值的参数 
        request.getParameterNames()    所有参数 

3)http响应: 服务器->浏览器端 
    格式:  
        响应行(http协议版本 状态码 描述) 
            常用的状态码: 200   302  404   500 
        响应头( location(结合302状态码完成请求重定向功能)、 refresh(定时刷新)、content-type、                           content-disiposition(以下载方式打开))  
        一个空行 
        实体内容 
    HttpServletResponse对象: 响应对象。设置响应信息。 
        响应行: response.setStatus(); 
        响应头: response.setHeader("name","value") 
        实体内容:  
            (PrintWriter) response.getWriter().writer(); 字符内容 
            (OutputStream)response.getOutputStream().writer();  字节内容        

Web开发入门

1、软件的结构

C/S(Client - Server 客户端-服务器端)
**典型应用:**QQ,LOL等
特点:
1)必须下载特定的客户端程序。
2)服务器端升级、客户端升级。


B/S(Browser-Server 浏览器-服务器端)
典型应用:微博网页版,4399小游戏(俗称:网站)
特点:
1)不需要安装特定的客户端(只需要安装浏览器即可)
2)服务器端升级,浏览器不需要升级!

例如:就业签约系统和招聘通~

2、服务器
从物理上来说,服务器就是一台PC机器。8核,8G以上,T来计算,带宽100M

(这个去查下,详细讲讲~)

web服务器:PC机器安装一个具有web服务的软件,成为web服务器。
数据库服务器:PC机器安装一个具有数据管理服务的软件,称之为数据库服务器。
邮件服务器:PC机器安装一个具有发送邮件服务的软件,称之为邮件服务器。

3、web服务软件

web服务软件的作用:把本地的资源共享给外部访问。

4、常见的市面上的web服务软件

WebLogic:BEA公司的产品。收费的。支持JavaEE规范。
WebSphere:IBM公司的产品。收费的。支持JavaEE规范。
JBoss:Redhat公司的产品。收费的。支持JavaEE规范。
Tomcat:开源组织Apache的产品。免费的。支持部分的JavaEE规范。(Servlet、jsp、jdbc,但ejb,rmi不支持)

EJB:http://blog.csdn.net/jojo52013145/article/details/5783677
RMI:http://haolloyin.blog.51cto.com/1177454/332426/

Tomcat基本使用


2.1 下载并安装 
    1)到apache官网。www.apache.org     http://jakarta.apache.org(产品的主页) 
    2)安装版:window (exe、msi) linux(rmp) 
       压缩版:window(rar,zip) linux(tar,tar.gz)学习时候使用 
    3)运行和关闭tomcat 
        3.1 启动软件 
            a)找到%tomcat%/bin/startup.bat ,双击这个文件 
            b)弹出窗口,显示信息(不要关闭次窗口) 
            c)打开浏览器,输出以下地址 
                http://localhost:8080 
            d)看到一只猫画面,证明软件启动成功! 

        3.2 关闭软件 
            a)找到%tomcat%/bin/shutdown.bat,双击这个文件即可! 
            c)打开浏览器,输出以下地址。看到“无法连接”(最好先清空浏览器缓存) 

2.2 tomcat软件使用的常见问题 
    1)闪退问题 
    原因:tomcat软件是java语言开发的。 tomcat软件启动时,会默认到系统的环境变量中查找一个名称叫JAVA_HOME的变量。这个变量的作用找到tomcat启动所需的jvm。 
    解决办法; 到环境变量中设置JAVA_HOME的变量 
        JAVA_HOME= C:\Program Files\Java\jdk1.6.0_30  (注意别配置到bin目录下) 

    2)端口占用的错误 
    原因: tomcat启动所需的端口被其他软件占用了! 
    解决办法:  
        a)关闭其他软件程序,释放所需端口 
        b)修改tomcat软件所需端口 
           找到并修改%tomcat%/conf/server.xml文件           
            "8081" protocol="HTTP/1.1"  
                connectionTimeout="20000"  
                redirectPort="8443" /> 

        3)CATALINA环境变量问题 
            原因: tomcat软件启动后,除了查找JAVA_HOME后,还会再查找一个叫CATALINA_HOME变量,这个变量的作用是设置tomcat的根目录。 
            解决办法:建议不要设置CATALINA_HOME变量。检查如果有的话,清除掉!!! 

2.3 体验tomcat软件作用 
    webapps目录: tomcat共享目录。需要共享的本地资源放到此目录中。 

2.4 URL 
    URL全名叫统一资源定位符,用于定位互联网的资源。 

    问题: http://localhost:8081/myweb/test.html  

    http://     协议。http协议。 
    localhost   域名。为了找到IP地址。 
                    本地域名: localhost 
                    外部域名:www.baidu.com 
    8081       端口。软件监听的 
                8080: tomcat默认的端口 
                3306:mysql数据库的端口 
                1521: orace数据库的端口。 
    /myweb:   web应用的名称。默认情况下,在webapps目录下找 
    /test.html :资源名称。 

3、Tomcat目录结构

文件夹名 作用
bin 存放各种平台下,启动和关闭Tomcat的脚本文件
conf 存放各种配置文件,最重要的是server.xml和web.xml
lib 存放Tomcat服务器和web应用都能访问的jar包
logs Tomcat运行时的日志文件,Tomcat未正常启动,可以在这里找到问题
temp 存放Tomcat的临时文件,接触不是很多
webapps web发布目录,存放web的应用文件【特别是里面的Root是Tomcat运行的根目录文件】
work 存放各种jsp生成的servlet文件

4、手动开发动态资源

/* 
5.1 静态资源和动态资源的区别 
    静态资源: 当用户多次访问这个资源,资源的源代码永远不会改变的资源。 
    动态资源: 当用户多次访问这个资源,资源的源代码可能会发生改变 

5.2 动态资源的开发技术 
    Servlet : 用java语言来编写动态资源的开发技术。 

    Servlet特点: 
        1)普通的java类,继承HttpServlet类,覆盖doGet方法 
        2)Servlet类只能交给tomcat服务器运行!!!!(开发者自己不能运行!!!) 

    Servlet手动编写步骤: 
        1)编写一个servlet程序,继承HttpServlet(导入tomcat服务器lib包下的servlet架包)    
            public class HelloServlet extends HttpServlet{ 

                @Override 
                protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
                        throws ServletException, IOException { 
                    //解决中文乱码问题 
                    resp.setContentType("text/html;charset=utf-8"); 
                    //向浏览器输出内容 
                    resp.getWriter().write("这是第一个servlet程序。当前时间为:"+new Date()); 
                } 
            } 

        2)找到HelloServlet类的bin目录下的class字节码,然后把拷贝到tomcat的一个web应用中WEB-INF/classes目录下。 
        3)在当前web应用下的web.xml文件配置Servlet。 

             
            <servlet> 
                 
                <servlet-name>HelloServletservlet-name> 
                 
                <servlet-class>gz.itcast.d_servlet.HelloServletservlet-class> 
            servlet> 

            <servlet-mapping> 
                 
                <servlet-name>HelloServletservlet-name> 
                 
                <url-pattern>/hellourl-pattern> 
            servlet-mapping> 

        4)启动tomcat服务器,运行访问 
            访问servlet:  http://localhost:8080/myweb/  
*/

6、Http协议入门

/* 
6.1 什么是http协议 
    http协议: 对浏览器客户端和服务器端之间数据传输的格式规范 
    tcp/ip协议:关注的是客户端与服务器之间数据是否传输成功 
    http协议:是在tcp/ip协议之上封装的一层协议,关注的是数据传输的格式是否规范 

6.2 查看http协议的工具 
    1)使用火狐的firebug插件(右键->firebug->网络) 
    2)使用谷歌的“审查元素” 
    3)使用系统自带的telnet工具(远程访问工具)                
        atelnet localhost 8080 访问tomcat服务器 
        bctrl+] 回车 可以看到回显 
        c)输入请求内容                             
            GET /myweb/hello HTTP/1.1 
            Host: localhost:8080 
            Connection: keep-alive 
        d)回车,即可查看到服务器响应信息。 

6.3 http协议内容             
    请求(浏览器-->服务器) 
        GET /day09/hello HTTP/1.1 
        Host: localhost:8080 
        User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0 
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8 
        Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3 
        Accept-Encoding: gzip, deflate 
        Connection: keep-alive 

    响应(服务器-->浏览器) 
        HTTP/1.1 200 OK 
        Server: Apache-Coyote/1.1 
        Content-Length: 24 
        Date: Fri, 30 Jan 2015 01:54:57 GMT 

        this is hello servlet!!! 
*/ 

7、http请求

/* 
GET /day09/hello HTTP/1.1              --请求行 
Host: localhost:8080                   --请求头(多个key-value对象) 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8 
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 
                                      --一个空行 
name=eric&password=123456             --(可选)实体内容 

7.1 请求行 
    GET /day09/hello HTTP/1.1      
        #http协议版本 
            http1.0:当前浏览器客户端与服务器端建立连接之后,只能发送一次请求,一次请求之后连接关闭。 
            http1.1:当前浏览器客户端与服务器端建立连接之后,可以在一次连接中发送多次请求。(基本都使用1.1)(寻找资源等图片也是一次请求) 
    #请求资源 
        URL:  统一资源定位符。http://localhost:8080/day09/testImg.html。只能定位互联网资源。是URI                           的子集。 
        URI: 统一资源标记符。/day09/hello。用于标记任何资源。可以是本地文件系统,局域网的资源(//192.168.14.10/myweb/index.html),                      可以是互联网。 
    #请求方式 
        常见的请求方式: GET 、 POST、 HEAD、 TRACE、 PUT、 CONNECT 、DELETE   

        常用的请求方式: GET  和 POST     

        表单提交: 
            
"提交地址" method="GET/POST"> GET vs POST 区别 1)GET方式提交 a)地址栏(URI)会跟上参数数据。以?开头,多个参数之间以&分割。 GET /day09/testMethod.html?name=eric&password=123456 HTTP/1.1 Host: localhost:8080 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8 Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Referer: http://localhost:8080/day09/testMethod.html Connection: keep-alive b)GET提交参数数据有限制,不超过1KB。 c)GET方式不适合提交敏感密码。 d)注意: 浏览器直接访问的请求,默认提交方式是GET方式 2)POST方式提交 a)参数不会跟着URI后面。参数而是跟在请求的实体内容中。没有?开头,多个参数之间以&分割。 POST /day09/testMethod.html HTTP/1.1 Host: localhost:8080 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8 Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Referer: http://localhost:8080/day09/testMethod.html Connection: keep-alive name=eric&password=123456 b)POST提交的参数数据没有限制。 c)POST方式提交敏感数据。 7.2 请求头 Accept: text/html,image/* -- 浏览器接受的数据类型 Accept-Charset: ISO-8859-1 -- 浏览器接受的编码格式 Accept-Encoding: gzip,compress --浏览器接受的数据压缩格式 Accept-Language: en-us,zh- --浏览器接受的语言 Host: www.it315.org:80 --(必须的)当前请求访问的目标地址(主机:端口) If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --浏览器最后的缓存时间 Referer: http://www.it315.org/index.jsp -- 当前请求来自于哪里 User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) --浏览器类型 Cookie:name=eric -- 浏览器保存的cookie信息 Connection: close/Keep-Alive -- 浏览器跟服务器连接状态。close: 连接关闭 keep-alive:保存连接。 Date: Tue, 11 Jul 2000 18:23:51 GMT -- 请求发出的时间 7.3 实体内容 只有POST提交的参数会放到实体内容中 7.4 HttpServletRequest对象 HttpServletRequest对象作用是用于获取请求数据。 核心的API: 请求行: request.getMethod(); 请求方式 request.getRequetURI() / request.getRequetURL() 请求资源 request.getProtocol() 请求http协议版本 请求头: request.getHeader("名称") 根据请求头获取请求值 request.getHeaderNames() 获取所有的请求头名称 实体内容: request.getInputStream() 获取实体内容数据 7.5 service 和 doXX方法区别 7.6 案例-获取浏览器的类型(user-agent) 7.7 案例- 防止非法链接(referer) 第1次 CSDN/51CTO -> 页面(点击下载) -> 弹出广告页面(点击此处下载) -> 开始下载 第2次 直接点击此处下载 -> 转回广告页面 -> 开始下载 非法链接: 1)直接访问下载的资源 2)不是从广告页面过来的链接 referer: 当前请求来自于哪里。 7.8 传递的请求参数如何获取 GET方式: 参数放在URI后面 POST方式: 参数放在实体内容中 获取GET方式参数: request.getQueryString(); 获取POST方式参数: request.getInputStream(); 问题:但是以上两种不通用,而且获取到的参数还需要进一步地解析。 所以可以使用统一方便的获取参数的方式: 核心的API: request.getParameter("参数名"); 根据参数名获取参数值(注意,只能获取一个值的参数) request.getParameterValue("参数名“);根据参数名获取参数值(可以获取多个值的参数) request.getParameterNames(); 获取所有参数名称列表 7.9 请求参数编码问题 修改POST方式参数编码: request.setCharacterEncoding("utf-8"); 修改GET方式参数编码: 手动解码:String name = new String(name.getBytes("iso-8859-1"),"utf-8"); 指定服务器编码: server.xml文件Connector标签—>URIEncoding="utf-8" */

原文地址:http://blog.csdn.net/tideseng/article/details/70152387

你可能感兴趣的:(服务器)