当前位置:主页 > 查看内容

SpringMVC

发布时间:2021-06-25 00:00| 位朋友查看

简介:一、简介 1.介绍 SpringMVC是实现MVC的轻量级Web框架底层封装了servlet 2.特点 1.轻量级简单易学2.约定优于配置3.与Spring兼容性好无缝结合5.支持直接一个方法对一个请求6.支持数据的自动封装7.自动支持JSON的转换 二、SpringMVC组件以及流程 1.前端控制器Di……

一、简介

1.介绍

SpringMVC是实现MVC的轻量级Web框架,底层封装了servlet

2.特点

1.轻量级,简单易学

2.约定优于配置

3.与Spring兼容性好,无缝结合

5.支持直接一个方法对一个请求

6.支持数据的自动封装

7.自动支持JSON的转换

二、SpringMVC组件以及流程

1.前端控制器(DispatcherServlet)

作用是将请求分发到不同的处理器,DispatcherServlet实际是一个Servlet(它继承自HttpServlet基类)

2.三大组件(SpringMVC初始化是自动加载三大组件)

 处理器映射器:HandlerMapping
			负责根据URL寻找对应的处理器方法
	
* 处理器适配器:HandlerAdapter
			负责真正的去调用某个处理器方法

* 视图解析器:ViewResolver
			负责将逻辑视图转换成物理视图

3.SpringMVC执行流程(11步)
执行流程

三、XML配置文件

1.spring-mvc.xml
(1)、约束

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation=" http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
         http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd">
</beans>

(2)、核心配置

<!--开启注解组件扫描-->
    <context:component-scan base-package="com.itheima.web"/>
    <!--开启mvc注解支持-->
    <mvc:annotation-driven conversion-service="conversionService"/>

(3)、其他配置

  • 自定义视图解析器
<!--自定义视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>  <!--拼接的前缀-->
        <property name="suffix" value=".jsp"/>             <!--拼接的后缀-->
     </bean>
  • 静态资源开启映射
	<!--静态资源手动映射-->    【了解】  
	<mvc:resources mapping="/img/**" location="/img/"/>


    <!--静态资源自动映射-->     【推荐】
    <mvc:default-servlet-handler/>

2.web.xml

  • 配置前端控制器
<!--配置前端控制器-->
	<servlet>
		<servlet-name>DispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>3</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>DispatcherServlet</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>
	</filter>

	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

四、常用注解

1、@Controller 【常用】 :将controller交给ioc容器

2、@RequestMapping【常用】 : 建立url和方法映射

	位置: 1.类上:一级路径
		  2.方法上:二级路径 
		  	常用属性:
		  		value/path: 指定当前方法的url地址,一个方法可以绑定多个地址
		  		 params:限定前端请求,必须携带指定参数
		  		 method:限定请求方式:get、post、put、delete等等

3、@RestController 【常用】:相当于@Controller + @ResponseBody

4、@RequestBody【常用】 :将前端参数中json自动封装为对应对象

5、@ResponseBody :将对象转为指定格式json

6、@RequestParam【常用】 :接收前端请求参数

	常用属性
            required:默认值true,要求前端必须提供参数,否则报错
            defaultValue:给参数提供默认值
            name:接收指定前端的参数名(前端name和方法形参不同时可使用)

7、@RequestHeader【了解】 : 接收请求头数据

	用法:@RequestHeader("请求头的key名称")

8、@DateTimeFormat 【了解】 : 日期格式化

参数:(pattern = "yyyy-MM-dd"

五、请求

① 简单类型

② 对象类型

③ 数组类型

④ 集合类型【扩展】
(当后端以集合类型接收参数时,需搭配@RequestParam来使用)

@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobbies){}

⑤日期类型

前端

<form action="/dateParam" method="post">
    生日:<input type="text" name="birthday"> 【格式:1999-01-15】<br>
    <input type="submit" value="日期类型">
</form>

controller

@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd") Date birthday){}

⑥文件上传

  1. web.xml中导入坐标
<!--文件上传工具包-->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>
  1. 在spring-mvc.xml中配置文件上传解析器
