天天看点

tomcat、http、serlvet

一,服务器

1.1 web 相关的概念

软件结构
  1. C/S:客户端/服务端
  2. B/S:浏览器/服务端
C/S 和 B/S的对比:
  1. C/S 的页面更加精美
  2. C/S 的宽带占用更小
  3. B/S 的硬盘占用更小
  4. B/S 更易于更细维护
资源的分类:
  1. 静态资源:任何用户访问后,得到的结果就是一样的就称为静态资源,静态资源可以直接被浏览器解析,例如:html、css、js
  2. 动态资源:每一个用户访问后,得到的结果可能不同的就称为动态资源,动态资源会先转换成静态资源,再返回给浏览器,例如:servlet、jsp
网络通信的三要素:
  1. ip:计算机设备在网络中的唯一标识
  2. 端口:应用程序在计算机中的唯一标识
  3. 传输协议:数据在网络中传输的规则

1.2 web 服务器

服务器:安装了服务器软件的计算机

服务器软件:接收用户的请求,处理请求,做出响应

常见的 web 服务器:

  1. tomcat:Apache组织的,中小型 JavaEE 服务器。开源,免费。
  2. webLogic:Oracle公司的大型 JavaEE 服务器。收费。
  3. webSphere:IBM公司的大型 JavaEE 服务器。收费。
tomcat:
  1. 下载地址:http://tomcat.apache.org
  2. 安装:解压即可,只能解压到纯英文路径下
  3. 目录结构:
  1. bin:可执行文件,里面有 startup.bat、shutdown.bat
  2. conf:配置文件,里面有 web.xml、server.xml
  3. lib:依赖的 jar 包
  4. logs:日志文件
  5. temp:临时文件
  6. webapps:存在 web 项目
  7. work:运行时产生的文件或者数据
  1. 启动服务器:
  1. 运行 bin 下的 startup.bat

    可能遇到的问题:

  1. 一闪:

    原因:没有正确配置环境变量

    解决:去配啊

  2. 报错:

    原因:端口冲突

    解决:

    ​ 方法1. 杀死进程,在 cmd 中 通过 netstat -ano 找到端口号冲突进行的 pid ,在任务管理器中结束进程

    方法2. 修改配置文件的端口号,配置文件是 conf 下的 server.xml

补充:
  1. 如果将默认的端口号从8080改成80,那么访问服务器时就不需要写端口号了
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />      
  1. 访问方式是在浏览器的地址栏上输入:
  1. 访问自己:http://localhost:8080
  2. 访问其他人:http://其他人的ip:8080
  1. 服务器不要重复开启
  1. 关闭服务器:
  1. 运行 bin 下的 shutdown.bat
  2. ctrl + c
  3. 点击 x 关闭窗口
  1. 将项目部署到服务器上:
  1. 直接将项目放到 webapps 目录下,通过 http://ip地址:端口号/项目名/资源名 进行访问
  2. 在 conf 下的 server.xml 中的 Host 标签 下配置:
  1. docBase:项目所在的文件夹
  2. path:虚拟路径
  3. 通过 http://ip地址:端口号/abc/项目名/资源名 进行访问
  1. 在 conf 下的 catalina 下的 localhost 目录下创建任意文件名的 abc.xml 文件,配置:
  1. docBase:项目所在的文件夹
  2. 该 xml 文件的名字就是虚拟路径
  3. 通过 http://ip地址:端口号/abc/项目名/资源名 进行访问

1.3 将 tomcat 部署到 eclipse

步骤:
  1. 点击 window,点击 preferences
  2. 找到 server,点击 runtime enviroments
  3. 点击 add,选择 tomcat7.0,点击 next
  4. 点击 browse,选择你所安装的 tomcat 服务器的根目录,点击确定,点击 finish,点击 ok
  5. 创建项目,选择动态网页工程(dynamic web project)

1.4 eclipse 中创建 web 工程

步骤:
  1. 点击 file,点击 new
  2. 选择动态网页工程(dynamic web project)
  3. 给项目起个名字
  4. 选择 2.5 或者 3.0 版本

    注:如果选择的是 3.0 系统将不会为你自动创建 web.xml

二,Servlet

2.1 概念和基本使用

概念:运行在服务器端的程序,Server applet

Servlet是一个接口,它定义Java类能被服务器访问到的规则

步骤:

  1. 定义一个类,实现 Servlet 接口
  2. 重写方法
  3. 配置 Servlet

    在 web.xml 中配置:

<!-- 配置Servlet类 -->
  <servlet>
    <servlet-name>abc</servlet-name>
    <servlet-class>com.qf.servlet.TestServlet</servlet-class>
  </servlet>
  
  <!-- 配置Servlet映射 -->
  <servlet-mapping>
    <servlet-name>abc</servlet-name>
    <url-pattern>/tt</url-pattern>
  </servlet-mapping>      

2.2 Servlet 执行原理

