一.JavaEE的思想概述
1.1JavaEE应用的分层模型
无论是经典JavaEE还是现在所说的轻量级JavaEE,jAVAEE架构都可以分为如下层次
1.Domain Project领域对象层
此层次由一系列的POJO对象组成(Plain Old Java Project)组成,这些对象是该系统的领域对象,往往包含了各自所需实现的业务逻辑方法
2.DAO层 DATA ACCESS OBJECT
数据访问对象层,此层由一系列的DAO组件组成,这些DAO实现了对数据库的创建,查询,更新和删除等原子操作
3.Service业务逻辑层
此层由一系列的逻辑对象组成,实现了系统所需要的业务逻辑方法
4.Controller控制器层
由一系列控制器组成,这些控制器用于拦截用户请求,调用业务逻辑组件处理用户请求,并根据处理结果转发至对应的表现层
5.View表现层
由一系列的JSP页面,Velocity页面组成,负责收集用户请求,显示处理结果
JavaEE组件以松耦合方式组织,方便应用的扩展性
> 什么是JavaBean
>
> JavaBean是一种可重用组件,为写成JavaBean,类必须是具体和公开的,并且具有无参数的构造器;
>
> JavaBean作为一种Java类,通过封装属性和方法,成为具有某种功能或者处理某个业务的对象;
1.2ORM框架
Object Relation Mapping对象关系映射,它的存在是为了解决面向对象与关系数据库存在的互补匹配,ORM是连接数据库的桥梁。只要提供了持久化类与表的映射关系,ORM框架就能在运行时参照映射文件的信息,把对象持久化到数据库中
二.SpringMVC
2.1MVC的架构思想
2.1.1Model1和Model2
Java web的应用结构经历了Model1和Model2两个时代
Model1模式下,整个web应用几乎全部由JSP页面组成,JSP页面处理客户端请求对请求处理后直接做出响应,从工程化的角度来看,JSP页面身兼View和Controller两层角色,降低了代码的重用性
Model2模式则是基于MVC的架构的设计模式,JSP不再充当Controller角色,由Servlet充当控制器的角色,负责与后台的JavaBean通信
2.1.2MVC架构思想
MVC思想将一个应用分成三个基本部分,模型,视图,控制器来划分
Model,模型层,指工作中的JavaBean,用来处理数据
**PS**:JavaBean常分为两类,第一类是实体类Bean,第二类是业务处理Bean,用来处理业务逻辑与数据访问
View,视图层,工程中的html与JSP,用来和用户交互展示数据
Controller,控制器层,接受请求和响应浏览器
2.2SpringMVC的实现原理
Spring将MVC流程进行封装,帮助开发者屏蔽底层细节,并开放接口供开发人员调用,让MVC开发更简便
2.2.1SpringMVC的核心组件
1)DispatcherServlet
SpringMVC提供一个DispatcherServlet作为前端控制器来分派请求,它负责调度其他组件的执行,可以降低不同组件之间的耦合性,是整个SpringMVC的**核心模块**,开发者无需额外开发控制器对象。
DispatcherServlet来自于包,它继承自基类(父类)HttpServlet
org.springframework.web.servlet.DispatcherServlet
使用它时需要在web.xml中配置
<!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
<init-param>
<!-- contextConfigLocation为固定值 -->
<param-name>contextConfigLocation</param-name>
<!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的src/main/resources -->
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<!--
作为框架的核心组件,在启动过程中有大量的初始化操作要做
而这些操作放在第一次请求时才执行会严重影响访问速度
因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<!--
设置springMVC的核心控制器所能处理的请求的请求路径
/所匹配的请求可以是/login或.html或.js或.css方式的请求路径
但是/不能匹配.jsp请求路径的请求
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
所谓控制器实际上是由两部分组成,即拦截所有用户请求和处理请求的前端控制器DispatcherServlet和负责实际业务控制的Controller组成
2)Handler处理器
完成具体的业务逻辑,相当于Servlet
3)HandlerMapping
DispatcherServlet通过其将请求映射到不同的Handler
4)HandlerInterceptor
处理器拦截器,通过实现该接口对拦截进行处理
5)HandlerExecutionChain
处理器执行链包括Handler和HandlerInterceptor()
2.3创建SpringMVC应用
选择module
导入工程需要的依赖,在pom.xml文件中引入如下依赖
<dependencies>
<!-- SpringMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.1</version>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- ServletAPI -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- Spring5和Thymeleaf整合包 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>
</dependencies>
配置web.xml,在web.xml中定义前端控制器DispatcherServlet
<!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
<init-param>
<!-- contextConfigLocation为固定值 -->
<param-name>contextConfigLocation</param-name>
<!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的src/main/resources -->
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<!--
作为框架的核心组件,在启动过程中有大量的初始化操作要做
而这些操作放在第一次请求时才执行会严重影响访问速度
因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<!--
设置springMVC的核心控制器所能处理的请求的请求路径
/所匹配的请求可以是/login或.html或.js或.css方式的请求路径
但是/不能匹配.jsp请求路径的请求
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
配置springMVC.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自动扫描包 -->
<context:component-scan base-package="com.ZhuShuoWeb.Controller"/>
<!-- 配置Thymeleaf视图解析器 -->
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="order" value="1"/>
<property name="characterEncoding" value="UTF-8"/>
<property name="templateEngine">
<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver">
<bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<!-- 视图前缀 -->
<property name="prefix" value="/WEB-INF/templates/"/>
<!-- 视图后缀 -->
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
<property name="characterEncoding" value="UTF-8" />
</bean>
</property>
</bean>
</property>
</bean>
<!--
处理静态资源,例如html、js、css、jpg
若只设置该标签,则只能访问静态资源,其他请求则无法访问
此时必须设置<mvc:annotation-driven/>解决问题
-->
<mvc:default-servlet-handler/>
<!-- 开启mvc注解驱动 -->
<mvc:annotation-driven>
<mvc:message-converters>
<!-- 处理响应中文内容乱码 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="defaultCharset" value="UTF-8" />
<property name="supportedMediaTypes">
<list>
<value>text/html</value>
<value>application/json</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
</beans>