http&tomcat&Servlet

HTTP&Tomcat&Servlet

一、web相关概念

1. 软件架构

讲解

C/S架构
  • C:Client,客户端;S:Server,服务器
  • 比如:QQ、微信、网游
  • 优点:
    • 显示效果好:2D,3D
    • 安全性高:
    • 服务器压力小:客户端软件可以处理一部分的数据运算
  • 缺点:
    • 安装客户端软件
    • 更新维护不方便
    • 开发成本高
B/S架构
  • B:Broswer,浏览器;S:Server,服务器
  • 比如:京东、淘宝、12306、网银、页游
  • 优点:
    • 不需要再额外安装软件:直接使用浏览器即可访问
    • 更新维护方便:所有资源都在服务器,不需要客户端做任何操作,就可以更新
    • 开发成本低
  • 缺点:
    • 显示效果略差:可以解决,使用HTML5和CSS3
    • 服务器压力大:浏览器处理的数据是有限的,服务端要承担更多压力。可以解决,使用集群
    • 安全性低:可以解决,使用https协议,U盾,等等

小结

  • C/S架构:客户端/服务器架构
  • B/S架构:浏览器/服务器架构

2. web资源

讲解

web资源
  • 通过web网络能够访问的资源,是web资源
web资源分类
  • 静态资源:资源/数据是不变的。比如:HTML、CSS、JS、图片、音频、视频等等
  • 动态资源:资源/数据是不同的。比如:Servlet、JSP、PHP、ASP

小结

  • 静态资源:不同人、不同时间、不同地点访问一个资源,看到的内容/效果是一样的
  • 动态资源:不同人、或者不同时间、或者不同地点访问同一资源,看到的内容/效果可能是可变的

3. 服务器软件

讲解

服务器软件

把资源部署在服务器软件上,就可以让其它人通过网络访问到,从而成为web资源

常见的服务器软件
  • Tomcat:Apache提供的,免费开源的小型服务器软件。支持JSP和Servlet规范。
  • WebLogic:Oracle提供的,收费大型服务器软件。支持JavaEE所有规范。功能更强,生产环境使用的多
  • WebSphere:IBM提供的,收费的大型服务器软件。支持JavaEE所有规范。功能强大,稳定,贵

小结

二、Tomcat软件

1. 下载与安装

讲解

1) 下载与安装
  • 官网地址:https://tomcat.apache.org/

  • 免安装,直接解压即可

2) 目录结构
tomcat
	|- bin:可执行命令的文件夹。比如:启动和关闭
	|- conf:配置文件夹
	|	|- server.xml:是Tomcat本身的配置,比如端口号
	|	|- web.xml:主要是部署的web项目的默认配置
	|- lib:Tomcat的核心程序jar包
	|- logs:日志文件夹
	|- temp:临时文件夹
	|- webapps:用于部署web项目的文件夹
	|- work:工作目录,主要给JSP使用的

小结

  • 启动和关闭Tomcat的命令:在bin目录里
  • Tomcat的配置文件:在conf目录里
  • web应用部署在哪:在webapps目录里

2. 启动和关闭

讲解

1) 启动和关闭Tomcat
  • 启动:双击tomcat/bin/startup.bat
  • 关闭:
    • 双击tomcat/bin/shutdown.bat
    • 直接关闭Tomcat的黑窗口
2) 启动时常见的问题
1. Java环境变量没有正确配置,导致Tomcat无法启动
  • 现象:启动Tomcat时,黑窗口一闪而过
  • 验证:打开cmd,执行java的命令:
    • java命令,输出的有提示信息,说明是正确的
    • javac命令,输出的有提示信息,说明是正确的
  • 正确配置JDK环境变量
    • JAVA_HOME
    • Path
2. 端口冲突导致Tomcat无法启动
  • Tomcat默认要占用3个端口:
    • 8005(关闭命令使用的)
    • 8080(HTTP协议使用的)
    • 8009(AJP协议使用的)
  • 现象:通过查看日志,确定是否是端口冲突。日志文件:tomcat/logs/catalina*

    Caused by: java.net.BindException: Address already in use: bind
    
  • 解决方案:

    • 方案一:杀掉占用端口的进程,然后再启动Tomcat

      • 找到占用端口的进程:在cmd里执行命令netstat -ano | findstr ":8080",找最后一列值,是进程的pid

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IYk6k8Wv-1581677314685)(img/image-20200115094824923.png)]

      • 杀掉进程:在任务管理器里找到pid对应的进程,结束进程
    • 方案二:更改Tomcat配置文件,使用其它端口

      • 找到tomcat/conf/server.xml搜索port=,修改值
      • 把端口修改成其它值:建议是1024~65535之间,或者是:80

