一:开发流程
1.引入依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.4</version>
</dependency>
2.创建实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
private Integer id;
private String title;
private String author;
private Double price;
}
3.配置loc容器
创建:resources/spring/springmvc/springmvc-servlet.xml 1)在springmvc-servlet.xml中加入标签
4.写context:component-scan
<!-- 扫描放在容器中的包 -->
<context:component-scan base-package="com.dyit.spring.controller"/>
5.放行静态资源
<!-- 排除拦截(放行)静态资源 -->
<mvc:resources location="static/" mapping="static/**"/>
6.加上识别注解的mvc:annotation-driven
<!-- 识别注解 -->
<mvc:annotation-driven></mvc:annotation-driven>
到此容器配置完毕:
7.配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema
-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation
="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>spring-springmvc-hello</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--配置springmvc的servlet,DispatcherServlet -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 配置loc容器 -->
<param-value>classpath:spring/springmvc/springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<!-- 表示拦截所有的请求 -->
<url-pattern>
8.写controller
@Controller
public class BookController {
@RequestMapping("/findBook")
@ResponseBody
public Book findBook() {
Book book = new Book();
book.setTitle("水浒传");
return book;
}
}
8.启动main用postman测试,或者与前端页面连接进行前后端交互
二:涉及到的组件分析
1、前端控制器DispatcherServlet(不需要程序员开发),由框架提供,在web.xml中配置。 作用:接收请求,响应结果,相当于转发器,中央处理器。
2、处理器映射器HandlerMapping(不需要程序员开发),由框架提供。 作用:根据请求的url查找Handler(处理器/Controller),可以通过XML和注解方式来映射。
3、处理器适配器HandlerAdapter(不需要程序员开发),由框架提供。 作用:按照特定规则(HandlerAdapter要求的规则)去执行Controller。
4、控制器Controller(需要工程师开发) 注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。 作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。
5、视图解析器ViewResolver(不需要程序员开发),由框架提供 作用:进行视图解析,把逻辑视图名解析成真正的物理视图。 SpringMVC框架支持多种View视图技术,包括:jstlView、freemarkerView、pdfView等。
6、视图View(需要工程师开发) 作用:把数据展现给用户的页面 View是一个接口,实现类支持不同的View技术(jsp、freemarker、pdf等)
三:知识点总结
1.springmvc框架是什么?
它是基于java实现了MVC设计模式的请求驱动类型的轻量级web框架,通过将Model,View,Controller层分离,将web层进行解耦,将web应用分成清晰的几部分,简化了开发,减少了出错,方便了开发人员之间的配合。
2.springmvc的流程 (1)用户发送请求至前端控制器DispatcherServlet; (2)DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handler; (3)处理器映射器根据请求url找到具体的处理器Handler,生成处理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet; (4)DispatcherServlet 调用 HandlerAdapter处理器适配器,请求执行Handler; (5)HandlerAdapter 经过适配调用 具体处理器进行处理业务逻辑; (6)Handler执行完成返回ModelAndView; (7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet; (8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析; (9)ViewResolver解析后返回具体View; (10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中) (11)DispatcherServlet响应用户。
3.springmvc的优点 1).支持各种的视图技术,不仅仅局限于jsp; 2).支持各种请求资源的映射策略。 3).角色分配的很清晰:前端控制器,请求到处理器映射,处理器适配器,视图解析器。 4).与spring框架集成(如loc容器,Aop等)
4.常用的注解有哪些 @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户
5.SpingMvc中的控制器的注解一般用哪个?有没有别的注解可以替代?
答:一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。
6.springmvc的控制器是单例模式,有什么问题,要怎么解决?
答:在多线程访问的时候,和产生线程不安全问题,不能使用同步,会影响程序的性能。 解决:不在控制器中编写成员属性。
|