SpringMVC---02---SpringMVC工作流通(详细图文)、使用注解进行SpringMVC开发

5 SpirngMVC工作流程图文

5.1 SpringMVC执行流程图

在这里插入图片描述
ps:

  • 前端控制器也就是DisPatcherServlet。
5.2 SringMVC工作原理图

在这里插入图片描述
相关路径的具体文字说明:

1. DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心,用户发来请求,DispatcherServlet接收请求并拦截请求。

2. HandlerMapping是处理器映射器,被DispatcherServlet调用,HandlerMapping根据请求Url查找Handler。

3. HandlerExcuter 表示具体的Handler,其主要作用是根据url查找控制器。

4. HandlerExcuter 会将一些解析后的信息返回给DispatchServlet,例如解析控制器映射等。

5. HandlerAdapter 表示处理器适配器,其按照特定的顺序去执行Handler。

6. Handler让具体的Controller去执行。
7. 返回一个具体执行信息给HandlerAdapter,如ModelAndView。

8. HandlerAdapter返回一个具体的ModelAndView给DispatcherServlet.

9. DispatcherServlet把ModelAndView传给视图解析器解析HandlerApater传递过来的逻辑视图名。

10. ViewResolver将解析完的逻辑视图名传给DispatcherServlet.

11. Diapatcher根据视图解析器返回的逻辑视图名,去调用具体的视图。

12. 最终将视图呈现给用户。

重新写了HelloSpringMVC项目,发现了几个问题:

  • 在Controller中写setViewName的时候只是写对应页面的名字。因为在springmvc-servlet.xml中对ModelAndView设置了默认添加前缀和后缀。
  • 在springmvc-servlet.xml中配置bean的时候,相关的conrtonl类对应的id是\页面名.

6 使用注解进行SpringMVC开发

6.1 编写web.xml文件,配置DispatcherServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
<!--    配置DispatcherServlet-->
	<!--注册Servlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        <!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->    
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!--所有请求都会被DispatcherServlet拦截-->    
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

注意事项:

  • 注意web.xml的版本问题,一定是要最新版的
  • 映射路径不能是/* 会导致报错404,因为.jsp无限循环。
  • 要在web.xml中配置DispatcherServlet。
  • 启动级别为1,数字越小启动越早。和服务一起启动。

6.2 编写SpringMVC对应的springmvc-servlet.xml配置文件:

在这个配置文件中要达到的目的:

  • 让IOC的注解生效
  • 静态资源过滤:HTML、JS、CSS、图片、视频。。。

为了支持基于注解的IOC,设置了自动扫描包的功能

<?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
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--自动扫描包,让指定包下的注解生效,由IOC容器统一管理-->
    <context:component-scan base-package="com.swrici.controller"/>
    <!--让Spring MVC不处理静态资源-->
    <mvc:default-servlet-handler />

    <!--
        支持mvc注解驱动
        在Spring中一般采用@RequestMapping注解来完成映射关系
        要想使@RequestMapping 注解生效
        必须向上下文中注册DefaultAnnotationHandlerMapping和
        一个AnnotationMethodHandlerAdapter实例
        这两个实例分别在类级别和方法级别处理
        而annotation-driven 配置帮助我们自动完成上述两个实例的注入。
    -->
    <mvc:annotation-driven />
	//配置前缀后缀,让从ModelAndView中返回的页面名加上前缀后缀
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

这个文件是固定的格式。

6.3 编写继承Controller的类(作为例子需要)
@Controller
@RequestMapping("/HelloController")
public class MyController {
	//真实访问地址:localhost:端口号/HelloController/hello
    @RequestMapping("/hello")
    public String hello(Model model){
        //封装数据,向模型中添加属性msg和值,可以在JSP页面中取出并渲染
        model.addAttribute("msg","Hello,SpringMVCAnnotation");
        return "hello";//返回视图名称,会被视图解析器处理转变成对应的页面名
    }
}

6.4 要注意的地方
  • @Controller 注解是为了让Spring IOC容器初始化时自动扫描到
  • @RequestMapping是为了映射请求路径,这里因为类和方法上都有映射所以访问时应该时/HelloController/hello;
  • 方法中声明的Model是为了把Action中的数据带到视图中。
  • 方法返回的结果是视图的名称hello,再加上配置文件的前后缀就变成了/WEB-INF/jsp/hello.jsp

步骤小结:

  • 创建一个web项目。
  • 导入相应的jar包。
  • 编写web.xml,在其中注册DispatcherServlet的servlet。
  • 编写springmvc-servlet.xml配置文件,这个文件是为了将工作交给Spring管理。
  • 创建对应的控制类,controller
  • 最后完善前端视图和conrtoller之间的对应
  • 测试运行调试

使用SpringMVC必须的三大组件:

  • 处理器映射器
  • 处理器适配器
  • 视图解析器

处理器映射器和处理器适配器由Spring容器负责,要做对应的xml文件中开启注解驱动<mvc:annotation-driven />annotation-driven 帮助我们自动完成上述两个实例的注入。我们需要的是自己在xml配置文件中编写视图解析器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值