JavaWeb


集合多天关于JavaWeb开发的学习笔记。利用Servlet开发web应用程序很高效。接下来将学习使用Spring MVC开发web应用程序。

基本概念

  • web开发
    • web就是网页的意思,如www.baidu.com
    • 静态web
      • html,css
      • 提供给所有人看的数据始终不会发生变化
    • 动态web
      • 淘宝,几乎是所有网站
      • 提供给所有人看的数据始终会发生变化,每个人在不同时间,不同地点看到的网页信息各不相同
      • 技术栈:Servlet/JSP,ASP,PHP
  • 在Java中,动态web资源开发的技术统称为JavaWeb
  • web应用程序:可以提供浏览器访问的程序
    • xxx.html…多个web资源,这些资源可以被外界访问,对外界提供服务
    • 我们能访问到的任何一个页面或者资源,都存在于这个世界上某一台计算机上
    • 统一的web资源会被放在同一个文件夹下,web应用程序–>Tomcat服务器
    • 一个web应用由多个部分组成(静态web,动态web)
      • html,css,js
      • jsp,servlet
      • Java程序
      • jar包
      • 配置文件(properties)
    • web应用程序编写完毕后,若想提供给外界访问,需要一个服务器来统一管理
  • 静态web
    • *.htm,*.html
    • 静态web缺点
      • web页面无法动态更新,所有用户看到的都是同一个页面
        • 轮播图,点击特效:伪动态
        • JavaScript:实际开发使用最多
        • VBScript
      • 无法和数据库交互(数据无法持久化,用户无法交互)
  • 动态web
    • 页面会动态展示,web页面的展示效果因人而异
    • 优点
      • web页面可以动态更新,提供多样化服务
      • 可以于数据库交互(数据持久化:注册,商品信息,用户信息…)
    • 缺点
      • 若服务器的动态web资源发生错误,需要重新编写后台程序,停机维护,重新发布

web服务器

分类

  • ASP

    • 微软:国内最早流行的服务器
    • 在HTML嵌入VB脚本,ASP+COM
    • 在ASP开发中,基本一个页面都有几千行业务代码,页面及其混乱
    • 维护成本高
    • C#
  • PHP

    • PHP开发速度很快,功能很强大,跨平台,代码简单
    • 无法承担大访问量
  • JSP/Servlet

    • sun公司主推的B/S架构
    • 基于Java语言(所有大公司,或者一些开源组件,都是用Java写的)
    • 可以承载三高问题带来的影响
    • 语法像ASP
  • IIS

    • 微软windows自带
  • Tomcat

    • 实际上运行JSP页面和Servlet
    • 免费开源web服务器,属于轻量级应用服务器
    • 在中小型系统和并发用户不多的场合下被普遍使用
    • 开发和调试JSP程序的首选
    • JavaWeb初学者最佳选择

网站结构

  • JavaWeb网站结构
|--RootDir :Tomcat服务器的web目录
	|--webapp:网站目录名
		|--WEB-INF
			|--classes:Java程序
			|--lib:web应用所依赖的jar包
			|--web.xml:网站配置文件
		|--index.html:默认首页
		|--static
			|--css
				|--style.css
			|--js
			|--img
		|--......

Servlet

Servlet简介

  • Servlet(Server Applet)是 Java Servlet 的简称,是使用 Java 语言编写的运行在服务器端的程序。具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容
  • 通常来说,Servlet 是指所有实现了 Servlet 接口的类
  • Servlet 主要用于处理客户端传来的 HTTP 请求,并返回一个响应,它能够处理的请求有 doGet() 和 doPost() 等
  • Servlet 由 Servlet 容器提供,Servlet 容器是指提供了 Servlet 功能的服务器(如 Tomcat)
  • Servlet 容器会将 Servlet 动态加载到服务器上,然后通过 HTTP 请求和 HTTP 应与客户端进行交互
  • Servlet 应用程序的体系结构如下图所示
    在这里插入图片描述
  • Servlet 的请求首先会被 HTTP 服务器(如 Apache)接收,HTTP 服务器只负责静态 HTML 页面的解析,而 Servlet 的请求会转交给 Servlet 容器Servlet 容器会根据 web.xml 文件中的映射关系,调用相应的 Servlet,Servlet 再将处理的结果返回给 Servlet 容器,并通过 HTTP 服务器将响应传输给客户端
  • Servlet技术特点
    • 方便
      • Servlet 提供了大量的实用工具例程,如处理很难完成的 HTML 表单数据、读取和设置 HTTP 头,以及处理 Cookie 和跟踪会话等
    • 跨平台
      • Servlet 使用 Java 类编写,可以在不同的操作系统平台和不同的应用服务器平台运行
    • 灵活性和可扩展性强
      • 采用 Servlet 开发的 Web 应用程序,由于 Java 类的继承性及构造函数等特点,使得应用灵活,可随意扩展
    • 除了上述几点以外,Servlet 还具有功能强大、能够在各个程序之间共享数据、安全性强等特点

