1.前言
来自小菜鸡的 心灵窗口,今天开始学习SpringMVC。
(好好学习,天天向上)
1.1三层架构
首先在知道Spring MVC 之前 先了解一下 三层架构的知识。
在开发架构中,一般分俩种架构:
c/s架构,客户端/服务器
b/s架构,浏览器/服务器
在javaEE开发当中,大部分都是以B/S架构为原型,而在B/S架构中,系统标准的三层架构包括:
- 表现层
- 业务层
- 持久层
在表现层中,负责接收客户端的请求,向服务端响应结果,通常客户端使用http协议,请求web层,web需要接收http请求,完成http响应。
表现层主要包括:
控制层(负责接收请求),展示层(负责结果的展示)。
表现层依赖于业务层具体实现,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。表现层设计一般都会使用mvc模型
MVC是表现层的设计模型,与其他模型没有关系
(而spring aop 和 ioc 是贯穿三层的)
而业务层负责业务的逻辑处理,和项目需求的开发息息相关
持久层 负责数据的持久化
持久层又分俩层 数据层(即数据库)和数据访问层
数据库访问层是业务层和持久层交互的接口,业务层需要通过数据库访问层将数据持久化到数据库中。
通俗的讲,持久层就是和数据库交互,对数据库表进行增删改查的。
1.2MVC
再搞清楚 三层架构之后。我们来介绍 MVC
MVC 是一种设计模式
- Model
- View
- Controller
Model: 数据模型,提供要展示的数据(一般用来在mvc结构中传输数据),用于封装数据。
View: 展示数据 用于用户的交互,用来显示数据,依据模型视图创建的。将模型展示给用户。
Controller 是model与View 之间的沟通的“调度员” 。
先收到请求,然后将model 从service层获取之后 传给 Controller 然后后者将 model 传给view 然后view 根model 进行界面的显示
2.SpringMVC
2.1 简介
SpringMVC是Spring提供的一个模块。是一个基于MVC的web应用的框架,SpringMVC框架提供了MVC模式在B/S架构中的应用。
2.2 快速入门
奥,对了,别忘记导包:
运行原理:
在动态web 服务器中,web-inf 底下web.xml 底下添加
- 配置前端控制器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>springmvc-hello</display-name>
<!--配置spring mvc的核心控制器 -->
<servlet>
<servlet-name>SpringMVCDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载springmvc的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringMVC.xml</param-value>
</init-param>
<!-- 启动的时候创建servlet对象 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVCDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- 撰写控制器
package com.briup.mvc.web;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// 获取页面传递的参数,按照ServletAPI的操作
String param = request.getParameter("param");
System.out.println("页面获取的参数:" + param);
// ModelAndView对象中包含要返回的业务逻辑视图,和要渲染的数据模型
ModelAndView mv = new ModelAndView();
// 设置视图名,可以是字符串,也可以是View对象
mv.setViewName("index.jsp");
// 要返回给页面的数据模型,Model,可以再页面直接使用el表达式取值。
Map<String, String> map = new HashMap<String, String>();
map.put("rsKey", "返回给页面的属性值");
// 将数据模型添加到ModelAndView中,数据模型可以是任何javaBean对象。
mv.addAllObjects(map);
return mv;
}
}
- 配置控制器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
name:代表了将来用户访问时,浏览器地址url和bean配置的name值一样
-->
<bean name="/hello" class="com.briup.mvc.web.HelloController" />
</beans>
- 在
WebContent
目录下新建index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" %>
<%
StringBuilder builder = new StringBuilder();
builder.append(request.getScheme()).append("://")
.append(request.getServerName()).append(":")
.append(request.getServerPort())
.append(request.getContextPath())
.append("/");
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=builder.toString()%>">
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>${rsKey}</h1>
</body>
</html>