Servlet:接受请求,获取表单参数,业务处理(调用service,dao层代码),做出响应
在web中唯一可以接受请求的是Servlet
SpringMvc组件
- 前端控制器 (中央处理器)
Dispatcher Servlet
:程序中所有的请求由Dispatcher Servlet接受
- 处理器映射器
HandlerMapping
:用于请求的分发
- 控制器
Controller
:用于编写控制层的代码
- Model And View :用于响应(非前后端场景下:用于前后端分离)
搭建SpringMvc框架
- 创建web工程
- 引入jar包
- 添加Springmvc的核心配置文件(.xml文件)
- 添加配置
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 初始化参数: 在DispatcherServlet中完成Spring容器的加载 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<!-- 处理器映射器:指定请求分发的方式 -->
<!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> -->
<!-- 处理器适配器:进行控制器类的适配 -->
<!-- <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> -->
<!-- 注解形式的映射器适配器 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 组件扫描管理所有的控制器类 -->
<context:component-scan base-package="com.controller"></context:component-scan>
@Controller
public class TestController {
/*
* @Controller:
* 支持组件扫描管理类对象
* @RequestMapping:用来进行请求的映射
*/
@RequestMapping("test")
public void test(){
System.out.println("进入控制器方法");
}
}
Springmvc框架工作流程
- 由前端控制器接受请求
- 通过处理器映射器和适配器进行请求的开发(当前应用的是注解开发:由
@RequestMapping
注解进行请求的映射)
- 在控制器类中方法里实现业务处理
- 做出响应
接收请求:
@CrossOrigin:支持跨域
* 使用CrossOrigin注解实现跨式时,要求RequestMapping注解中必须指定能够接收的请求方式
*
* @Controller:支持组件扫描管理类对象
*
* @RequestMapping:用来进行请求的映射
* 1.RequestMapping注解支持的属性:value method
* 2.RequestMapping注解可以写在类的上方,也可以写在方法上方。如果写在类的上方,代表
* 往当前类中方法发请求时的根路径。写在方法上方的就属于子路径。
响应:
响应:数据 json
* @ResponseBody注解:作用就是将方法返回的数据写入到response对象中,相当于response.getWeiter
* 输出流向前端返数据。这个注解使用之后,不需要走springmvc框架的视图解析器(Model And View)。
* 自动实现json转换
*
* 一个控制器中可以由多个方法,对应多个请求的处理
* 一般建议一个实体的相关需求,都写在一个控制器中
参数:
控制器方法的参数:
* 1. 默认支持的参数类型:
* HttpServletRequest 请求对象
* HttpServletResponse 响应对象
* HttpSession 会话对象
* 2.简单类型的参数绑定
* 控制器方法的形参要和请求参数的名称完全一致,类型匹配
* 如果方法参数名和提交过来的参数名不一致,可以使用@RequestParam注解进行参数的匹配
* 3. 前端请求采用json格式传数据,控制器方法使用实体类去接收,同时使用
* @RequestBody注解将json对象转换成java对象
* 注意:只有post形式的请求,才支持以json格式传递数据
* 4. 前端采用formdata的形式提交数据
* 页面中的所有要提交的数据都套在form标签中,而且每一个要提交的表单元素必须设定name
* 以formdata形式提交form,要求form必须是特殊的类型 enctype="multipart/form-data"
* 配置文件上传解析器
* 控制器方法直接用实体类去接收参数,要求实体类中的属性名要和页面form表单的元素的name一一对应
<!-- 配置文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
<property name="maxUploadSize" value="5242880" />
</bean>