ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringMVC-01-HelloSpringMVC

2020-06-06 22:52:20  阅读:300  来源: 互联网

标签:01 SpringMVC 视图 HelloSpringMVC ModelAndView DispatcherServlet servlet hello


1、所需依赖

相关说明都写在了注释上

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.bing</groupId>
    <artifactId>SpringMVC</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>SpringMVC-01-servlet</module>
    </modules>

    <dependencies>
<!--        junit:4.12-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
<!--        MVC的包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
<!--        servlet2.5-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>

<!--        支持jsp中的一些表达式的-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

</project>

2、HelloSpringMVC

2.1、跟着官网敲一遍

1、配置 DisparateServlet,web.xml

  • 作用:它用来管理所有的Controller层的servlet,让我们以后的servlet都不要配置了
<!--1.注册DispatcherServlet-->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc-servlet.xml</param-value>
    </init-param>
    <!--启动级别-1-->
    <load-on-startup>1</load-on-startup>
</servlet>

<!--/ 匹配所有的请求;(不包括.jsp)-->
<!--/* 匹配所有的请求;(包括.jsp)-->
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

2、配置bean

  • 处理映射器

  • <!--添加 处理映射器-->
     <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    
  • 处理适配器

    <!--    添加 处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
  • 视图解析器

<!--视图解析器:DispatcherServlet给他的ModelAndView-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
    <!--前缀-->
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <!--后缀-->
    <property name="suffix" value=".jsp"/>
</bean>

3、编写Controller,并把它配置到Spring中

public class ControllerDemo01 implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //ModelAndView 模型和视图
        ModelAndView mv = new ModelAndView();

        //封装对象,放在ModelAndView中。Model
        mv.addObject("msg","HelloSpringMVC!");
        //封装要跳转的视图,放在ModelAndView中
        mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
        return mv;
    }
}
  • 装配到Spring中
<bean id="/hello" class="com.bing.controller.ControllerDemo01"/>

4、测试

5、遇到的问题

发现代码都没写错,缺报错很可能是idea项目结构中没导入jar包的问题,为什么会出现这个问题呢?因为我们一上来建的是普通的maven项目,所以idea不会自动添加依赖到项目中

像jar问题之前还遇到过servlet的jar包和Tomcat不匹配的情况

而此时解决方案是:在项目结构中手动导入

问题解决~

2.2、解释原理

0、知识补充

全部的SpringMVC是围绕着DispatcherServlet进行展开的,翻译是调度Servelt

0.1、分析url

其实url是由很多部分组成:举例子:

http://localhost:8080/SpringMVC/hello

片段 作用
http/https 网络协议
localhost:8080 服务器域名
SpringMVC 表示部署在服务器上的站点
hello hello表示控制器

1、DispatcherServlet

  • HanderMapping:由DispatcherServlet调用,来查找所对应的hander

  • HanderExcute:用HanderMapping调用,来查找具体的控制器,本例中就是hello,并携带它返回给DispatcherServlet

  • HanderAdapter:DispatcherServlet调用HanderAdapter,其按照特定的规则去执行HandlerHandler让具体的Controller执行 在由这个适配器通过hander携带的信息调用对应的控制层controller,携带或者解析控制层传过来的信息在传递给DispatcherServlet,如ModelAndView

  • 视图解析器:DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。

    视图解析器将解析的逻辑视图名传给DispatcherServlet。

    DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。

    最终视图呈现给用户。

2.3、运行过程

1、客户访问url,之间请求DispatcherServlet

说明:<url-pattern>/</url-pattern> 中填/ 和/* 的区别:

  • / 代表很处理所有/ 下的controller
  • / * 范围更大包括了jsp html css···

所以我们选用 ‘/’

2、到springmvc-servlet.xml中寻找

找到这个控制器(/hello)封装成handler对象返回给DispatcherServlet

3、通过HanderAdapter找到controller并执行

返回ModleAndView给DiapatcherServlet

4、携带ModleAndView访问视图过滤器

视图过滤器渲染页面又返回给DiapatcherServlet

2.3、精简一下

  1. 配web.xml

  2. BeanNameUrlHandlerMapping
    
  3. SimpleControllerHandlerAdapter
    
  4. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
  5. <!--    控制器-->
        <bean id="/hello" class="com.bing.controller.ControllerDemo01"/>
    

标签:01,SpringMVC,视图,HelloSpringMVC,ModelAndView,DispatcherServlet,servlet,hello
来源: https://www.cnblogs.com/bingstudy/p/13057478.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有