JavaWeb
一、JavaWeb 是什么?
JavaWeb是指用Java技术来解决Web互联网领域的技术栈。基于B/S架构
知识小贴士:
Java 是什么?
Java不仅是一门编程语言,还是一个完整的技术体系。它包括了Java SE(标准版)、Java EE(企业版)和Java ME(微型版)等多个版本,以及Java虚拟机(JVM)、Java类库、Java开发工具等组成部分。此外,Java还拥有庞大的开源社区和丰富的第三方库和框架,为开发者提供了强大的支持和帮助。
Web 是什么?
- Web(万维网):是一个庞大的、分布式的信息系统,它使用超文本传输协议(HTTP)等协议在互联网上传输超文本标记语言(HTML)文档和其他类型的数据。
- Web由许多不同的组件和技术构成,包括Web服务器、Web客户端(如浏览器)、Web编程语言(如HTML、CSS、JavaScript)、Web框架(如React、Vue)、数据库等。
B/S架构 是什么?
- B/S架构:浏览器/服务器,我们上网时候所访问的网站基本上全是该模式的项目,用户不需要下载任何东西,只需要浏览器就可以访问到这个项目。
- C/S架构:客户端/服务器,比如QQ或者一些大型游戏,用户需要先下载软件的客户端,然后才能使用
Web客户端 是什么?
Web客户端是用户与Web应用进行交互的界面,它可以是浏览器、移动应用或其他类型的客户端软件。
在JavaWeb开发中,Web客户端主要涉及的技术包括:
- HTML/CSS/JavaScript:这是构建网页的基础技术。HTML用于定义网页的结构和内容,CSS用于美化网页的外观和布局,而JavaScript则用于实现网页的交互功能。
- 前端框架:如React、Vue等,这些框架提供了更高效的开发方式,允许开发者创建动态、响应式的用户界面。
- 浏览器:作为Web客户端的主要表现形式,浏览器负责解析和渲染HTML、CSS和JavaScript,呈现给用户一个可视化的界面。
Web服务端 是什么?
Web服务端是处理用户请求、执行业务逻辑并返回响应的后台系统。
在JavaWeb开发中,Web服务端主要涉及的技术包括:
- Java Servlet:Servlet是Java EE标准的一部分,用于处理HTTP请求和响应。它是Web服务端的核心组件之一。
- JSP(JavaServer Pages):JSP是一种用于生成动态网页内容的技术。它允许开发者在HTML页面中嵌入Java代码,从而动态地生成网页内容。
- Spring框架:Spring是一个轻量级的框架,广泛应用于企业级应用开发。它提供了依赖注入、面向切面编程等功能,并支持构建Web应用程序。
- 数据库:Web服务端通常需要与数据库进行交互,以存储和检索数据。常用的数据库包括MySQL、PostgreSQL、Oracle等。
- ORM(对象关系映射):如Hibernate、JPA、MyBatis等,ORM技术允许开发者使用面向对象的方式来操作数据库,简化了数据库操作的过程。
- Web服务器:如Tomcat、Jetty、Nginx等,Web服务器用于部署和运行Java Web应用程序,并处理来自客户端的请求。
- …
二、JavaWeb 发展阶段
JavaWeb的发展阶段可以划分为以下几个主要时期:
一、静态网页时代
- 特点:网站主要由静态的HTML页面组成,这些页面可能使用Dreamweaver等工具进行编写。静态页面无法满足动态内容的需求,因此很快迎来了动态网页的时代。
二、Servlet和JSP的兴起(1997年~2002年)
- Servlet:Servlet是一种在服务器端运行的Java应用程序,用于处理HTTP请求和响应。它提供了一种动态生成Web页面的方式。
- JSP(JavaServer Pages):JSP是Servlet技术的一个扩展,允许开发者将Java代码嵌入到HTML页面中,从而制作出动态网页。JSP的引入使得前端程序员能够更方便地修改代码,迎合了前后端专业分工的大趋势。
三、Java EE的建立与成熟(2002年~2013年)
- Java EE(Java 2 Platform, Enterprise Edition,后更名为Java Enterprise Edition):Java EE提供了一整套规范和技术,包括Servlet、JSP、EJB(Enterprise JavaBeans)、JMS(Java Message Service)、JTA(Java Transaction API)等,用于构建复杂的企业级应用程序。
- 发展阶段:Java EE的各个版本相继推出,引入了许多新的功能和技术,如JPA(Java Persistence API)、JSF(JavaServer Faces)、CDI(Contexts and Dependency Injection)等,使得Java Web开发更加高效和便捷。
四、MVC模式与框架阶段(2000年代中后期~至今)
- MVC模式:在Servlet + JSP模式的基础上,Java阵营进一步发展出了一种适合JavaWeb应用的设计模式,即MVC(Model-View-Controller)设计模式。它将程序分为显示层(Viewer)、控制层(Controller)和模型层(Model),提高了代码的可维护性和可重用性。
- Struts框架:Struts是JavaWeb时代早期的一个流行的MVC框架。它通过一个中央的servlet(ActionServlet)来协调不同的页面请求,并将这些请求映射到相应的业务逻辑处理单元上。然而,Struts的配置相对繁琐,随着应用规模的增长,配置管理变得越来越复杂。
- Spring框架:Spring Framework是一个开源的轻量级应用框架,通过依赖注入(IoC)和面向切面编程(AOP)等特性简化了Java应用程序的开发。Spring MVC是Spring框架的一个模块,它实现了Web MVC设计模式,为开发者提供了一种轻量级的方式来构建动态Web应用程序。Spring框架的出现极大地改变了Java Web开发的格局。
五、微服务架构的兴起(2010年至今)
- 微服务架构:随着云计算和分布式系统的发展,微服务架构逐渐成为了一种流行的架构风格。在微服务架构中,应用程序被拆分为一组小型、独立的服务,每个服务都运行在自己的进程中,并通过HTTP或消息队列等方式进行通信。
- Java在微服务架构中的应用:Java语言和技术在微服务架构中具有很好的适用性。Spring Cloud等技术成为了开发和部署Java微服务应用的主流选择。
六、Java EE向Jakarta EE过渡(2017年至今)
- 背景:随着Java EE的发展和Oracle对其的管理策略变化,Java社区决定将Java EE项目转交给Eclipse基金会,并更名为Jakarta EE。
- 目标:Jakarta EE旨在保持对Java企业级开发的继续支持,并积极推动云原生应用程序的开发和部署。这一变化为Java Web开发带来了新的发展机遇和挑战。
三、JavaWeb 常用架构
Servlet + JSP 架构
Servlet是由Java提供用于开发web服务器应用程序的一个组件,运行在服务端,由servlet容器管理,用来生成动态内容。一个Servlet实例是实现了特殊接口Servlet的Java类,所有自定义的servlet均必须实现Servlet接口。
JSP 本质上就是Servlet,它是Servlet的一种特殊新式(由SUN公司推出),每个jsp页面都是一个servlet实例。
区别:
- Servlet是HTML代码和Java代码分离,侧重逻辑控制
- jsp是HTML页面中内嵌的Java代码,侧重页面显示
SSH 架构
SSH是Struts、Spring和Hibernate的集成框架。这三个框架各自承担不同的职责:
- Struts:作为系统的整体基础架构,负责MVC(Model-View-Controller)的分离。在Struts框架的模型部分,控制业务跳转。
- Spring:做管理,管理struts和hibernate。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,提供了业务对象管理等功能。
- Hibernate:负责持久化层。通过持久化数据对象,进行对象关系的映射,并以对象的角度来访问数据库。Hibernate封装了JDBC,使得开发人员可以以面向对象编程的思想来操控数据库。
SSM 架构
SSM是Spring MVC、Spring和MyBatis的集成框架。这三个框架同样各自承担不同的职责:
- Spring MVC:是Spring中的一部分,负责请求的转发和视图管理。它分离了控制器、模型对象、分派器以及处理程序对象的角色,使得它们更容易进行定制。
- Spring:与SSH中的Spring相同,负责业务对象管理等功能。Spring框架是一个分层架构,由多个定义良好的模块组成,这些模块可以单独存在或与其他模块联合实现。
- MyBatis:是一个基于Java的持久层框架,它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
SpringBoot架构
SpringCloud架构
四、JavaWeb 项目结构(带web.xml的)
一般大致为以下:
上图的 web模块(默认名称是 webapp) 是Java Web项目中的一个重要部分,它通常包含了Web应用程序的所有资源和配置文件。
WEB-INF 是什么?
WEB-INF目录是一个受保护的目录,它不会被Web服务器直接暴露给外部用户。
所以可以存放Web应用程序的私有资源和配置文件。
- 私有资源:包括 Servlet类、JSP页面(虽然JSP页面通常放在webapp的根目录或特定子目录下,但JSP的编译结果和相关的Servlet类会放在WEB-INF下)、静态资源(如模板文件、配置文件等,但通常不包括直接供客户端访问的静态资源,如图片、CSS、JavaScript等,这些资源一般放在webapp的其他目录下)以及
- 配置文件:web.xml配置文件等。
web.xml文件 是什么?
web.xml文件是Java Web应用程序的核心配置文件之一,它位于WEB-INF目录下。
这个文件根据Java Servlet规范定义,用于配置Web应用的行为和组件设置。具体作用包括但不限于:
- 定义Servlet类及其映射URL,指定Servlet初始化参数和装载顺序。
- 设置过滤器(Filter),指定它们应用于哪些URL请求,并可以传递初始化参数给过滤器。
- 注册监听器,用于监听Web应用生命周期中的特定事件,如启动、停止、会话创建和销毁等。
- 配置HTTP状态代码对应的错误页面,以便在发生特定错误时显示相应的错误信息页面。
- 设置Web应用默认的会话超时时间。
- 定义安全角色、登录认证和授权规则,控制对Web资源的访问权限。
三层开发
Dao层+Service层+Servlet层(其实也是Controller层)
参考
【1】https://blog.csdn.net/m0_46988935/article/details/115693714
五、如何打包
存在 web.xml 文件的项目默认是打war包的(比如Servlet + JSP架构、SSH架构、SSM架构),
不存在web.xml 的默认是打jar包(比如SpringBoot架构、SpringCloud架构)
一、intellij idea打war包
1、第一步在我们的电脑上打开IntelliJ IDEA,按ctrl+alt+shift+s键打开Project Structure,点击+号图标,选择“Artifacts->Web Application Archive”,如下图所示:
2、第二步进去之后,可以修改打包的war包名字和存放路径,默认是项目路径\out\artifacts\下面,将右侧的全选,鼠标右键点击“Put into Output Root”,如下图所示:
3、第三步全部添加到左侧之后,点击ok,如下图所示:
4、第四步点击Build->Build Artifacts,进行打包项目成war,如下图所示:
5.第五步在项目下面的target文件夹中可以看到打包的war包,也可以自己打包之前选择存放的路径,如下图所示:
参考
【1】https://blog.csdn.net/cm15835106905/article/details/107927847
六、war包部署
war包是通过Tomcat进行继续部署的
1. Tomcat 介绍
Tomcat是常见的免费的web服务器.
Tomcat 这个名字的来历,Tomcat是一种野外的猫科动物,不依赖人类,独立生活。 Tomcat的作者,取这个名字的初衷是希望,这一款服务器可以自力更生,自给自足,像Tomcat这样一种野生动物一般,不依赖其他插件,而可以独立达到提供web 服务的效果。
2. Tomcat目录结构
3. 开始部署项目
1、将编写并编译好的web项目(注意要是编译好的,如果是 eclipse,可以将项目打成 war 包放入),放入到 webapps 中(webapps内默认有5个固定的文件夹,不用管)。
2、启动tomcat服务器(双击 apache-tomcat-6.0.16\bin 目录下的 startup.bat,启动服务器)
3、在浏览器输入:http://localhost:8080/项目名/访问的文件名
参考
【1】Tomcat 部署项目的三种方法
七、jar 包部署
SpringBoot、SpringCloud 由于内置Tomcat ,所以可以直接以jar包方式启动
扩展:全局配置文件优先级
全局配置文件优先级
优先级:以下图顺序号代表配置文件的优先级,并且相同配置文件按顺序加载可以实现互补,但是不会被覆盖。
优先级
在同一级目录下,会先比较前缀bootstrap、application,其中bootstrap比application的优先级高,其次再去比较后缀.properties、.yml,
其中2.4.0之前版本.properties比.yml优先级高
其中2.4.0的版本yml比.properties优先级高
配置覆盖
- 当同一个配置属性在bootstrap.properties和bootstrap.yml文件中都存在时,那么properties中的配置会被加载,而忽略yml文件中的配置(即优先级高的配置覆盖优先级低的配置),不同配置相互互补。此处application(.properties/yml)同理
- 但当同一配置在bootstrap和application中都存在时,那么虽然优先加载bootstrap但是会被applicatioin中的配置覆盖,
- 当同一个配置属性在四种配置(bootstrap.properties、bootstrap.ym、application.properties、application.yml)都存在
- 根据不同版本的 application配置文件会覆盖其他配置文件。
2.4.0之前版本是application.properties,2.4.0的版本是application.yml