本笔记是在学习狂神说的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依赖
org.springframework
spring-webmvc
5.1.9.RELEASE
2.在wed.xml中进行相关配置
DispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:SpringMVC-Servlet.xml
1
DispatcherServlet
/
3.创建关联配置文件
4.在配置文件中
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
7.创建需要跳转jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
//取出封装对象中的值
${msg}
8.配置tomcat启动测试 得到效果
2.使用注解开发SpringMVC
准备工作:
创建一个新的Maven模块
添加wed框架支持
-
在wed.xml中配置SpringMVC
DispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:SpringMVC-Servlet.xml 1 DispatcherServlet / 2.创建SpringMVC的配置文件
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" %>
Title
${msg}
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";
}
}
也是可以的!
在实际开发中是用组合注解比较多!!!