3. SpringMVC组件解析

3.1 SpringMVC的执行流程


用户发送请求至前端控制器DispatcherServlet。
DispatcherServlet收到请求调用HandlerMapping处理器映射器。
处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
DispatcherServlet调用HandlerAdapter处理器适配器。
HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
Controller执行完成返回ModelAndView。
HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
ViewReslover解析后返回具体View。
DispatcherServlet根据View进行染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户。

3.2 SpringMVC注解解析


@RequestMapping作用:用于建立请求URL和处理请求方法之间的对应关系位置:
类上,请求URL的第一级访问目录。此处不写的话,就相当于应用的根目录
方法上,请求URL的第二级访问目录,与类上的使用@ReqquestMapping标注的-级目录一起组成访问虚拟路径属性
value: 用于指定请求的URL。它和path属性的作用是一样的
method:用于指定请求的方式
params: 用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样
age:
params ={“accountName”},表示请求参数必须有accountName
params =["moeny!100”},表示请求参数中money不能是100

3.3 SpringMVC注解解析


1.mvc命名空间引入命名空间: xmIns:context=" http://www,springframeworkorg/schema/context!
xmIns :mvc=" http://www.springframework.org/schema/mvc"约束地址: http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframeworkorg/schema/mvc http://www.springframework.org/schema/mve/spring-mvc.xsd 2.组件扫描SpringMvc基于spring容器,所以在进行springMvc操作时,需要将controller存储到spring容器中,如果使用@Controller注解标注的话,就需要使用 <context:component-scan base-package=“com.jian.controller"/>进行组件扫描

3.4 SpringMVC的XML配置解析


1.视图解析器SpringMvc有默认组件配置,默认组件都是 DispatcherServlet.properties配置文件中配置的,该配置文件地址 org/springframework/web/servlet/DispatcherServlet.properties,该文件中配置了默认的视图解析器,如下:org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver翻看该解析器源码,可以看到该解析器的默认设置,如下:REDIRECT_URL_PREFIX = "redirect :" --重定向前缀FORWARD_URL_PREFIX = "forward:" --转发前缀(默认值)prefix = ""; --视图名称前缀suffix = ""; --视图名称后级

3.5知识要点


SpringMVC的相关组件
前端控制器: DispatcherServlet
处理器映射器: HandlerMapping
处理器适配器: HandlerAdapter
处理器: Handler
视图解析器: View Resolver
视图: View
SpringMVC的注解和配置
请求映射注解:@RequestMapping
视图解析器配置:REDIRECT_URL_PREFIX = "redirect:"
FORWARD URLPREFIX = "forward:"
prefix="";
suffix="";
packagecom.jian.controller;
​
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
​
@Controller
@RequestMapping( "/user")//模块
publicclassUserController {
    //请求地址 http://localhost:8080/spring_jian_mvc_war_exploded/xxx/quick?name=xxx
    //访问xxx模块下的quick模块
    @RequestMapping(value="/quick",method=RequestMethod.GET,params= {"username"})//quick是映射地址
    publicStringsave(){
        System.out.println("Controller save running...");
        return"success";
    }
}


<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd">
​
​
    <!--Controller的组件扫描-->
    <context:component-scanbase-package="com.jian">
        <context:include-filtertype="annotation"expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
​
    <!--配置内部资源视图适配器-->
    <beanid="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--/jsp/success.jsp-->
        <propertyname="prefix"value="/jsp/"></property><!--前缀-->
        <propertyname="suffix"value=".jsp"></property><!--后缀-->
    </bean>
​
</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jian绘梨衣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值