SpringMVC
SpringMVC
学习来源于狂神说,欢迎大家去看看
Web on Servlet Stack (spring.io)
简介
- 轻量级,简单易学
- 高效,尽于请求响应的MVC框架
- 与Spring兼容性好,无缝结台
- 约定优于配置
- 功能强大: RESTful. 数据验证、格式化、木地化、主题等
- 简洁灵活
Servlet简单回顾
编写servlet类去继承HttpServlet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//todo 获取前端参数
String name = req.getParameter("method");
System.out.println(name);
if ("add".equals(name)) {
req.getSession().setAttribute("msg", "执行了add方法");
}
if ("delete".equals(name)) {
req.getSession().setAttribute("msg", "执行了delete方法");
}
//todo 调用业务层
//todo 视图转发或重定向
req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}在web.xml去引入该servlet
1
2
3
4<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
</servlet>对该servlet进行路径映射
1
2
3
4<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>第一个MVC程序
-> SpringMVC02
在pom中导入所需的依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>jakarta.servlet.jsp</groupId>
<artifactId>jakarta.servlet.jsp-api</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</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>编写控制器controller
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/**
* todo 编写一个类实现Controller接口
*/
public class HelloControl implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//todo 创建模型和视图
ModelAndView mv = new ModelAndView();
//todo 封装要跳转的视图,放在ModelAndView,也就是要访问的页面,在下面会进行前缀后缀也就是完整路径的配置
mv.setViewName("hello");
//todo 封装对象,放在ModelAndView中
mv.addObject("msg", "HelloSpringMVC");
return mv;
}
}创建springmvc-servlet.xml进行bean配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<!--1. 处理器映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--2. 处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--todo 3. 视图解析器:DispatcherServlet给他的ModelAndView-->
<!-- 1. 获取ModelAndView的数据
2. 解析ModelAndView的视图名字
3. 拼接视图名字,找到对应的视图 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--因为我们是使用的BeanNameUrl 的处理器 所以就要配置一个这个,将编写的controller实现类注入-->
<bean id="/hello" class="com.example.HelloControl"/>在web.xml将第二步的servlet配置引入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<!--todo 配置DispatchServlet:这个是SpringMVC的核心:请求分发器、前端控制器-->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--todo 配置文件-->
<!--说明context是在哪-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--运行级别 1 就是和服务器一起运行-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<!--/ 匹配所有的请求;(不包括.jsp)-->
<!--/* 匹配所有的请求;(包括.jsp)-->
<url-pattern>/</url-pattern>
</servlet-mapping>在测试的时候要注意:tomcat10用不了只能用tomcat9
重点:SpringMVC执行原理_破晓.K的博客-CSDN博客
使用注解开发SpringMVC
-> SpringMVC03
与第一个mvc程序的区别为可以省去处理器映射器和处理器转发器的编写,使用注解引擎去自动装载上述两个转发器,视图解析器保留不变
1
2
3
4
5
6
7
8
9
10
11
12
13
14<!--todo 1. 自动扫描包,让指定包下的注解生效,由IOC容器统一管理-->
<context:component-scan base-package="com.example.controller"/>
<mvc:default-servlet-handler/>
<!--todo 2. 开启注解引擎,会自动转载处理器适配器和处理器映射器-->
<mvc:annotation-driven/>
<!--todo 3. 视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>web.xml原封不动
编写Controller实现类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
/*todo 注解方式开发: Control为控制器*/
//代表该类会被Spring接管
public class HelloControl {
/*RequestMapping为请求URL*/
public String hello(Model model) {
model.addAttribute("msg", "helloSpringMVCAnnotation");
return "hello";
}
}Controller
-> SpringMVC04
RestFul
-> SpringMVC04
资源定位和资源操作风格,互联网所有事物都可被抽象成风格
特点:
- 简洁
- 高效
- 安全
小黄鸭调试法
书:程序员修炼手册
重定向和转发
-> SpringMVC04
接收请求参数和数据回显
-> SpringMVC04
解决乱码问题
-> SpringMVC04
JSON
-> SpringMVC05
工具:
jackson
fastjson
使用步骤
- 导包
- 配置解决乱码问题
- 书写代码
SSM整合
1 | CREATE DATABASE ssmbuild; |
遇到问题操作步骤:
- 查看这个bean注入是否成功!
- Junit 单元测试,看我们的代码是否能够查询出来结果!
- 问题,一定不在我们的底层,是spring出了问题!
- springMVC, 整合的时候没调用到我们的service层的bean;
- applicationContext. xml没有注入bean
- web. xml中,我们也绑定过配置文件!发现问题,我们配置的是Spring -mvc . xml,这里面确实没有service bean,所以报空指针
狂神说SpringMVC05:整合SSM框架 - 爵岚 - 博客园 (cnblogs.com)
AJAX
-> SpringMVC06
前端请移步
拦截器
-> SpringMVC07
文件上传
未实践
Maven Repository: commons-fileupload » commons-fileupload » 1.4 (mvnrepository.com)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Dong!
评论