MVC设计模式
视图(View)-对应组件:JSP或者HTML文件
控制器(Controller)-对应组件:Servlet
模型(Model) -对应组件:JavaBean
MVC 处理过程
mvc的优点
多视图共享一个模型,大大提高代码的可重用性
MVC三个模块相互独立,松耦合架构
控制器提高了应用程序的灵活性和可配置性
有利于软件工程化管理
mvc的缺点
原理复杂
增加了系统结构和实现的复杂性
视图对模型数据的低效率访问
Spring MVC框架搭建步骤
1、下载jar文件并导入工程
spring-web-3.2.13.RELEASE.jar
spring-webmvc-3.2.13.RELEASE.jar
2、配置文件
在web.xml中配置Servlet
<?xml version="1.0" encoding="UTF-8"?>
<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">
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--数字越小越早启动-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!--字符集配置-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<!-- encoding 是CharacterEncoding的一个属性-->
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<!--forceEncoding 是CharacterEncoding的一个属性-->
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!--定义过滤内容:-->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<servlet-name>springmvc</servlet-name>
</filter-mapping>
</web-app>
创建Spring MVC的配置文件
<!--设置扫描器-->
<context:component-scan base-package="com.springmvc.controller"></context:component-scan>
<!--配置注解驱动-->
<mvc:annotation-driven/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!--后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
3、创建Controller-处理请求的控制器
/**
* Created by IntelliJ IDEA.
*
* @Author : zrc
* @create 2022/8/30 14:54
* @Controller 表示控制器
* 通过@RequestMapping来映射url地址
*/
@Controller
public class UserController {
Logger logger = Logger.getLogger(UserController.class);
@RequestMapping("/tologin.action")
public String toLogin() {
logger.info("进入登陆页面");
//跳转至登陆页面
return "login";
}
@RequestMapping("/toregist.action")
public String toRegist() {
logger.info("进入注册页面");
//跳转至注册页面
return "regist";
}
}
4、创建View-jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>登陆成功</h1>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>注册</h1>
<form method="post" action="mv5.action">
姓名<input type="text" name="username" ><br>
密码<input type="password" name="password"><br>
性别<input type="radio" name="sex" value="男" checked="checked"> 男<input type="radio" value="女" name="sex">女<br>
电话<input type="text" name="tel"><br>
邮箱<input type="email" name="email"><br>
<input type="submit" >
</form>
</body>
</html>
5、部署运行
Spring MVC体系结构
DispatcherServlet(前端控制器)
Spring MVC最核心的类
web.xml中配置
Handler(处理器):对应MVC中C(Controller)
类型:Object
作用:实际处理请求
标注了@RequestMapping的所有方法都可以看作是一个Handler
ModelAndView
逻辑视图名
模型对象
核心组件
HandlerMapping(处理器映射)
BeanNameUrlHandlerMapping(默认)
将请求URL映射到同名的控制器Bean上
DefaultAnnotationHandlerMapping
将请求映射到标注@RequestMapping注解的控制器和处理方法上
RequestMappingHandlerMapping
HandlerAdapter(适配器)
AnnotationMethodHandlerAdapter
RequestMappingHandlerAdapter
ViewResolver(视图解析器)
InternalResourceView
Spring MVC框架特点
清晰地角色划分
灵活的配置功能
提供了大量的控制器接口和实现类
真正做到与View层的实现无关(JSP、Velocity、Xslt等)
国际化支持
面向接口编程
Spring提供了Web应用开发的一整套流程,不仅仅是MVC,他们之间可以很方便的结合一起