目录
- 一、Spring MVC概述
- 1、MVC架构
- 2、Spring MVC
- 3、使用Spring MVC的两种方式
- 二、基于XML配置与注解的方式使用Spring MVC
- (一)创建Maven项目
- (二)添加相关依赖
- (三)给项目添加Web功能
- (四)创建三个页面
- 1、创建登录页面
- 2、创建登录成功页面
- 3、创建登录失败页面
- (五)创建登录控制器
- (六)创建Spring配置文件
- (七)创建Spring MVC配置文件
- (八)修改Web部署描述文件
- (九)配置Tomcat服务器
- (十)、添加对项目Tmacat的依赖
- 1、在Modules里添加omcat
- 2、添加运行时所需要的jar包
- (十一)启动Tomcat查看效果
一、Spring MVC概述
1、MVC架构
- MVC 是
Model
、View
和Controller
的缩写,分别代表 Web 应用程序中的 3 种职责。
- 模型(Model):用于存储数据以及处理用户请求的业务逻辑。
- 视图(View):向控制器提交数据,在移动端或Web端显示模型中的数据。
- 控制器(Controller):根据视图提出的请求判断将请求和数据交给哪个模型处理,将处理后的有关结果交给哪个视图更新显示。
- 三层架构:Presentation Tier + Application Tier + Data Tier (展现层+应用层+数据访问层)
2、Spring MVC
- Spring MVC 是 Spring 提供给 Web 应用的框架设计。Spring MVC 是一个典型的教科书式的 MVC 构架,不像 Struts 等都是变种或者不是完全基于 MVC 系统的框架。Spring MVC 角色划分清晰,分工明细,并且和 Spring 框架无缝结合。作为当今业界最主流的 Web 开发框架,Spring MVC 已经成为当前最热门的开发技能,同时也广泛用于桌面开发领域。
- 实际上MVC只存在于三层架构的展现层,M实际上是数据模型,是包含数据的对象,在Spring MVC里有一个专门的类交Model,用于和V之间的数据交互和传值;V指的是视图页面,包含JSP、FreeMarker、Velocity、Thymeleaf、Tile等;C当然就是控制器(Spring MVC的注解@Controller的类)。
Spring MVC工作流程:
- 客户端请求提交到 DispatcherServlet。
- 由 DispatcherServlet 控制器寻找一个或多个 HandlerMapping,找到处理请求的 Controller。
- DispatcherServlet 将请求提交到 Controller。
- Controller 调用业务逻辑处理后返回 ModelAndView。
- DispatcherServlet 寻找一个或多个 ViewResolver 视图解析器,找到 ModelAndView 指定的视图。
视图负责将结果显示到客户端。
3、使用Spring MVC的两种方式
- 基于XML配置与注解的方式使用Spring MVC
- 基于Java配置与注解的方式使用Spring MVC
二、基于XML配置与注解的方式使用Spring MVC
(一)创建Maven项目
- Maven项目 -
SpringMvcDemo01
- 点finish
(二)添加相关依赖
- 在
pom.xml
文件里添加支持Spring MVC
的相关依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.hw.spring</groupId>
<artifactId>SpringMVCDemo2023</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<!-- spring.version -->
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring.version>5.3.4</spring.version>
</properties>
<dependencies>
<!--Spring核心-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Spring Bean-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Spring容器-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Spring测试-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Spring数据库支持-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--数据库驱动工具包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<!--数据库连接池框架-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.24</version>
</dependency>
<!--日志框架-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--Spring AOP-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!--AspectJ支持-->
<dependency>
<groupId>aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
<scope>runtime</scope>
</dependency>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</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>
<!--JSP标准标签库-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--Servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--对json的支持-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.7</version>
</dependency>
<!--对xml的支持-->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.5.3</version>
</dependency>
</dependencies>
</project>
(三)给项目添加Web功能
- 打开项目结构窗口,在列表里选择【Modules】
- 单击【+】按钮,添加Web功能
- 单击
【Create Artifact】
按钮,将名称改为“SpringMvcDemo2023
”
单击【OK】按钮,可以看到项目多了一个web目录
(四)创建三个页面
- 在
WEB-INF
里创建views
子目录(存放JSP页面)
1、创建登录页面
- 在
views
目录里创建登录页面 -login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>登录</title>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.5.3/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.5.3/js/bootstrap.min.js"></script>
<script src="js/check.js"></script>
</head>
<body>
<div class="container-fluid">
<h3 class="text-center">用户登录</h3>
<form class="was-validated" id="frmLogin" method="post" action="login">
<div class="form-group">
<label for="username">账号:</label>
<input type="text" class="form-control" id="username" name="username" placeholder="请输入用户名" required>
<div class="valid-feedback">有效</div>
<div class="invalid-feedback">请输入用户名</div>
</div>
<div class="form-group">
<label for="password">密码:</label>
<input type="password" class="form-control" id="password" name="password" placeholder="请输入密码" required>
<div class="valid-feedback">有效</div>
<div class="invalid-feedback">请输入密码</div>
</div>
<div class="text-center">
<button type="submit" class="btn btn-primary">登录</button>
<button type="reset" class="btn btn-secondary">重置</button>
</div>
</form>
</div>
</body>
</html>
2、创建登录成功页面
- 在views目录里创建登录成功页面 -
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>登录成功</title>
</head>
<body>
<h3>${username},登录成功</h3>
</body>
</html>
3、创建登录失败页面
- 在views目录里创建登录成功页面 -
fail.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录失败</title>
</head>
<body>
<h3>登录失败</h3>
</body>
</html>
(五)创建登录控制器
- 创建net.llp.spring.controller包,然后在包里创建
LoginController
类
package net.llp.spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpSession;
/**
* 功能:
* 作者:罗
* 日期:2023年03月09日20时00分07秒
*/
@Controller
public class LoginController {
@RequestMapping("login") // 可用@RequestMapping("/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
HttpSession session) {
// 将登录表单提交的用户名写入会话
session.setAttribute("username", username);
// 判断用户是否登录成功
if (username.equals("admin") && password.equals("123456")) {
// 返回逻辑视图名success,表明跳转到登录成功页面
return "success";
}
// 返回逻辑视图名failure,表明跳转到登录失败页面
return "fail";
}
}
对于关系图
(六)创建Spring配置文件
- 在
resources
里创建mvc
子目录,然后在子目录里创建spring-config.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: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">
<!--扫描控制器-->
<context:component-scan base-package="net.llp.spring.controller"/>
</beans>
(七)创建Spring MVC配置文件
- 在
resources/mvc
目录里创建spring-mvc-config.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">
<!--采用注解驱动-->
<mvc:annotation-driven/>
<!--扫描控制器-->
<context:component-scan base-package="net.llp.spring.controller"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<mvc:view-controller path="/" view-name="index"/>
<mvc:view-controller path="/toLogin" view-name="login"/>
<!--专门处理静态资源的请求-->
<mvc:resources mapping="/images/**" location="/WEB-INF/static/images/"/>
<mvc:resources mapping="/css/**" location="/WEB-INF/static/css/"/>
<mvc:resources mapping="/js/**" location="/WEB-INF/static/js/"/>
<!--<mvc:annotation-driven/>-->
</beans>
(八)修改Web部署描述文件
- 一个Web项目启动时最先要读取web.xml文件
- 在web/WEB-INF目录里打开web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!--设置启动首页-->
<!-- <welcome-file-list>
<welcome-file>/WEB-INF/views/login.jsp</welcome-file>
</welcome-file-list>-->
<!--Spring容器加载监听器,让Spring随着Web项目启动而初始化-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--指定Spring配置文件位置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mvc/Spring-config.xml</param-value>
</context-param>
<!--配置Spring前段控制器,加载Spring MVC配置文件-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mvc/spring-mvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern> <!--“/”表明拦截一切请求-->
</servlet-mapping>
<!--设置字符编码过滤器-->
<filter>
<filter-name>Character Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
注意:Spring配置文件位置和配置Spring前段控制器,加载Spring MVC配置文件
(九)配置Tomcat服务器
- 点击【add Configuration】
- 点 + 号,找到Tamcat,点击local
- 点击fix(修复)
- 点apply再点OK
注意:URL地址
(十)、添加对项目Tmacat的依赖
1、在Modules里添加omcat
- .打开【Project Structure】窗口,选择Modules对应的Dependencies
- 点右边 + 号,点Lib,选择Tomcat添加进去
2、添加运行时所需要的jar包
- 点击
Artiface
,将右边jar包全选中, - 点击
put into default Locations
(十一)启动Tomcat查看效果
- 自行测试登录成功和失败攻略