Servlet的执行原理:
  1. 当服务器接收到客户端请求时,会解析请求的地址,访问到Servlet资源的路径
  2. 在 web.xml 中进行查找,是否有对应 url-pattern 标签体中内容与只匹配
  1. 如果没有,页面会出现 404 (资源找不到)错误
  2. 如果有,会查找是否有一个servlet标签下的servlet-name标签体中的内容与该url-pattern所在映射下的servlet-name标签体中的内容一致的servlet标签。
  1. 如果没有,服务器开启过程中会报错
  2. 如果有,就能根据全类名找到对应的 Java 类,执行其中的功能

2.3 Servlet 的生命周期

  1. init():默认第一次访问时执行,只执行一次

    可以通过配置,将servlet的初始化从第一次访问执行修改成服务器启动时就执行

<!-- 
  配置该Servlet的初始化时机是在服务器启动时,
  n可以是任意整数,
    n为负数:表示第一次访问时执行
    0或者整数:表示服务器启动时就初始化
      数值越小,越优先启动
-->
<load-on-startup>n</load-on-startup>      
  1. service():每次访问时都执行一次

    在这个方法中提供了tomcat服务器已经封装好了的请求和响应对象

  2. destroy():正常关闭服务器时执行,只执行一次

    一般用于释放资源,只有服务器正常关闭时才会执行,执行后servlet被销毁

2.4 Servlet 的体系结构

HttpServlet抽象类 -> GenericServlet抽象类 -> Servlet接口

HttpServlet:专门针对Http协议的一种Servlet接口的封装,简化了Servlet中的操作,并且明确了 get/post 请求时会访问到的相关方法。

使用步骤:

  1. 创建类时,选择Servlet
  2. 自定义Servlet的类名和url
  3. 选择 doPost() 和 doGet() 方法
注:使用浏览器直接访问servlet,默认的提交方法是get

2.5 url-pattern 的配置

  1. 完全匹配:/xxx
  2. 目录匹配:/xxx/xxx/*
  3. 扩展名匹配:*.xxx
注:目录匹配和扩展名匹配不能混用

2.6 欢迎页面

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>      

作用:配置默认的起始页面,在访问服务器首页时,可以不写首页的资源名,就可以直接访问到首页

例如:上述配置文件中,第一个欢迎页是 index.html,那么在访问该应用时,地址栏中只需要写

http://ip:端口/虚拟路径 即可

注:

  1. 如果自己项目中没有配置,也会遵循tomcat中的web.xml的首页配置
  2. 在中,系统会从上到下依次查找项目中是否有该页面,有的话就作为主页,没有就向下继续查找,直到最后;如果没有任何一个中配置的页面,那么会发生404。

三,Http

3.1 概念

概念:HyperText Transfer protocol 超文本传输协议

Http 它定义客户端和服务器在通信时发送数据和接收数据的格式

特点:

  1. 基于TCP/IP的协议
  2. 默认端口号是8080
  3. 基于请求/响应的:一次请求对应一次响应
  4. 无状态的:每次请求之间是互相独立的,不能交互数据
  5. 版本:
  1. 1.0 版本:每一次请求响应都会建立新的连接
  2. 1.1 版本:复用连接

3.2 请求消息数据的格式

  1. 请求行:
  1. 请求方式:POST、GET
  1. GET:
  1. 请求的参数在请求行中,拼接在地址后
  2. 请求地址的长度有限制,64K
  3. 不安全
  1. POST:
  1. 请求的参数封装在请求体中
  2. 请求的地址没有限制的限制
  3. 相对安全
  1. 请求的地址:http://localhost/day41_05_login_register/register
  2. 请求协议/版本:http/1.1
  1. 请求头

    格式:" 请求头名称 : 请求头值 "

    请求头是客户端告知服务器的信息

    常见的请求头:

  1. Referer:告知服务器,当前请求从哪个页面过来,常用于防盗链
  2. User-Agent:告知服务器,当前浏览器的版本信息,常用于解决浏览器的兼容性问题
  1. 请求体:封装了POST提交方式的请求参数

3.3 响应消息数据的格式

  1. 响应行:
  1. 组成:协议/版本 响应状态码 状态码的描述,例如:http/1.1 200 ok
  2. 响应状态码:服务器告知浏览器本次请求和响应的状态
  1. 状态码都是3位数字
  2. 分类:
  1. 1xx:服务器接收到了浏览器的消息,但是还没有接收完毕,需要等待
  2. 2xx:表示成功。例如:200 成功
  3. 3xx:表示重定向。例如:302(重定向)、304(访问缓存)
  4. 4xx:客户端错误。例如:404(资源找不到)、405(请求方式没有对应的doXxx方法)
  5. 5xx:服务器错误、例如:500(服务器内部出现异常)
  1. 响应头:
  1. 组成:" 响应头的名称 : 响应头的值 "
  2. 常见的响应头:
  1. Content-Type:服务器告知浏览器本次响应的数据要以何种编码格式解析
  2. Content-disposition:服务器告知浏览器以什么格式打开响应的数据
  1. inline:(默认)响应的数据在页面中显示
  2. attachment;filename=文件名 :告知浏览器指定文件不要解析,以附件形式打开(这就是文件下载)
  1. 响应体:服务器传输给浏览器的数据