一边学习狂神Java说一边记录自己的学习经过,文章里有自己学习的理解和扩展,大部分是自己不懂又去扩展了的内容,所以和狂神自己的笔记和课程可能会有一些不一样,新手难免有理解偏差或者错误,恳请大佬指正。
SpringMVC学习(一)学习SpringMVC前的一些回顾和学习
MVC回顾
ssm:spring+springmvc+mybatis MVC三层架构
什么是MVC?
- MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。
- 将业务逻辑、数据、显示分离的方法来组织代码
- MVC主要作用时降低了视图与业务逻辑间的双向耦合
- MVC不是一种设计模式,MVC是一种架构模式
Model(模型)
数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或者JavaBean组件。一般会将其分离成Value Object(数据Dao)和服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
View(视图)
负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西
Controller(控制器)
接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。
SSM中常见的文件夹类型
dao
DAO(Data Access Object)是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。负责数据保存到数据库、文件、内存。使得数据与业务逻辑分离。
mapper
mapper的目的是为了把关系数据库映射成java类(对象)。因此,如果只有mapper没有dao层,那么一旦项目需要把数据保存到文件或者内存,那么调用mapper的高层就会受到影响。如果仅仅使用数据库作为数据存储,那么mapper和dao是一样的。在mybatis中,mapper就是dao的别名。
pojo
POJO(Plain Ordinary Java Object)简单的Java对象,一般放实体类。比如User、Student等等。它不依赖任何框架。放实体类的文件夹也可以叫model、entity。
service
存放业务逻辑处理,也就是一些关于数据库处理的操作,但是不直接和数据库打交道。和数据库打交道的是dao和mapper,Service调用dao或mapper来和数据库打交道。
controller
负责具体的业务模块流程的控制,在此层要调用service层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里进行,针对具体的业务流程,会有不同的控制器。文件夹也可能命名为servlet。
web
存放jsp文件
SSM中每层的作用流程图
SSM中各层的流程如下图所示:
Servlet简单实现web的流程
新建项目
创建一个maven项目,导入依赖:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
然后对这个项目右键,添加框架支持,选web
选择webApplication并且指定版本,点ok。
编写Servlet类
package com.hj.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取前端参数
String method=req.getParameter("method");
if (method.equals("add")){
req.getSession().setAttribute("msg","执行了add方法");
}
if (method.equals("delete")){
req.getSession().setAttribute("msg","执行了delete方法");
}
//2.调用业务逻辑
//就是真正的调用业务去处理这里暂时不用,就当他已经处理了
//3.视图跳转 重定向
req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
在WEB-INF目录下新建我们展示的页面test.jsp
<%--
Created by IntelliJ IDEA.
User: hbq
Date: 2021/5/20
Time: 9:52
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
然后在web.xml中注册这个Servlet,这样我们在/hello页面就能看到
<?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">
<!--配置重定向/hello-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.hj.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<!--设置15分钟就超时-->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
<!--欢迎页-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
配置tomcat
配置tomcat,首先在项目上面找到锤子旁边的Add configuration。
先点击add configuration,再点+号。选择Tomcat server,然后点击OK
进到这里首先设置tomcat版本,这里要9的,对应jdk1.8 ,用tomcat10的话会报错。
没有下载tomcat的可以去官网下载:tomcat
然后点击fix
可以看到我们有一个application context,把他变成/ 就默认我们通过8080端口直接访问就可以访问到。点击tomcat9右边的播放按钮,运行!
然后浏览器输入localhost:8080/user?method=add和localhost:8080/user?method=delete就可以看到我们写的界面了。
那通过这个Servlet可以看出,MVC框架需要做以下事情:
- 将url映射到java类或者java类的方法中去
- 封装用户提交的数据
- 处理请求,调用相关的业务处理,封装响应数据
- 将响应的数据进行渲染.jsp/html等表示层数据