小结

  • 如何启动Tomcat:startup.bat
  • 如何关闭Tomcat:shutdown.bat 或者 直接关闭Tomcat的黑窗口
  • 如果JDK环境变量不正确:Tomcat不能启动,需要正确配置JDK环境变量
  • 如果端口冲突:Tomcat也不能启动
    • 端口冲突的现象:找日志文件logs/catalina开头的文件,找Address already in use
    • 解决方案一:杀掉占用端口的进程,然后再启动Tomcat
    • 解决方案二:修改Tomcat,使用其它端口启动

3. 部署web应用

讲解

1) Tomcat部署项目
  • 方案一:把web项目文件夹直接放到tomcat\webapps

    • 注意:仅限于静态web项目(Static web),可以直接拷贝放到webapps文件夹里
    • 如果:是动态web项目,即项目里有页面、Java程序,不能直接拷贝放到webapps里。
      • 需要使用idea编译web项目,把编译好的结果,拷贝放到webapps里
  • 方案二:修改server.xml(不建议)

    • server.xmlHost标签中增加:
    <Context docBase="项目文件所在位置" path="项目访问路径">Context>
    
    <Context docBase="E:\heima\travel" path="travel">Context>
    • 访问时 http://ip:port/项目访问路径/资源路径
  • 方案三:虚拟路径方式(idea使用的,了解)

    • 在Tomcat的conf\Catalina\localhost中创建xml文件项目访问路径.xml(如果文件夹不存在,就创建)

    • 例如:travel.xml,内容如下

    <Context docBase="E:\heima\travel">Context>
    • http://ip:port/xml文件名称/资源路径
2) 部署后,访问web项目:
  • 在浏览器里输入地址:http://ip:port/项目访问路径/资源路径
    • 示例:http://192.168.65.67:80/day05/traval/index.html
    • ip:tomcat所在的电脑的ip
    • port:Tomcat的http协议的端口。80是默认端口,如果地址里不写端口,默认就找80端口
    • 项目访问路径:默认是webspps里的文件夹名称(每个文件夹就是一个web项目)

小结

  • 使用Tomcat部署web应用:
    • 如果是静态web应用:直接把web应用文件夹,拷贝到Tomcat的webapps
    • 如果后边学习的动态web应用:把idea编译后的结果,拷贝到Tomcat的webapps
  • 如何使用浏览器,访问已经部署好的web应用:
    • 输入地址:http://ip:port/项目路径/资源路径

三、HTTP协议

1. HTTP协议

讲解

  • HTTP:HyperText Transfer Protocol,超文本传输协议,是互联网上应用最为广泛的一种网络协议
  • HTTP协议:是客户端和服务端数据交互时,数据的格式规范
  • HTTP协议分为:
    • HTTP请求:客户端发给服务端的数据
    • HTTP响应:服务端返回给客户端数据
  • 没有请求,就没有响应;有请求才有响应

小结

  • 理解什么是HTTP协议
    • 超文本传输协议,是互联网应用最为广泛的一种网络协议
    • 规定了:客户端 和 服务端交互时,数据的格式规范
  • 知道HTTP协议的组成
    • HTTP请求:客户端 给 服务端 发的
    • HTTP响应:服务端 给 客户端 回的

2. HTTP请求

讲解

用抓包工具抓取HTTP请求
  • 用来抓取HTTP请求和HTTP响应数据的工具。只能看,不能拦截,不能修改

  • HttpWatch,浏览器自带的F12->Network(网络),发请求就能自动抓到这次请求和响应

    • 抓取请求
  • 抓取到HTTP请求数据,示例如下:
POST /day16/req HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 25
Cache-Control: max-age=0
Origin: http://localhost
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Referer: http://localhost/day16/index.jsp
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,cs;q=0.7
Cookie: JSESSIONID=844ABB8A9F63FA147D8194E47C4BB1AF