<!--
        文件上传解析器  id="multipartResolver" 这个值是固定的
    -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 限制文件大小,单位B  -->
        <property name="maxUploadSize" value="10000000"/>
    </bean>
  1. 前端
<form action="" method="post" enctype="multipart/form-data">
    姓名:<input type="text" name="username"> <br>
	头像:<input type="file" name="picFile"> <br>
</form>
  1. controller
@RequestMapping("/fileUpload")
public String fileUpload(String username, MultipartFile picFile){
    picFile.transferTo(new File("E:\\"+picFile.getOriginalFilename())); // 文件io复制
    return "success";
}

六、响应

①.转发(不携带参数)

  1. servlet原生API[了解]
@RequestMapping("/requestApi")
public void requestApi(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws ServletException, IOException {
    request.getRequestDispatcher("/success.jsp").forward(request,response);
}
  1. forward关键字【偶尔】
(此方式一般用于:转发路径不需要配置的视图解析器的前后缀,用该方式确定明确的路径~~~@RequestMapping("/forwardApi")
    public String forwardApi(){
        //转发
        return "forward:/index.jsp";
    }
  1. 简单方式【常用】
(配置了视图解析器情况下,只返回页面名称,自动拼接前后缀)
@RequestMapping("/quick")
    public String quick(){
        return "success";
    }

②.转发时携带参数

  1. servlet原生API【了解】
@RequestMapping("/requestApi2")
    public void requestApi2(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws ServletException, IOException {
    	request.setAttribute("message","这是动态信息--");
		request.getRequestDispatcher("/success.jsp").forward(request,response);
}
  1. ModelAndView【了解】
@RequestMapping("/requestApi2")
    public ModelAndView requestApi2(ModelAndView modelAndView){
        modelAndView.addObject("message","------这是模拟数据----"); 
        modelAndView.setViewName("success"); 					
        return modelAndView;
    }
  1. Model【常用】
@RequestMapping("/requestApi2")
    public String requestApi2(Model model){
        model.addAttribute("message","这是模拟数据");
        return "success";
    }

③.重定向

  1. servlet原生API【了解】
@RequestMapping("/responseApi")
    public void responseApi(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws IOException {
        response.sendRedirect(request.getContextPath() + "/index.jsp");
    }
  1. redirect关键字【常用】
@RequestMapping("/redirectApi")
    public String redirectApi() throws IOException {
        return "redirect:/index.jsp";
    }

七、RESTful

1.介绍

Restful是一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件,主要用于前后端分离的架构

2.四个常用请求方式

  • GET(获取)、POST(新建)、PUT(更新)、DELETE(删除)

八、拦截器

1.介绍

SpringMVC的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理

2.编写拦截器(API)

public class MyIntercepter1 implements HandlerInterceptor {
    /*
        预处理方法:拦截请求
        参数:
             request
             response
        	 handler:用户访问的目标方法
        返回结果:
            true:放行
            false:拦截
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    	代码1
        return true;
    }
    /*
        后处理:可以获取处理器方法返回结果【ModelAndView】
        参数:
            request
            response
            handler:目标处理器方法
            modelAndView:该目标方法执行后返回结果
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
    	代码2
    }
    /*
        视图渲染完处理的:资源释放
            参数:
                request
                response
                handler
                ex:异常
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
    	代码3
    }
}

3.配置拦截器

<!--拦截器配置-->
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/target"/>
        <bean class="com.itheima.web.intercepter.MyIntercepter1"></bean>
    </mvc:interceptor>
</mvc:interceptors>

4.拦截器链

开发中拦截器可以单独使用,也可以同时使用多个拦截器形成一条拦截器链。

开发步骤和单个拦截器是一样的,只不过注册的时候注册多个,注意这里注册的顺序就代表拦截器执行的顺序。
<!--拦截器配置-->
	<!--拦截器的执行顺序是先进后出-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/target"/>
            <bean class="com.itheima.web.interceptor.MyIntercepter1"></bean>
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/target"/>
            <bean class="com.itheima.web.interceptor.MyIntercepter2"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
;原文链接:https://blog.csdn.net/weixin_48903544/article/details/115645004
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