SpringMVC笔记(概述、组成)

概述

SpringMVC和Struts2的异同

共同点

  • 都是基于MVC编写的表现层框架
  • 底层都是原始ServletAPI
  • 处理请求都是使用一个核心控制器

不同点

  • SpringMVC入口是Servlet,Struts是基于Filter
  • SpringMVC是单例的,Struts是多例
  • SpringMVC更加简洁

SpringMVC入门

导入jar包

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-webmvc</artifactId> 
    <version>5.2.6.RELEASE</version>
</dependency>

<!--如果要使用原始的ServletAPI就需要导入以下两个jar包-->
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
    <scope>provided</scope>
</dependency> 

<dependency> 
    <groupId>javax.servlet.jsp</groupId> 
    <artifactId>jsp-api</artifactId> 
    <version>2.2</version> 
    <scope>provided</scope>
</dependency>

编写web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <!--更改SpringMVC自带的过滤器将编码转为UTF-8-->
  <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>

  <!--配置前端控制器-->
  <servlet>
    <servlet-name>mvc01</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--服务器启动初始化时就应该初始化该参数-->
    <init-param>
      <!--Spring XML文件的位置-->
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:mvc01.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>mvc01</servlet-name>
    <!--Servlet可以用/代表根目录下所有资源,但Filter不行-->
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

编写Spring XML文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--扫描Component注解-->
    <context:component-scan base-package="com.zzxx"/>

    <!--注册默认处理请求-->
    <mvc:annotation-driven/>
    
    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>


</beans>

编写控制类

@Controller
@RequestMapping("test")//请求的uri以/test开头
public class MyController {
	@RequestMapping(value = "hi",method = RequestMethod.POST)//请求的uri为/test/hi,post请求方式
	public String hello(
	@RequestParam(value = "username") String name,
    //将请求参数中名为age的参数赋值给形参a,如果找不到或者转化失败就赋值为默认值0(没有默认值时赋值为null)
	@RequestParam(value = "age",required = false,defaultValue = "0")Integer a){
		System.out.println("post");
		System.out.println(name+","+a);
		return "success";
	}

	@RequestMapping(value = "/hi",method = RequestMethod.GET)
	public String hi(String username,String age){
		System.out.println("get");
		System.out.println(username+","+age);
        //由于在Spring XML中配置过视图解析器,这里最后会变成/success.jsp
		return "success";
	}

}

组成

五大核心组件

DispatcherServlet

前端控制器,是SpringMVC的核心组件,负责接收请求,将请求任务分发给其他组件,再返回响应

HandlerMapping

处理器映射器,负责根据用户的请求路径找出对应的处理器,让前端控制器发送请求给处理器

Handler

处理器,由开发人员创建,自定义怎样处理数据和返回什么响应

HandlerAdapter

处理器适配器,处理器映射器找到的处理器可能是接口、实现类、方法等,这些处理器执行的方法各不相同,通过适配器来找出对应的执行方法,并执行处理器

View Resolver

视图解析器,根据处理器返回的数据,生成对应的视图,先生成页面地址,再生成View对象,最后渲染视图并让前端控制器返回给前端

执行流程

 

 总结

  • SpringMVC使用注解@RequestMapping找到对应的执行器
  • 处理器的Request请求由处理器适配器传入
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值