目录
一、Springmvc简介及配置
1.什么是springMVC?
spring Web MVC 是一种基于 Java的实现了MVC设计模式的、请求驱动类型的、轻量级Web框架
1.视图层框架 SpringMVC部分功能是向用户渲染展示数据
2.控制层框架 DispatcherServlet:接收浏览器端的任意请求,
然后寻找对应的 子控制器(适配器*Adapter) 去处理浏览器请求
2.SpringMVC处理请求的流程
2.1首先用户发送请求------->DispatherServlet
2.2DispatcherServlet--------->HandlerMapping
2.3DispatcherServlet--------->HandlerAdapter
2.4HandlerAdapter--------->处理器功能处理方法的调用
2.5ModelAndView的逻辑视图名-------->ViewRecolver
2.6View-------->渲染
2.7返回控制权给 DispatcherServlet, 由DispatcherServlet 返回呼应给用户,流程结束
3.SpringMVC核心开发步骤
3.1 DispatcherServlet 在 web.xml中的部署描述,从而拦截请求到 springMVC
3.2 HandlerMapping的配置,从而将请求映射到处理器
3.3 HandlerAdapter 的配置,从而支持多种类型的处理器
3.4 处理器(页面控制器)的配置,从而刊行功能处理
3.5 ViewResolver的配置,从而将逻辑视图名解析为具体的视图技术
4.SpringMVC的组件
4.1 前端控制器(DispatcherServlet)
4.2 请求到处理器映射(HandlerMapping)
4.3 处理器适配器(HandlerAdapter)
4.4 视图解析器(ViewResolver)
4.5 处理器或页面控制器 (Controller)
4.6 验证器(Validator)
4.7 命令对象(Command 请求参数绑定到的对象就叫命令对象)
4.8 表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)
5.如何在项目中添加springmvc
5.1 添加相关依赖
添加到pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--------------------------------------JSTL依赖-------------------------------------->
<!---缺少下面的这两个jar包会报 java.lang.NoClassDefFoundError:javax/servlet/jsp/jstl/core/Config----->
<!---原因:org.springframework.web.serlver.view.JstIView在视图解析时需要这二个jar包-->
这个jar包属于,我们要利用ssm做增删改查以及上传下载会利用到jstl标签库
jstl是自定义标签库,c标签要利用到的jstl
<!--jsp文件中c标签的使用-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
5.2 在WEB-INF下添加springmvc-servlet.xml(spring-mvc.xml)这里的名字可以随便取
1.扫描base-package
定义base-package
开启注解扫描
开启动态代理
2.配置视图解析器
本地资源视图解析器:InternalResourceViewResolver
多功能视图解析器
3.做静态资源映射
HelloController.java
package com.zking.ssm.controller;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
/**
* @author 敢敢
* @site www.javajwj.com
* @company xxx公司
* @create 2022-08-17 20:21
*/
/*
* 被controller标记的类 会交给 spring 进行管理
* @Controller
* 某一个业务类 交给 spring 进行管理
* @Service
* 某个书籍层 交给 spring 进行管理
* @Repository
* 标记那个组件 交给 spring 进行管理
* 上面三个都是Component的子类
* @Component
* 以上四个都代表 当前类 交给Spring容器进行管理
*/
@Controller
public class HelloController {
// 以前 浏览器发送请求 http://localhost:8080/hello.action?methodName=hello
// 请求地址 浏览器发送请求 http://localhost:8080/helloReq
// 此处是下面hello2的简写版
@RequestMapping("/helloReq")
public String hello(){
System.out.println("hello springmvc。。。");
// /hello.jsp
return "hello";
}
}
hello.java
<%--
Created by IntelliJ IDEA.
User: zjjt
Date: 2022/8/17
Time: 20:33
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>
SpringMVC 你好
</body>
</html>
换一下
运行结果如图所示:
二、Springmvc之helloword实现
1.pom依赖
2.springmvc.xml配置
3.web.xml
4.开发
@controller
@requestMapping
HelloController.java
package com.zking.ssm.controller;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
/**
* @author 敢敢
* @site www.javajwj.com
* @company xxx公司
* @create 2022-08-17 20:21
*/
/*
* 被controller标记的类 会交给 spring 进行管理
* @Controller
* 某一个业务类 交给 spring 进行管理
* @Service
* 某个书籍层 交给 spring 进行管理
* @Repository
* 标记那个组件 交给 spring 进行管理
* 上面三个都是Component的子类
* @Component
* 以上四个都代表 当前类 交给Spring容器进行管理
*/
@Controller
public class HelloController {
// 以前 浏览器发送请求 http://localhost:8080/hello.action?methodName=hello
// 请求地址 浏览器发送请求 http://localhost:8080/helloReq
// 此处是下面hello2的简写版
@RequestMapping("/helloReq")
public String hello(){
System.out.println("hello springmvc。。。");
// /hello.jsp
return "hello";
}
@RequestMapping("/hello2")
public ModelAndView hello2(HttpServletRequest req){
ModelAndView mv = new ModelAndView();
// 这个就等价于上面的return
mv.setViewName("hello");
// 传递数据
mv.addObject("msg","success。。。");
return mv;
}
}
hello.jsp
<%--
Created by IntelliJ IDEA.
User: zjjt
Date: 2022/8/17
Time: 20:33
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>
</body>
</html>
运行结果如图所示:
三、SpringMVC的工作原理
1.浏览器发送请求(http://localhost:8080/helloReq)
到中央控制器DispatcherServlet
2.中央控制器DispatcherServlet会通知处理映射器HandlerMapping找到处理器适配器HandlerAdapter
3.执行HandlerAdapter,返回值ModelAndView(模型视图)回传给DispatcherServlet
作用:①可以指向最终的跳转路径
②可以传递数据
4.视图解析器viewResolver会对 返回值ModelAndView进行渲染,得到view视图对象
5.最后DispatcherServlet会将view视图对象返回给用户
HelloController.java
package com.zking.ssm.controller;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
/**
* @author 敢敢
* @site www.javajwj.com
* @company xxx公司
* @create 2022-08-17 20:21
*/
/*
* 被controller标记的类 会交给 spring 进行管理
* @Controller
* 某一个业务类 交给 spring 进行管理
* @Service
* 某个书籍层 交给 spring 进行管理
* @Repository
* 标记那个组件 交给 spring 进行管理
* 上面三个都是Component的子类
* @Component
* 以上四个都代表 当前类 交给Spring容器进行管理
*/
@Controller
public class HelloController {
// 以前 浏览器发送请求 http://localhost:8080/hello.action?methodName=hello
// 请求地址 浏览器发送请求 http://localhost:8080/helloReq
// 此处是下面hello2的简写版
@RequestMapping("/helloReq")
public String hello(){
System.out.println("hello springmvc。。。");
// /hello.jsp
return "hello";
}
@RequestMapping("/hello2")
public ModelAndView hello2(HttpServletRequest req){
ModelAndView mv = new ModelAndView();
// 这个就等价于上面的return
mv.setViewName("hello");
// 传递数据
mv.addObject("msg","success。。。");
return mv;
}
}
hello.jsp
<%--
Created by IntelliJ IDEA.
User: zjjt
Date: 2022/8/17
Time: 20:33
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>
SpringMVC 你好
${msg}
</body>
</html>
运行结果如图所示:
四、CRUD执常用注解及返回值
BookController.java
package com.zking.ssm.controller;
import com.zking.ssm.biz.BookBiz;
import com.zking.ssm.model.Book;
import com.zking.ssm.util.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author 敢敢
* @site www.javajwj.com
* @company xxx公司
* @create 2022-08-17 22:57
*
* @RequestMapping 加在 类上面,称窄化路径,其实就相当于 包 的概念
*/
@Controller
@RequestMapping("/book")
public class BookController {
@Autowired
private BookBiz bookBiz;
// http://localhost:8080/book/list
@RequestMapping(value = "/list",method = RequestMethod.GET)
@GetMapping
public String hello(HttpServletRequest req){
System.out.println("hello springmvc。。。");
PageBean pageBean = new PageBean();
pageBean.setRequest(req);
Map map = new HashMap();
String bname = req.getParameter("bname");
map.put("bname",bname);
List<Map> maps = this.bookBiz.listPager(map, pageBean);
req.setAttribute("lst",maps);
return "hello";
}
@RequestMapping("/add")
public String add(Book book){
// 这两个的区别,一个有if判断,一个没有if判断,因为我们有的时候只传了一列值,
// 但是另外一列没有传,它有值也会变为没有值,所以要用第二个
// this.bookBiz.insert(book);
this.bookBiz.insertSelective(book);
return "redirect:/book/list";
}
@RequestMapping("/edit")
public String edit(Book book){
this.bookBiz.updateByPrimaryKeySelective(book);
return "redirect:/book/list";
}
@RequestMapping("/del/{bid}")
public String del(@PathVariable("bid") Integer bid){
this.bookBiz.deleteByPrimaryKey(bid);
return "redirect:/book/list";
}
}
hello.jsp
<%--
Created by IntelliJ IDEA.
User: zjjt
Date: 2022/8/17
Time: 20:33
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
SpringMVC 你好
${msg}
<hr>
${lst}
<c:forEach items="${lst}" var="l">
${l.bid}
${l.bname}
${l.price}<hr>
</c:forEach>
</body>
</html>
index.jsp
<%--
Created by IntelliJ IDEA.
User: zjjt
Date: 2022/8/17
Time: 23:23
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>
<a href="${pageContext.request.contextPath}/book/list?bname=圣墟">查询所有</a>
<a href="${pageContext.request.contextPath}/book/add?bid=2&bname=sb&price=9.9">增加</a>
<a href="${pageContext.request.contextPath}/book/edit?bid=2&bname=suibian&price=9.7">修改</a>
<a href="${pageContext.request.contextPath}/book/del/2">删除</a>
</body>
</html>
运行结果如图所示:
当我们点击查询所有的时候如图所示:
数据库
其他的都没有问题我就不一一演示了
常用注解
1.@controller
2.@requestMapping
这四个等价于上面这个
查询方法:@GetMapping=@RequestMapping(value = "/list",method = RequestMethod.GET)
修改方法:@PostMapping
删除方法:@DeleteMapping
新增方法:@PutMapping
3.@PathVariable
4.@autowised 属于spring的注解
返回值处理
String 对应你跳转的页面
ModelAndView 及可以传跳转的页面还可以传你携带的参数
转发于重定向的设置
转发:“hello”转发到 /hello.jsp
“forward:hello”转发到 /hello.jsp
重定向: "redirect:/hello" 重定向到 .../项目名/hello
五、静态资源映射
创建类,放入一张图片进去
index.jsp
运行一下图片会出不来
springmvc-servlet.xml 加了这一行
在去运行看看有没有图片如图所示:最终图片就会出来
六、总结
1.Springmvc简介
web层框架:基于mvc设计模式
视图层框架:可以向用户渲染并且展示数据
控制层框架:接收浏览器发送的请求,找到对应的适配器进行处理
2.SpringMVC的工具原理
1.DispatcherServlet:中央控制器
2. HandlerMapping:处理器映射器
3.HandlerAdapter:处理器适配器
4.ModelAndView:模型视图
5.ViewResolver:视图解析器
6.view:视图对象
①浏览器发送请求,由DispatcherServlet接收
②DIspatcherServlet通过HandlerMapping找到对应的HandlerAdapter
③执行HandlerAdapter,返回结果ModelAndView给DispatcherServlet
④DispatcherServlet找到ViewResolver对于ModelAndView进解析
⑤解析后会得到view视图对象,然后展示给用户
3.Springmvc的使用步骤
①pom依赖
②Springmvc.xml的配置
1.开启动态代理、定义base-package、开启注解驱动
2.配置视图解析器(InternalResourceViewResolver、prefix、subfix)
3.静态资源配置(如果不做配置,那么*.png会被当成是一个请求,而不是图片)
4.常用的注解及结果集
@controller:标记当前controller交给Spring进行管理
@requestMapping:
作用于类:窄化路径,相当于包的概率
作用于方法:标记为处理浏览器请求处理方法
可以细化,分别对应增删改查的四个注解
查询:@getMapping 修改:@postMapping 增加:@putMapping 删除:@deleteMapping
@pathVariable:路径传参 /book/delete/2
结果集:
返回值:
String:就是配置跳转的页面-->prefix+返回值+subfix
ModelAndView:
setViewName(“可以设置最终的跳转页面路径”)
addObject(“”,“”)可以向前台传递参数
转发于重定向的设置
默认是转发
重定向设置:"redirect:/book/list"