本笔记是在学习狂神说的SpringMVC时创建。
SpringMVC学习笔记
1.什么是SpringMVC?
+ Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。
+ Spring 框架提供了构建 [Web](https://baike.baidu.com/item/Web/150564) 应用程序的全功能 MVC 模块。
+ 使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。
2.使用SpringMVC的好处
- Lifecycle for overriding binding, validation, etc,易于同其它View框架(Tiles等)无缝集成,采用IOC便于测试。* 它是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架。
3.SpringMVC执行原理
SpringMVC的核心是DispatcherServlet中心控制器
Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能 ,DispatcherServlet 是一个实际的Servlet (它继承自HttpServlet 基类)。
SpringMVC执行流程图
1.用户发起请求,中心控制器接到用户请求,调用处理器映射器(HanderMapping)处理用户请求,
在通过调用HanderExecution解析用户请求查找Handler,最后返回给中心控制器。
2.中心控制器得到用户请求的Handler,调用处理器适配器,找到用户请求的Controller。
3.Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView,然后返回中心控制器。
4.中心控制器在调用ViewResolver,根据Controller返回的信息生成View返回给用户。
1.第一个SpringMVC程序
搭建环境
创建Maven项目
添加wed框架支持
进行SpringMVC配置
1.在pom中添加SpringMVC依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
</dependencies>
2.在wed.xml中进行相关配置
<!-- 注册DispatcherServlet-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 关联一个springmvc的配置文件-->
<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>
<!--设置配置DispatcherServlet匹配所有请求-->
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3.创建关联配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
</beans>
4.在配置文件中
<!--添加处理映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--添加处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--添加视图解析器-->
<mvc:view-resolvers>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</mvc:view-resolvers>
5.编写Controller业务代码
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class controller implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//ModelAndView 模型和视图
ModelAndView mv=new ModelAndView();
//封装对象,放在ModelAndView中。Model
mv.addObject("msg","SpringMVC-------");
//封装要跳转的视图,放在ModelAndView中
mv.setViewName("hello");
return mv;
}
}
6.在Spring容器中注册Bean
<bean id="/tets" class="com.chao.wed.controller"></bean>
7.创建需要跳转jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
//取出封装对象中的值
${msg}
</body>
</html>
8.配置tomcat启动测试 得到效果
2.使用注解开发SpringMVC
准备工作:
创建一个新的Maven模块
添加wed框架支持
-
在wed.xml中配置SpringMVC
<servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 关联一个springmvc的配置文件:【servlet-name】-servlet.xml--> <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>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
2.创建SpringMVC的配置文件
<!-- 自动扫描包 --> <context:component-scan base-package="com.chao.controller"/> <!-- 不处理静态资源 --> <mvc:default-servlet-handler /> <mvc:annotation-driven /> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 后缀 --> <property name="suffix" value=".jsp" /> </bean>
3.创建controller
package com.chao.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; //使用注解定义类为Controller @Controller public class controller { @RequestMapping("/hello") public String servlet(Model model) { model.addAttribute("msg","hello---"); return "hello"; } }
@RequestMapping是为了映射请求路径;
方法中声明Model类型的参数是为了把Action中的数据带到视图中;
方法返回的结果是视图的名称hello;
4.创建jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
5.配置tomcat 启动测试
3.RequestMapping
@RequestMapping
-
@RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。
@Controller public class TestController { @RequestMapping("/hello") public String test(){ return "hello"; } }
4.RestFul 风格
概念
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。
功能
资源:互联网所有的事物都可以被抽象为资源
资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。
分别对应 添加、 删除、修改、查询。
测试
-
在新建一个类 RestFulController
@Controller public class RestFulController { }
-
使用 @PathVariable 注解,让方法参数的值绑定到一个URI上。
package com.chao.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class controller { @RequestMapping("/hello") public String servlet(Model model) { model.addAttribute("msg","hello---"); return "hello"; } }
-
我们来测试请求查看下
我们来修改下对应的参数类型,再次测试
package com.chao.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class controller {
@RequestMapping("/hello/{a}/{b}")
public String servlet(@PathVariable int a,@PathVariable int b, Model model)
{
int res=a+b;
model.addAttribute("msg",res);
return "hello";
}
}
使用method属性指定请求类型
指定请求的类型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等
我们来测试一下:
-
增加一个方法
@Controller public class controller { @RequestMapping(value = "/hello/{a}/{b}",method = RequestMethod.POST) public String servlet(@PathVariable int a,@PathVariable int b, Model model) { int res=a+b; model.addAttribute("msg",res); return "hello"; } }
-
使用浏览器地址栏进行访问默认是Get请求,会报错405:
将POST修改为GET就可以了;
@Controller
public class controller {
@RequestMapping(value = "/hello/{a}/{b}",method = RequestMethod.GET)
public String servlet(@PathVariable int a,@PathVariable int b, Model model)
{
int res=a+b;
model.addAttribute("msg",res);
return "hello";
}
}
另外,可以使用组合注解
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@Controller
public class controller {
@PostMapping("/hello/{a}/{b}")
public String servlet(@PathVariable int a,@PathVariable int b, Model model)
{
int res=a+b;
model.addAttribute("msg",res);
return "hello";
}
}
也是可以的!
在实际开发中是用组合注解比较多!!!