username=tom&password=tom
请求行
  • 本次请求的基本信息
  • 格式:请求方式 请求资源 协议版本
  • 例如:POST /day16/req HTTP/1.1
请求头
  • 本次请求的附加信息
  • 格式:一行一个键值对,一个键值对是一个请求头,一次请求有多个请求头
  • 例如:Referer:http://www.jd.com
请求体
  • 本次请求的正文内容,是提交的表单数据
  • 格式:name=value&name=value&...
  • 例如:username=123&password=123

小结

  • HTTP请求分为三部分:
    • 请求行:本次请求的基本信息
      • 格式:请求方式 请求资源 协议版本
      • 示例:POST /day07/success.html HTTP/1.1
    • 请求头:本次请求的附加信息
      • 格式:一行一个键值对,一个键值对是一个请求头,一次请求可以有多个请求头
      • 例如:Host: localhost
    • 请求体:本次请求的正文内容,是提交的表单数据
      • 格式:name=value&name=value&...
      • 例如:username=tom&password=123

3. HTTP响应

讲解

  • 抓取的HTTP响应数据示例

    HTTP/1.1 200
    Content-Length: 12
    Date: Fri, 30 Aug 2019 01:55:45 GMT
    
    hello, kitty
    
2. HTTP响应的格式
1) 响应行
  • 本次响应的基本信息

  • 格式:协议版本 响应状态码 [响应状态描述]

  • 比如:HTTP/1.1 200 [Ok]

  • 常见的响应状态码:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zyiN3is6-1581677314686)(img/tu_20.png)]

    • 200:一切正常
    • 302:重定向,让浏览器跳转到其它地址
    • 304:让浏览器取本地缓存
    • 404:找不到资源
    • 500:服务器内部错误
2) 响应头
  • 本次响应的附加信息
  • 格式:一行一个键值对,一个键值对是一个响应头,一次响应可以有多个响应头
  • 比如:Content-Length: 12
3) 响应体
  • 本次响应的正文内容,是会显示到浏览器页面上的内容
  • 格式:没有固定格式。请求什么,就响应什么

小结

  • HTTP响应的三部分:
    • 响应行:本次响应的基本信息
      • 格式:协议版本 响应状态码
      • 比如:HTTP/1.1 200
      • 常见的响应状态码:
        • 200:一切正常
        • 302:让浏览器跳转到指定地址=》重定向
        • 304:让浏览器取缓存
        • 404:告诉浏览器,请求的资源不存在
        • 500:告诉浏览器,服务端出错了
    • 响应头:本次响应的附加信息
      • 格式:一行一个键值对,一个键值对是一个响应头,一次响应可以有多个响应头
      • 例如:Content-Type: text/html
    • 响应体:本次响应的正文内容,会显示到浏览器页面上
      • 格式:没有固定格式,请求什么就响应什么

四、Servlet

1. Servlet简介

讲解

1) 什么是Servlet
  • Servlet:Server Applet,是服务端运行Java程序。是Sun公司提供的一套规范(接口),可以让客户端以url的形式远程调用服务器的Servlet(Java程序)。
  • 如果一个Java程序,想让客户端通过网络访问到,Java程序必须满足以下两个条件:
    • Java程序必须实现Servlet接口
    • 必须把Servlet部署到Tomcat上才能运行
2) Servlet的作用

和客户端交互的:

  • 接收客户端提交的参数
  • 完成客户端要求的功能
  • 给客户端返回处理的结果

小结

  • Servlet:是Sun公司提供的一套规范(接口)
  • 我们创建Java程序实现Servlet接口:和客户端交互的
    • 接收客户端提交的参数
    • 完成客户端要求的功能
    • 给客户端返回功能的结果

2. Servlet快速入门

分析

实现的步骤:

  1. 创建一个Java类,实现javax.servlet.Servlet接口

  2. 重写接口里的方法(共有5个,了解3个,重点关注1个:service

  3. 使用@WebServlet注解配置Servlet类(配置Servlet的虚拟访问路径)

    客户端不能通过类名称访问Servlet

    必须要通过Servlet配置的虚拟访问路径,才可以访问到

实现

@WebServlet(urlPatterns = "/demo01")
public class Demo01Servlet implements Servlet {

    @Override
    public void init(ServletConfig config) throws ServletException {
    }

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        System.out.println("Demo01Servlet.service 运行了");
    }

    @Override
    public void destroy() {
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }
}

