- Spring Mvc框架是基于Sping框架的;
- Spring MVC框架用于简化Web应用程序中处理请求,响应结果及相应的细节;
- MVC=Model(数据模型)+View(视图)+Controller(控制器)
- SpringMvc框架不关心M
- Spring MVC框架是目前最主流的Web开发基础框架
- 即使在Spring Boot框架中添加Spring Web依赖处理请求与响应,也是使用的SpringMvc框架
- -------------可以通过依赖关系看到这一点
Spring MVC框架中的核心组件包括(最核心的5个):
DispatcherServlet
---------------前端控制器(最早运行,并不会处理请求(分发机器)),用于同意接收请求并分发(办事窗口),组织处理请求的流程
HandlerMapping
--------------------映射请求路径与处理请求的控制器(记录下来每个请求归哪个控制器管理)
Controller
--------------------实际处理请求的控制器(会记录在HandlerMapping里面)
ModelAndView
------------Controller组件处理完请求后得到的结果,有数据与视图名称组成
ViewResolver
------------视图解析器,可根据图名称确定需要使用的视图软件(具体指向谁由他说了算)
一.基于XML的SpringMVC
1.创建和启动
.创建基于Spring NVC框架的Maven项目
这里发现会和我们以前创建的项目不一样,这里我们右键main,创建java和resources文件夹
创建好我们会发现3个子集目录虽然完整但是不行,这里我们点开项目设置
项目来源的根目录
(这里要勾选,如果没有勾选那俩个文件相当于没有,所以这里要标记)
这里我们打开webapp会发现给我们了一个文件
点开文件加一个配置,点击(导入tomact)
找到TomcatServer,因为是本地打开的点击Local
Application server(应用程序服务器),这里导入我们已经下载的汤姆猫,并取好名字
这里下面会发现给我们一个错误的提示,我们点击Fix(修正错误)
点击之后我们选择第二个
表面上其实我们已经完事里,但是还没有完,继续回到配置项目那里,我们还要把tomact作为我们项目的一部分即添加依赖
启动, 这样我们就能后续用上JAVAEE的东西,否则会出错
,
二.添加Spring MVC相关的依赖
每一个依赖都是有dependcy节点组成的,它们应该在dependcies之下,它必须是一个已知条件.
org.springframework:正确选项
浏览器搜索mvn,点开Maven Repository: Search/Browse/Explore (mvnrepository.com),搜索spring-webmvc可以搜索到依赖,自行选择,
1.配置xml相关依赖
配置DispatcherServlet(重要)
最基本的配置:
接受请求的,我们需要让他工作起来,完成操作之前我们需要配置它
我们需要在这个窗口完成它的配置
添加servlet节点
添加servlet-mapping节点 ,名字必须保持一致
这里我们刚开始路径可以选择*.do,之所以用它,没有人去用这种扩展名,也不冲突,当然也可以自行起名
这里包名的名字太长也容易输错,我们可以在java中随便创建一个类,声明你想导入的,由java系统自动导入(小方法):(复制粘贴)
加载Spring的配置文件
因为它是基与Spring ,Spring拥有的功能它也应该具备
首先我们应该拥有下载好的Spring 配置文件,下载好之后,粘贴到resources里
这里爆红无伤大雅,不影响,我们可以选择把它删掉
然后我们在web.xml中添加初始化参数节点,并完善它.
检验是否配置完成,俩种方法
1).重启项目没有报错
2)在java里面一个类,在spring-mvc配置文件里添加bean,在类中添加构造方法,并添加输出语句,
用完删掉;
这是基于在加载xml文件时执行到bean会自动加载test这个类,执行构造方法,同时也能检验我们的一系类连锁是否正常..
三.
创建控制器控制请求
1.创建Controller实体类
2.在SpringMvc里添加配置文件
这样当项目启动时,他就会去创建这个Controller,他在Spring框架的管理之下,这样的话他才能被用起来
3.在SpingMVC里 配置HandlerMaping
配置控制器,路径
响应页面
1.创建一个页面,在WEB-INF下面(不能被别人直接访问得到)
控制在处理之后会返回一个ModelAndView,,View对应我们的页面
2.声明ModelAndView,设置视图的名称,做返回
/**实现Controller接口*/
public class HellloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//打桩方法执行,执行里说明控制器可以控制请求
System.out.println("httpServletRequest = " + httpServletRequest + ", httpServletResponse = " + httpServletResponse);
ModelAndView modelAndView=new ModelAndView();
modelAndView.setViewName("hello");
return modelAndView;
}
}
3.配置视图解析器,这样就能根据hello找到我们的页面(拼接操作)
4.如果我们向浏览器发送请求时,,我们发现我们只能处理hello.do一个请求,当要我们处理第二个请求时,第一必须先要拥有一个控制器类,同时还需要到HandlerMapping里面配置路径,同时还要和控制器产生对应(没处理李一个请求)
复杂程度高,不利于管理和维护,
四 使用新的方式处理SpringMVC
改进问题
.使用@RestMapping注解
1.创建新项目(和之前一样)
添加依赖
添加java,resources,右键main
添加tomcat配置(上面有讲)
2.创建HelloControler实体类
3.在springmvc配置(如上)
这里就是我们第一个需要改动的地方,=哪个路径写哪个位置,所以我么么舍弃,我们用过@ResMapping来解决我们哪个请求的问题
一个路径对应一个方法,实现映射
控制器Controller或者进阶
@Component @Service @Repository @Controller
这四个注解是等效的,在类上加任何一个,都可以让Spring去管理它的对象,但是当我们运用SrpingMVC框架时,我们只能添加Controller注解或他的高级注解
在Spring框架的应用中,如果我们希望框架去管理对象的话,我们可以通过组件扫描
配置组件扫描
(确定扫描那个包,确定组件在controller包下)
<context:component-scan base-package="cn.tedu.controller"></context:component-scan>不需要在写各个bean
在控制器类中美观与处理请求的方法
1.在控制器类中,方法名字自定义,不能违背java语法规则
2.方法的参数列表可以自定义,按需添加,只要是Spring容器中的对象/数据都可以自由添加
3.方法将抛出的异常可以自定义(按需抛出),一般不建议抛出,应该处理
4.方法的返回值可以自定义(当响应视图时,常用返回值String和ModelandView)
-------当使用String作为返回值类型是,返回值即表示视图名称
所以,当仅需要表示视图名称时,推荐使用String作为返回值类型
---在某些处理方式下,还可以使用其他类型作为返回值类型
在jsp页面中显示中文
或出现乱码,默认编码是ISO8859,是不支持中文的
添加jsp声明解决
在页面中引用静态资源文件
当我们引入外部资源文件(css,jss)时,我们应该想一下当前页面是什么,现在的访问路径在哪,访问目标的路径在哪,以此来确定href的值
1.创建项目,配置
2.创建用户登录界面,(运行项目检查)
3.导入layui文件(在webapp包下),文件可以去layui官网下载
Layui中文网 - 经典开源模块化前端 UI 框架(官方开发文档)https://layui.org.cn/index.html4.引入外部文件
一定要注意路径的写法,始终明确现在访问的资源跟被引用网址,二者一对比就好
A.设置登录界面
<%--
Created by IntelliJ IDEA.
User: Tedu
Date: 2022/6/21
Time: 22:09
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<link rel="stylesheet" href="../../layui/layui/css/layui.css">
</head>
<body>
<%--offset:偏移 col:站几等份--%>
<div class="layui-container">
<div class="layui-row">
<div class="layui-col-md6 layui-col-md-offset3">
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 50px">
<legend>用户登录</legend>
</fieldset>
<form class="layui-form layui-form-pane">
<div class="layui-form-item">
<label class="layui-form-label">
用户名
</label>
<div class="layui-input-block">
<input type="text" name="username" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">
密码
</label>
<div class="layui-input-block">
<input type="text" name="password" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<input type="submit" value="登录" class="layui-btn">
<input type="reset" value="重置" class="layui-btn-lg">
</div>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
B 接受请求的参数
封住数据,便于管理,
package cn.tedu.controller;
import cn.tedu.controller.cn.tedu.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
public class UserController {
@RequestMapping("/user/login/page.do")
public String showLoginPage(){
return "user_login";
}
@RequestMapping("/user/login/handle.do")
public String handleLogin(User user){
System.out.println("获取到的用户数据:"+user);
return null;
}
}
进一步认识MVC
关于MVC(绝不解决别人的问题)
web端MVC最常见
关于Controller
模拟登录验证(Service组件)
1.创建service包,实现接口在实现类
创建imp子集包创建类
2.自定义异常
异常要统一处理
当我们去开发一个项目时,在处理数据的过程中,如果我们要认为这次处理是某种错误的行为,不管他是什么错误,只要我们认为他这个错误的行为与用户尝试做的操作最终的目标是无法达到预期的,那我们就抛出异常
页面的显示
转发与重新定向:
当控制器处理请求后,需要向客户端响应结果,可以
- 转发
- 重定向
- 响应正文
------不用于呈现页面
转发流程:
重定向流程:
关于Session
使用Session保存的数据有:
Session的清除:
SpringMvc拦截器的概念:
拦截器(Interceptor):