0.1概述
Spring MVC 是spring的一个模块,专门做web开发的。
好处:
1.基于MVC架构,功能明确,解耦合
2.容易理解,上手快,使用简单
3.作为spring框架的一部分,能够使用spring的ioc和aop,方便整合其他框架
官网:https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#spring-web
0.2web开发步骤
1.加入spring-webmvc依赖,间接把spring的依赖都加入到项目中
<!--springwebmvc依赖,间接包含spring的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
2.加入jsp、servlet依赖
<!--jsp依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--servlet依赖-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<scope>provided</scope>
</dependency>
3.在web.xml中注册dispatcherServlet(前端控制器)和字符集过滤器
前端控制器:负责接收用户请求,调用控制器对象,并把请求的处理结果显示给用户
<!--注册前端调度器-->
<servlet>
<servlet-name>myweb</servlet-name>
<servlet-class>org.springframework.web.servlet.dispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!--自定义springmvc.xml文件路径-->
<param-value>classpath:springmvc.xml文件路径</param-value>
</init-param>
<!--tomcat启动后创建对象的顺序,值为整数,越小越早-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--拦截请求路径-->
<servlet-mapping>
<servlet-name>myweb</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
字符集过滤器:处理中文乱码
<!--注册字符集过滤器处理中文乱码-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
1.使用扩展名方式:*.do,*.action,*.mvc等
2.使用斜杠"/*",表示拦截所有请求。但是访问静态资源会出现404
解决:
方法1.在springmvc配置文件中加入<mvc:default-servlet-handler>
方法2.在springmvc配置文件中添加<mvc:resources/>标签
//mapping:访问静态资源的uri地址;location:静态资源在你的项目中的目录位置
<mvc:resources mapping="/images/**" location="/images/" /> //找图片
注意:这两种方式会和RequestMapping注解有冲突,需要加上mvc:annotation-driven注解驱动。
4.创建控制器类
5.创建springmvc配置文件
(1)声明组件扫描器,指定@Controller注解所在的包名
<!--扫描controller层,加入到容器中-->
<context:component-scan base-package="com.bjpowernode.controller"/>
(2)声明视图解析器,处理视图
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
0.3常用注解
@RequestMapping:映射请求,可以在类和方法上定义
method=RequestMethod.请求方式
@RequestParam:绑定请求参数,参数前定义
value="属性名"
required=true|false,true(默认)没有携带该参数会报400错误
defaultValue="默认值"
@RequestBody:接收一个json对象的字符串,而不是一个json对象,所以使用ajax时指定contentType:"application/json",且为post请求
@ResponseBody:将处理器方法返回的对象,通过适当的转换器 转换为指定的格式之后,写入到响应体中,通常返回json或者xml
@RequestHeader:绑定请求头的属性值到处理方法的入参中,参数前定义
@RequestMapping("/handle")
public String handle(@RequestHeader("Accept-Encoding") String encoding)
@CookieValue:让处理器方法绑定某个Cookie值,参数前定义
@RequestMapping("/handle")
public String handle(@CookieValue(value="sessionid",required=false) String encoding)
0.4路径
后台:@requestMapping推荐路径都以"/"开头
前台:
方式1:开头不加斜杠
方式2:开头加"/"斜杠,在最前面加上${packContext.request.contextpath}
0.5请求流程
1.用户发送请求至前端控制器(dispatcherServlet)
2.前端控制器收到请求后,调用处理器映射器(HandlerMapping)
3.处理器映射器根据请求url找到具体的处理器(Handler),生成处理器对象及处理器拦截器(如果有则生成)一并返回给前端控制器
4.前端控制器调用处理器适配器(HandlerAdapter)
5.处理器适配器调用具体处理器
6.处理器执行完成返回ModelAndView
7.处理器适配器将ModelAndView返回给前端控制器
8.前端控制器将ModelAndView传给视图解析器(ViewResolver)进行解析
9.视图解析器解析后返回具体视图(View)给前端控制器
10.前端控制器给视图进行渲染
11.视图渲染完成后返回给前端控制器
12.前端控制器响应给用户
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。