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

来源:互联网 发布:st联盟软件下载 编辑:程序博客网 时间:2024/05/16 02:49

发展历程

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文件                       <Connector port="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>                 <!-- servlet的内部名称 ,可以自定义-->                 <servlet-name>HelloServlet</servlet-name>                 <!-- servlet类名: 包名+简单类名-->                 <servlet-class>gz.itcast.d_servlet.HelloServlet</servlet-class>             </servlet>             <servlet-mapping>                 <!-- servlet的内部名称,和上面的名称保持一致!!!-->                 <servlet-name>HelloServlet</servlet-name>                 <!-- servlet的访问名称: /名称 -->                 <url-pattern>/hello</url-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             表单提交:             <form action="提交地址" method="GET/POST">                 <form>         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

原创粉丝点击