1. 回顾MVC
1.1 什么是MVC?
MVC 即模型( Model )、视图( View )、控制器( Controller )的简写,是一种软件设计规范!
MVC 不是一种设计模式,而是一种架构模式,主要作用是降低了视图与业务逻辑间的双向耦合。
- Model(模型):数据模型,提供要展示的数据,因此包含数据和行为。一般分为数据层( Dao 层) 和 服务层( Service 层)。总而言之,模型负责数据查询和数据的状态更新等功能。
- **View(视图):**负责进行模型的展示,也是用户与之进行交互的界面,即前端页面。
- Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据交给视图,由视图负责展示。即控制器的任务就是在视图展示和模型处理之间进行调度!
最典型的 MVC 框架即 JSP + Servlet + JavaBean 模式
1.2 Model1方式
早期的 Web 开发,采用的都是 Model1方式。
Model1 主要分为两层:模型层和视图层。
职责分析:
控制:Controller
- 获取表单请求参数
- 调用业务逻辑处理
- 转向指定页面
模型:Model
- 处理业务逻辑
- 保存数据状态(数据库操作)
视图:View
- 展示页面!
可以看出,Model2 方式使得框架各部分的任务更加明显。Model1 中 JSP 同时承担了 View 和 Controller 的任务,将控制逻辑和表现逻辑混在一起,耦合度非常高,增加了应用的扩展性和维护的难度。而 Model2 通过分离 View 和 Controller 角色,解决了 Model1 的问题。
2. 回顾Servlet
在使用 SpringMVC 前,先回顾一下基础,Servlet 和 Tomcat 的使用!先给父项目 SpringMVC-Study 导入依赖
<dependencies>
<!-- Spring 框架!包含所有 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- jsp -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<!--jstl表达式 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.2</version>
<scope>test</scope>
</dependency>
</dependencies>
然后在父项目中创建 SpringMVC01_ReviewServelett 项目(不使用模板),再用 Add Framework Support 给项目添加 Web 的框架!这样这个项目就有 web 文件夹了,代表这是一个 Web 项目!
好了,现在就可以写一个简单的 Servlet 程序了
2.1 编写 Servlet 类
创建 HelloServlet 类继承 HttpServlet ,它就是一个 Servlet 了,可以处理用户的请求!
public class HelloServlet extends HttpServlet {
}
然后就是重写其中的 doGet 和 doPost 方法( Ctrl + o 快速重写方法)!
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.视图转发或重定向!这里用转发,两者的区别回去 JavaWeb 看!
req.getRequestDispatcher("/WEB-INF/Test.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
这里转发到了一个 JSP 页面去,所以要有对应的页面!
2.2 编写 JSP 页面
为了真实一点,不要直接输入参数去访问 Servlet,改造一下 index.jsp 让它能提交请求!
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>提交请求</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/hello" method="post">
<input type="text" name="method">
<input type="submit">
</form>
</body>
</html>
注意:时空穿越回来了!后面把项目路径设置为了 /SpringMVC_01_Servlet
,所以这里要通过 ${pageContext.request.contextPath}
获取项目路径,再加上请求的路径。否则就直接进到 http://localhost:8080/hello
了。
然后在 web 目录下创建 jsp 文件夹,在其中创建 Test.jsp,就是 Servlet 处理完请求展示的页面!
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>baifu</title>
</head>
<body>
<%--取参数!--%>
${msg}
</body>
</html>
很简单,就取了一下参数!
注意:如果把 jsp 文件夹创建在了 WEB-INF 目录下,肯定是有区别的,不过我还不知道😛!
2.3 注册 Servlet
很关键的步骤嗷,不能忘记!
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.qiyuan.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<!-- Session 持续时间 -->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
<!-- 欢迎页,就是首页!-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
在 web.xml 中还能配置很多东西哦,如 Session 的持续时间和欢迎页面(默认 index.jsp )!
2.4 配置Tomcat
用了那么多次,总得会配了。不会回去看 JavaWeb!
不过要强调一下,添加 Artifact 时的 Application context 就是项目的路径(怎么和 Spring 的配置文件一个名),直接用项目名就好,如 /SpringMVC01_ReviewServelet_war_exploded
!不写的话,路径就是 localhost:8080
了(直接进去就是)。
配置完后启动,直接就会进入 index.jsp,输入 add 或 delete 后提交,就会显示执行了对应的方法了!这么简单就不贴图了(其实有 BUG )。
总结
回顾完了,再看看 MVC 框架要做什么事情
- 将 url 映射到 java 类或类中的方法
- 封装用户提交的数据
- 处理请求——调用相关的业务进行处理——封装响应数据
- 将响应的数据渲染到前端页面
参考: https://blog.csdn.net/qq_43560701/article/details/119981029