Servlet相关接口和类

  • Servlet 接口中定义了 5 个抽象方法
    在这里插入图片描述
    其中 init()、service() 和 destroy() 方法可以表现 Servlet 的生命周期,它们会在某个特定的时刻被调用

  • Servlet 的接口有两个默认的接口实现类:GenericServlet 和 HttpServlet

    • GenericServlet 是一个抽象类,该类为 Servlet 接口提供了部分实现,它并没有实现 HTTP 请求处理
    • HttpServlet 是 GenericServlet 的子类,它继承了 GenericServlet 的所有方法,并且为 HTTP 请求中的 GET 和 POST 等类型提供了具体的操作方法。通常情况下,编写的 Servlet 类都继承自 HttpServlet,在开发中使用的也是 HttpServlet 对象
  • HttpServlet 类中包含两个常用方法
    在这里插入图片描述

  • HttpServlet 主要有两大功能,具体如下

    • 根据用户请求方式的不同,定义相应的 doXxx() 方法处理用户请求。例如,与 GET 请求方式对应的 doGet() 方法,与 POST 方式对应的 doPost() 方法
    • 通过 service() 方法将 HTTP 请求和响应分别强转为 HttpServletRequest 和 HttpServletResponse 类型的对象
  • 需要注意的是,由于 HttpServlet 类在重写的 service() 方法中,为每一种 HTTP 请求方式都定义了对应的 doXxx() 方法,因此,当定义的类继承 HttpServlet 后,只需要根据请求方式重写对应的 doXxx() 方法即可,而不需要重写 service() 方法

Servlet生命周期

  • Servlet声明周期如下图
    在这里插入图片描述

  • 按照功能的不同,大致可以将 Servlet 的生命周期分为三个阶段,分别是初始化阶段、运行阶段和销毁阶段

    • 初始化阶段

      • 当客户端向 Servlet 容器发出 HTTP 请求要求访问 Servlet 时,Servlet 容器首先会解析请求,检查内存中是否已经有了该 Servlet 对象,如果有,则直接使用该 Servlet 对象,如果没有,则创建 Servlet 实例对象,然后通过调用 init() 方法实现 Servlet 的初始化工作。需要注意的是,在 Servlet 的整个生命周期内,它的 init() 方法只能被调用一次
    • 运行阶段

      • 这是 Servlet 生命周期中最重要的阶段,在这个阶段中,Servlet 容器会为这个请求创建代表 HTTP 请求的 ServletRequest 对象和代表 HTTP 响应的 ServletResponse 对象,然后将它们作为参数传递给 Servlet 的 service() 方法
      • service() 方法从 ServletRequest 对象中获得客户请求信息并处理该请求,通过 ServletResponse 对象生成响应结果
      • 在 Servlet 的整个生命周期内,对于 Servlet 的每一次访问请求,Servlet 容器都会调用一次 Servlet 的 service() 方法,并且创建新的 ServletRequest 和 ServletResponse 对象,也就是说,service() 方法在 Servlet 的整个生命周期中会被调用多次
    • 销毁阶段

      • 当服务器关闭或 Web 应用被移除出容器时,Servlet 随着 Web 应用的关闭而销毁。在销毁 Servlet 之前,Servlet 容器会调用 Servlet 的 destroy() 方法,以便让 Servlet 对象释放它所占用的资源。在 Servlet 的整个生命周期中,destroy() 方法也只能被调用一次
  • 需要注意的是,Servlet 对象一旦创建就会驻留在内存中等待客户端的访问,直到服务器关闭或 Web 应用被移除出容器时,Servlet 对象才会销毁

Servlet配置虚拟路径映射

  • 在 web.xml 文件中,一个 <servlert-mapping> 元素用于映射一个 Servlet 的对外访问路径,该路径也称为虚拟路径
  • 创建好的 Servlet 只有映射成虚拟路径,客户端才能对其进行访问

Servlet多重映射

  • Servlet 的多重映射指同一个 Servlet 可以被映射成多条虚拟路径。也就是说,客户端可以通过多条路径实现对同一个 Servlet 的访问。Servlet 实现多重映射的两种方式:
    • 配置多个 <servlet-mapping> 元素
      <servlet-mapping>
          <!-- 映射为Test01 -->
          <servlet-name>TestServlet01</servlet-name>
          <url-pattern>/Test01</url-pattern>
      </servlet-mapping>
      
      <servlet-mapping>
          <!-- 映射为TestServlet01-->
          <servlet-name>TestServlet01</servlet-name>
          <url-pattern>/TestServlet01</url-pattern>
      </servlet-mapping>
      
      可以通过浏览器输入地址http://localhost:8080/dmeo/Test01和http://localhost:8080/dmeo/TestServlet01访问同一个servlet对象
    • 配置多个 <url-pattern> 子元素
      <servlet-mapping>
          <!-- 映射为TestServlet01和Test01 -->
          <servlet-name>TestServlet01</servlet-name>
          <url-pattern>/TestServlet01</url-pattern>
          <url-pattern>/Test01</url-pattern>
      </servlet-mapping>
      

Servlet映射路径中使用通配符

  • 在实际开发过程中,开发者有时会希望某个目录下的所有路径都可以访问同一个 Servlet,这时,可以在 Servlet 映射的路径中使用通配符*。通配符的格式有两种,具体如下。
    • 格式为“*.扩展名”,例如 *.do 匹配以 .do 结尾的所有 URL 地址
    • 格式为 /*,例如 /abc/* 匹配以 /abc 开始的所有 URL 地址
  • 以上两种通配符的格式不能混合使用。例如,/abc/*.do 是不合法的映射路径
  • 另外,当客户端访问一个 Servlet 时,如果请求的 URL 地址能够匹配多条虚拟路径,那么 Tomcat 将采取最具体匹配原则查找与请求 URL 最接近的虚拟映射路径

默认Servlet

  • 如果某个 Servlet 的映射路径仅仅是一个正斜线(/),那么这个 Servlet 就是当前 Web 应用的默认 Servlet
  • Servlet 服务器在接收到访问请求时,如果在 web.xml 文件中找不到匹配的 <servlet-mapping> 元素的 URL,则会将访问请求交给默认 Servlet 处理,也就是说,默认 Servlet 用于处理其他 Servlet 都不处理的访问请求
  • 配置默认Servlet
    <servlet>
        <servlet-name>De
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值