小结

  1. 创建一个Java类,实现Servlet接口

  2. 重写接口的方法:重点关注service方法

  3. 使用注解@WebServlet配置虚拟访问路径

  4. 把web应用部署到Tomcat里,启动Tomcat,客户端可以通过浏览器访问Servlet

    http://ip:port/项目路径/资源路径

3. Servlet的生命周期和API

讲解

1) 生命周期(面试题)
  • 何时创建:
    • 默认第一次访问时,Tomcat创建Servlet对象
    • 创建Servlet对象时,会执行init方法
    • init方法只执行一次,一个Servlet类只有一个对象
  • 何时销毁:
    • 当服务器关闭时,Servlet对象会被销毁
    • Servlet对象销毁时,会执行destroy方法
    • destroy方法只执行一次
  • 每次访问Servlet时,必定执行的方法:service方法
2) API介绍【了解】
方法 参数 说明
init(ServletConfig) Servlet配置信息对象 初始化方法
service(ServletRequest, ServletResponse) 请求对象,响应对象 业务方法
destroy() 销毁方法
  • ServletConfig:是Servlet的配置信息对象。作用是了解的:

    • config.getServletName(): 获取Servlet的名称
    • config.getInitParameter("参数名称"):获取初始化参数值
    • config.getServletContext():获取ServletContext对象
  • ServletRequest:用于接收客户端提交的数据

    • request.getParameter("表单项的name"):接收客户端提交的表单数据
  • ServletResponse:用于给客户端返回数据的

    • response.getWriter().print("会显示到浏览器页面上的内容")

小结

  • Servlet的生命周期:
    • 何时创建:默认第一次访问时,Tomcat会创建Servlet对象,创建时执行一次init方法
    • 何时销毁:服务器关闭时,Servlet对象会销毁,销毁时会执行一次destroy方法
    • 每次访问Servlet,必定执行的方法是:service方法

4. Servlet的配置了解

  • 在web3.0以前,用web.xml配置

  • 在web3.0以后,用注解配置 或者 用web.xml配置

  • 如果一个Servlet要想被客户端访问,就必须使用注解@WebServlet,提供一个虚拟访问路径

    @WebServlet(
    	urlPatterns/value=虚拟路径,
        name="Servlet名称",
        loadOnStartup=整数,表示Servlet创建的时机
    )
    • **urlPatterns或者value:**配置Servlet的虚拟访问路径,必须的。
      • 值:以/开头的路径,比如:/demo01, /login, /admin/manager
      • 注意:不同Servlet的虚拟访问路径不能相同
    • loadOnStartup:Servlet对象的创建时机
      • Servlet默认是第一次访问时创建的
      • 如果设置值为正整数,就表示:服务器一启动,Tomcat就会创建Servlet对象。
        • 数值越小,创建的越早
        • SpringMVC框架里有一个Servlet,需要配置:服务器一启动就创建
    • name:非必须
小结
  • Servlet必须要用注解@WebServlet配置
@WebServlet(value="/demo01")

@WebServlet(urlPatterns="/demo01")

@WebServlet("/demo01")
  • 多个Servlet的虚拟访问路径,一定不能重复 ;否则Tomcat不能启动

5. Servlet的继承体系

讲解

1) 创建Java类,实现Servlet接口
  • 多个Servlet中,有大量的冗余代码
  • 只用到Servlet的service方法,其它方法基本用不上,但是又必须写
2) 创建Java类,继承GenericServlet父类
  • GenericServlet实现Servlet接口,实现接口的方法
  • 我们再创建类,继承GenericServlet,重写业务方法service
@WebServlet(urlPatterns = "/demo02")
public class Demo02GenericServlet extends GenericServlet {
    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        System.out.println("Demo02GenericServlet.service 运行了");
    }
}
3) 创建Java类,继承HttpServlet父类
  • HttpServlet继承GenericServlet父类,重写service方法:
    • 如果是get方式的请求,就调用doGet
    • 如果是post方式的请求,就调用doPost
  • 我们再创建类,继承HttpServlet,重写doGetdoPost方法
@WebServlet(urlPatterns = "/demo03")
public class Demo03HttpServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get和post请求,共同的功能代码");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}
配置servlet的模板

小结

你可能感兴趣的:(http&tomcat&Servlet)