一:三层架构和MVC
1:三层架构
我们的开发架构一般都是基于两种形式:一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就是浏览器服务器。在 JavaEE 开发中,几乎全都是基于 B/S 架构的开发。那么在 B/S 架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多。
①:表现层:
也就是我们常说的web层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web 层,web 需要接收 http 请求,完成http 响应。
表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。
表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。
表现层的设计一般都使用 MVC 模型。(MVC 是表现层的设计模型,和其他层没有关系)
②:业务层:
也就是我们常说的 service 层。它负责业务逻辑处理,和我们开发项目的需求息息相关。web 层依赖业务层,但是业务层不依赖 web 层。
业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的,事务应该放到业务层来控制)
③:持久层:
也就是我们是常说的 dao 层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是和数据库交互,对数据库表进行曾删改查的。
2:MVC模型
MVC(Model View Controller):是模型(model)-视图(view)-控制器(controller)的缩写,是一种用于设计创建 Web 应用程序表现层的模式。MVC 中每个部分各司其职。
2. Model:
数据模型,JavaBean的类,用来进行数据封装。
3. View:
指JSP、HTML用来展示数据给用户
4. Controller:
用来接收用户的请求,整个流程的控制器。用来进行数据校验等。
二:Spring MVC概述
1:什么是SpringMVC
SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 Spring FrameWork 的后续产品,已经融合在 Spring Web Flow 里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 WEB 开发时,可以选择使用 Spring的 Spring MVC 框架或集成其他 MVC 开发框架,如 Struts1(现在一般不用),Struts2 等。
SpringMVC 已经成为目前最主流的 MVC 框架之一,并且随着 Spring3.0 的发布,全面超越 Struts2,成为最优秀的 MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful 编程风格的请求。
2:Spring MVC具体位置
3:Spring MVC优势
①:清晰的角色划分,让我们能非常简单的设计出整洁的Web层,进行更简洁的Web层的开发。
②:天生与Spring框架集成(如IoC容器、AOP等),是其它 Web 框架所不具备的。
③:提供强大的约定大于配置的契约式编程支持(注解开发)。
④:利用 Spring 提供的 Mock 对象能够非常简单的进行 Web 层单元测试。
⑤:支持灵活的URL到页面控制器的映射。
⑥:非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API。
⑦:提供一套强大的JSP标签库,简化JSP开发。
⑧:本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。
⑨:更加简单的异常处理。
⑩:对静态资源的支持。
①①:支持Restful风格。
三:Spring MVC入门案例
1:搭建注意事项
①:首先创建maven的时候选择模板:maven-archetype-webapp
②:如果项目创建特别慢的需要在创建时的New Module界面下的Properties下添加archetypeCatalog internal键值对
③:项目构建完成后在main文件下建立java和resources文件夹并通过右击找到Make Directory as指定文件夹类型
注意:web.xml各版本坐标约束及对应的环境约束 ①:web-app 2.3 [ JDK1.3 Tomcat4.1 ] <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > ②:web-app 2.4 [ JDK1.4 Tomcat5.5 ] <web-app id="WebApp_9" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> ③:web-app 2.5 [ JDK5.0 Tomcat6.0 ] <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> ③:web-app 3.0 [ JDK6.0 Tomcat7.0 ] <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> ④:web-app 3.1 [ JDK7.0 Tomcat8.0/8.5 ] <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> ⑤:web-app 4.0 [ JDK8.0 Tomcat9.0 ] <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
注:在web-app2.5之前的jsp页面是不支持EL表达式,如maven骨架创建web项目为2.3版本的就不支持EL表达式
为了可以使用我们在每个页面头部添加<%@ page isELIgnored="false"%> 支持el,或者粗暴方式该web-app2.5版本之后
2:简单搭建并测试
<!--编译成war包--> <packaging>war</packaging> <!--配置信息--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <!--设置版本锁定 下面的Spring都引用这个版本--> <spring.version>5.2.6.RELEASE</spring.version> </properties> <!--坐标导入--> <dependencies> <!--Spring核心包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!--导入Spring对web的支持--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <!--导入Spring MVC坐标--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!--导入Servlet 这种坐标在tomcat携带了,所以我们可以设置provided编译不要再次放入war包里--> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <!--导入JSP 这种坐标在tomcat携带了,所以我们可以设置provided编译不要再次放入war包里--> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> </dependencies>