JavaEE的体系结构:
由上到下分为:
应用层、Web层、业务层、持久层
(1)持久层:数据的持久化层(将内存中的数据保存到数据库文件中或其他文件中)
持久层的框架有: MyBatis、Hibernate
(2)业务层:实现业务的整合、解耦。Spring
(3)Web层:实现请求-响应。
Web层的框架有:SpringMVC、Struts2

<springVersion>5.1.1.RELEASEspringVersion>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-expressionartifactId>
<version>${springVersion}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>${springVersion}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>${springVersion}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${springVersion}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>${springVersion}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${springVersion}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aspectsartifactId>
<version>${springVersion}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
<version>${springVersion}version>
dependency>
<dependency>
<groupId>org.aspectjgroupId>
<artifactId>aspectjweaverartifactId>
<version>1.9.4version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>4.0.0version>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>javax.servlet.jsp-apiartifactId>
<version>2.3.3version>
dependency>
DispatcherServlet 是前端控制器;是整个SpringMVC的核心;是一个Servlet,负责统一分发所有请求
DispatcherServlet 的作用:
如果不指定
通常让Servlet跟随servlet容器一起启动;
其中的值有:
拦截规则:
*.xxx: 指定要拦截的特定类型;不拦截静态文件
/: 使用REST风格进行拦截,导致静态文件被拦截不能正常显示;如果要静态文件可以使用,可以在DispatcherServlet前使用DefaultServlet先拦截特定类型的请求(*、js、.css等)
/* : 导致不能访问jsp
<servlet>
<servlet-name>springMvcservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath*:springMvc-config.xmlparam-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>springMvcservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
HandlerMapping负责完成请求到控制器的映射。在Servlet的配置文件中,进行url与控制器的映射,同时,还可以对控制器进行拦截
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
Controller(控制器)负责处理用户请求,完成之后返回ModelAndView对象给前端控制器,通过实现Controller接口或继承父类的方式编写控制器
控制器写法:
负责对ModelAndView对象的解析,并直接查找对应的view对象,SpringMVC默认通过转发进行页面跳转
如果要解析的是HTML页面;则需要导入jar包:
<dependency>
<groupId>org.freemarkergroupId>
<artifactId>freemarkerartifactId>
<version>2.3.22version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-context-supportartifactId>
<version>${springVersion}version>
dependency>
创建一个properties文件:对日期等进行格式化
tag_syntax=auto_detect
template_update_delay=60
default_encoding=UTF-8
output_encoding=UTF-8
locale=zh_CN
date_format=yyyy-MM-dd
time_format=HH:mm:ss
datetime_format=yyyy-MM-dd HH:mm:ss
classic_compatible=true
template_exception_handler=ignore
在SpringMVC-conf.xml中配置html解析器
<bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="classpath:freemarker.properties"/>
bean>
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="freemarkerSettings" ref="freemarkerConfiguration"/>
<property name="templateLoaderPath" value="/WEB-INF/html/"/>
bean>
<bean id="htmlViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="suffix" value=".html"/>
<property name="contentType" value="text/html;charset=utf-8"/>
<property name="order" value="0"/>
bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="1"/>
bean>

很多应用程序的问题在于处理业务数据的对象和显示业务数据的视图之间存在紧密耦合,通常,更新业务对象的命令都是从视图本身发起的,使视图对任何业务对象更改都有高度敏感性。而且,当多个视图依赖于同一个业务对象时是没有灵活性的。
SprinaMVC是一种基于Java,实现了WebMVc设计模式,请求驱动类型的轻量级Web框架,即使用了Mvc架构模式的思想,将 Web层进行职责解耦。
基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMvc也是要简化我们日常web开发。
package com.mvc.beans;
import lombok.Data;
/**
* @author Una
* @date 2022/8/12 14:17
* @description:
*/
@Data
public class User {
//属性必须和表单属性相同
private String userName;
private String passWord;
}
<%--
Created by IntelliJ IDEA.
User: ThinkPad
Date: 2022/8/11
Time: 15:31
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>SpringMVC实例</title>
</head>
<body>
<h1>西安邮电大学</h1>
</body>
</html>
<mvc:annotation-driven />
<context:component-scan base-package="com.mvc.controller"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="1"/>
bean>
package com.mvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author Una
* @date 2022/8/13 12:38
* @description:
*/
//@RequestMapping(value = "hello")//表示这个类所有的响应结果以/hello/为父路径
@Controller//表示被注解的类是一个控制器;可以处理客户端的请求
public class HelloController {
@GetMapping(value = "abc")
public String test() {
return "hello";
}//值与hello.jsp同名
@GetMapping(value = "xjd")
public String test2(){
return "admin";
}
}
在以上代码中,当用户在地址栏输入abc回车后,test()方法返回"hello",控制器将hello拼接到"/WEB-INF/views/“与”.jsp"之间;形成一个完整的路径:"/WEB-INF/views/hello.jsp"即跳转到hello.jsp页面
