动态资源(servlet)

动态资源vs静态资源

  • 静态资源:提前写好的内容
  • 动态资源:内容不是提前写好的,而是随着用户请求可以随时变化(但不要求必须随时变化)
  • Java官方提供了一套Servlet标准。Servlet: Serv (Server) +let(小物件)=服务端运行的一些小物件(web应用)
  • Servlet标准在代码中的呈现方式:接口和抽象类的形式体现。
    Java官方提供了一套Servlet标准:Java官方写好一套接口和抽象类,用于连接Tomcat开发者和应用开发者的桥梁
    在这里插入图片描述

servlet 开发流程

一、开发阶段

(一)【开发环境的搭建】

  1. 创建maven项目
  2. 修改maven配置
    (1)设置我们的代码打包方式是war类型打包
    在这里插入图片描述
    (2)设置maven的编译器版本是1.8
    在这里插入图片描述
    (3)作为添加 servlet 的依赖
    在这里插入图片描述

scope=provided:指的是这个依赖下的所有类,只在开发、构建阶段需要,在运行阶段就不需要了
为什么在运行阶段就不需要了? 是因为Tomcat内部已经有这套类了

  1. 新建目录,作为存放静态资源的根目录src/main/webapp
    在这里插入图片描述
  2. 新建目录,存在web 应用配置(web.xml)src/main/webapp/WEB-INF/
    在这里插入图片描述
    在这里插入图片描述
  3. 完成第一个动态资源
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 简化开发环境搭建
    (1)通过maven提供的项目模板搞定
    在这里插入图片描述
    (2)利用IDEA提供的保存项目模板功能
    在这里插入图片描述

(二)【资源开发:静态资源+动态资源】

  1. 静态资源统统放到以webapp为根的目录下,但不要放到 webapp/WEB-INF下
  2. 动态资源
    (1)继承HttpServlet
    (2)@WebServlet(“servlet path”)注解
    (3)重写doGet方法

jar(Java ARchive): 将java类文件(包括资源文件组织起来的一个文件),本身其实是zip压缩包
war(Web ARchive): 将Servlet应用(包括类文件、静态资源文件、web.xml、依赖的jar包)按照指定规则,放在在目录中,并且用zip压缩的一种结构

二、构建阶段

(一)【编译】

(二)【打包】

原始步骤: war包的标准目录结构是什么规定

  1. 可以手动按照规定复制文件过去

  2. 可以利用maven提供clean+compile+package
    利用maven简化编译和打包工作
    在这里插入图片描述
    在这里插入图片描述

  3. 专业版可以利用build artifact

(三)【部署】

原始步骤:把打包好的war包,复制到 tomcat/webapps/目录下作为一个web应用

开发阶段

  • 社区版,利用SmartTomcat 插件,把Tomcat集成到IDEA中使用
  • 专业版,利用自带的Tomcat插件,把Tomcat集成到IDEA中使用

三、运行阶段

(一)【重启Tomcat)

动态资源修改之后,必须重启Tomcat,才能真正生效
光改代码是没用的,必须让Tomcat直到类文件改动了,生效才能被我们浏览器看到

(二)【浏览器中访问对应资源】

资源的完整的URL = Context Path(Application Context) + Servlet Path

其中,我们开发阶段写在@WebServlet("…")只是ServletPath,需要和部署时,设置的Context Path 共同组成最终的完整的URL

Servlet中动态资源的开发

通过HttpServlet实现了Servlet接口
在这里插入图片描述

  • 利用idea实现层级关系
    在这里插入图片描述
    FirstSevlet继承了HttpServlet抽象类
    HttpServlet继承自GenericServlet 抽象类
    GenericServlet继承自Object,同时实现了Servlet 接口(ServletConfig 接口,Serializable接口)
    在这里插入图片描述
    • init() : Tomcat启动的时候(首次创建Servlet对象时)会调用一次(用于做初始化工作)
    • destroy(): Tomcat在结束时,会调用一次(用于做销毁工作)
    • service():每次有请求过来时,就会被调用一次,在Tomcat工作期间,会被调用多次
    • 我们的代码中,重写的init和destroy只会执行一次,doGet 会被执行多次(没有一次请求,执行一次)

每个Servlet类,在Tomcat运行过程中,都是保持单例(*)
单例(singleton):就是某些类,它的对象,在整个应用的运行过程中,需要并且只需要一个就够了,把这类对象就称为单例。

doGet(…)方法

  • doGet(…)是浏览器每发起一个HTTP请求-响应周期,就会被调用一次

在这里插入图片描述

  • 参数:
  1. HttpServletRequest req关于HTTP请求的一个对象化后的封装
    req指向的对象,代表的就是本次由浏览器发起的HTTP请求
  2. HttpServletResponse resp关于HTTP响应的一个对象化后的封装
    resp指向的对象,代表的就是本次准备发送给浏览器的HTTP响应
  • req指向的请求对象,其中的数据是来自浏览器的(其中的各项属性是有值的)
  • resp指向的响应对象,其实是一个“空的”对象,等待我们在doGet方法,将内容填充到对象中
  • Tomcat 在执行完doGet方法后,会将我们在doGet 中填充好的resp对象,转化成HTTP响应发送给浏览器
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值