首先我们来看一下servlet的处理请求的方式:

一:SpringMVC简介:

  一)SpringMVC中的几个重要组件

  1.DispatchServlet:

      前端控制器,mvc模式中的c,是整个流程的控制中心,由他来调用其他组件来处理用户的请求,它的存在降低了组件之间的耦合性(组件可以随意的替换和自定义),

      接受所有的请求(配置成 / 不包含jsp)

  2.HandlerMapping:

      解析请求格式,判断具体要去调用哪个Controller,他回去提取请求地址中的一些字段这个字段就是我的controller名字(比如:localhost:8080/hello,提取到hello)

      有多种映射方式:配置文件方式,实现接口方式,注解方式等等(下边的HelloWord中实现了两种方式:实现接口的方式和接口的方式)

  3.Handler:后端处理器;也就是我们定义的controller类

  4.HanelerAdapter:负责调用具体的Controller,其实是他来执行调用controller

  5.ViewResovler:视图解析器,解析结果,准备跳转到那个具体的物理视图

  SpringMVC流程图:

  二)SpringMVC容器

  是Spring容器的子类,他可以获取Spring容器中的内容,Spring容器中不能获取SpringMVC中的内容,

  他是在Dispatcher初始化的时候就完成创建。也可以通过下边代码来设置在tomcat启动的时候就创建

<load-on-startup>1</load-on-startup>

  三)HelloWord实现:

    1.web.xml

    2.springmvc.xml

    3.controller

    4.pom.xml

    web.xml文件(无论xml方式还是注解方式web.xml都一样)

   <!--配置springmvc中的DispatcherServlet组件-->
<servlet>
<servlet-name>springmvc</servlet-name>
<!--这个DidpatcherServlet相当于我们servlet中的写的那个类,去拦截处理请求的作用-->
<!--创建他的时候他会创建一个自己的SpringMVC的一个容器ConfigurableApplicationContext-->
<!--<servlet-name>springmvc</servlet-name>-->
<!--中的name是springmvc。其实系统默认去找的配置文件名称也是这个+servlet.xml-->
<!--spring-servlet.xml-->
<!--但是他有会默认在src下去找-->
<!--在这里我们修改他的默认路径和名称-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--拦截处理jsp之外的资源-->
<url-pattern>/</url-pattern>
</servlet-mapping>

      (一)xml方式配置(不常用,但是更完整表达mvc组建的使用)这种方式一个controllerl类里边只能写一个请求

        一)方式一:映射器和处理器为(BeanNameUrlHandlerMapping 和 SimpleControllerHandlerAdapter)

   <!--将controller配置到springMVC容器中-->
<bean class="com.xpl.controller.HelloController" id="/hello"/>--------------注意:hello前边的/
   <!--配置handlerMapping-->
   <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
   
<!--配置处理器HandlerAdapter-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <!--配置视图解析器viewResolver-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse spn) throws Exception {
System.out.println("hello springMVC控制器");
//也可以通过构造器来给视图命名
//ModelAndView hello = new ModelAndView();
     ModelAndView hello = new ModelAndView("main");
     hello.setViewName("main");
     return hello; }
}

        二)方式二:映射器和处理器为(SimpleUrlHandlerMapping 和 SimpleControllerHandlerAdapter)

<!--将controller配置到springMVC容器中-->
<bean class="com.xpl.controller.HelloController" id="helloController"/>
<!--配置handlerMapping-->
  方式一和方式二区别在于property中的参数不一样一个是mappings一个是urlMap
  方式一:
<!--<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >-->
<!--<property name="urlMap">-->
<!--<map>-->
<!--key是解析出来的控制器逻辑名 value-ref是上边配置的controller就是要调用的controller-->
<!--<entry key="hello" value-ref="helloController"/>-->
<!--</map>-->
<!--</property>-->
<!--</bean>-->
  方式二:
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!--key表示请求参数名 value表示上边配置进来的Bean-->
<prop key="hello">helloController</prop>
</props>
</property>
</bean>
<!--配置处理器HandlerAdapter-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <!--配置视图解析器viewResolver-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse spn) throws Exception {
System.out.println("hello springMVC控制器");
//也可以通过构造器来给视图命名
//ModelAndView hello = new ModelAndView();
     ModelAndView hello = new ModelAndView("main");
     hello.setViewName("main");
     return hello; }
}

      (二)注解方式配置映射器和处理器为(RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter

<!--包扫描-->
<context:component-scan base-package="com.xpl" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!--配置视图解析器viewResolver-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
@Controller
public class HelloController {
@RequestMapping("/hello")
public ModelAndView Hello(HttpServletRequest Request, HttpServletResponse Response) throws Exception {
System.out.println("hello springMVC控制器");
ModelAndView hello = new ModelAndView("main");
return hello;
}
}

  注意:

    使用xml方式实现的时候controller必须实现Controller类,并重写其中的方法HandlerRequest();

    使用注解的方式无需实现任何类,但是要在类上添加@Controller注解,方法上添加@RequestMapping("/hello")

  pom.xml文件

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

  四)简化配置

    将HandlerMapping 和 HandlerAdapter 两句合成一句

   <!--注意:是mvc那一个-->
<mvc:annotation-driven/>

  五):静态资源访问

    <!--location:静态资源路径-->
<!--mapping:表示访问的url格式-->
<!--访问 http://8080/err/err.html-->
<mvc:resources mapping="/js/**" location="/WEB-INF/js/"/>
<mvc:resources mapping="/css/**" location="/WEB-INF/css/"/>
<mvc:resources mapping="/images/**" location="/WEB-INF/images/"/>
<mvc:resources mapping="/err/**" location="/WEB-INF/err/"/>

  

  六):乱码问题解决(web.xml中配置字符编码过滤器)

<filter>
<filter-name>encodingFilter</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>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  

  

SpringMVC-1-(简介及HelloWord)的更多相关文章

  1. 1.SpringMVC的简介和环境搭建

    SpringMVC的简介: SpringMVC 和 Struts一样是一个MVC框架,和Spring无缝连接,和struts2类似, Spring MVC属于SpringFrameWork的后续产品, ...

  2. SpringMVC系列(一)SpringMVC概述和搭建SpringMVC的第一个helloWord入门程序

    一.SpringMVC 概述 • Spring为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一 • Spring3.0 后全面超越 Struts2,成为最优秀的 MVC ...

  3. [原创]java WEB学习笔记96:Spring学习---Spring简介及HelloWord

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. SpringMVC框架简介

    1.简介 SpringMVC也叫Spring Web  mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 01.Spring mvc的优缺点 M ...

  5. springMvc架构简介

    什么是spring 关于spring的定义无论是从官方还是市面上已经很多能够清晰明了的做出解释了.我姑且简单定义它为一个轻量级的控制反转(IoC)和面向切面(AOP)的容器,Java 开发框架,至于控 ...

  6. SpringMVC的简介和工作流程

    一.简介 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.Spri ...

  7. Spring-1-(简介及HelloWord)

    一:Spring简介 Spring 框架宗旨:不重新发明技术,让原有技术使用起来更加方便. Spring核心功能: 1.AOP:面向切面编程 2.Ioc/Di:控制反转/依赖注入 3.声明式事务 Sp ...

  8. springMVC容器简介和执行流程

    先来看一下,初始化的大体流程:  然后,我们再来看一下,我们的控制器DispatcherServlet的类图及继承关系.  系统启动的时候根据配置文件创建spring的容器, 首先是发送http请求到 ...

  9. [SpringMVC-初始] 初始SpringMVC

    关于SpringMVC的简介 A.SpringMVC概述 作用: SpringMVC框架是SpringFramWork中实现了MVC架构模式的轻量级子框架 用于将WEB层进行职责解耦,松散的耦合可插拔 ...

随机推荐

  1. PHPStorm配置Xdebug官方文档

    1 配置Xdebug 下载Xdebug 下载与您的PHP版本兼容的Xdebug扩展,并将其保存在该php/文件夹中. php/文件夹 的位置是在安装PHP引擎期间定义的. 如果您使用的是AMP软件包, ...

  2. docker的安装及项目部署

    Making Docker and Deployment Process Step: set up your docker environment build a image of activeMQ ...

  3. CSS 重置默认样式

    1. 概述 1.1 说明 css重置样式主要是为了让各个浏览器的CSS样式有一个统一的基准,使HTML元素样式在跨浏览器时有一致性的效果. 备注:浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的 ...

  4. 洛谷P5110 块速递推 [分块]

    传送门 思路 显然可以特征根方程搞一波(生成函数太累),得到结果: \[ a_n=\frac 1 {13\sqrt{337}} [(\frac{233+13\sqrt{337}}{2})^n-(\fr ...

  5. Python中加入中文注释

    最近开发学习Pyton,当加入中文注释时,运行程序报错: File SyntaxError: Non-ASCII character , but no encoding declared; see h ...

  6. Confluence 6 升级自定义的站点和空间应用你的自定义布局

    当你升级你的 Confluence 到其他一个主要的 Confluence 发行版本的时候,你需要手动应用你修改过的任何全局或者空间级别的布局.除非有特殊的声明,针对一些非主要的 Confluence ...

  7. Java的家庭记账本程序(F)

    日期:2019.2.17 博客期:034 星期日 我先配置了Android的相关环境,先试着做了Hello World的测试,但是却出现了很严重的问题,问题如下: Unable to get curr ...

  8. IO伪异步实现

    伪异步的实现,通过多线程,也会阻塞,等待连接 1.创建TcpServer类 package com.cppdy.tcp; import java.io.IOException; import java ...

  9. 条件为空的sql你们写过么 (我也是醉了碰到了这种需求,当时还真有点o((⊙﹏⊙))o懵逼.jpg)

    需求描述:单表,父子关系,有个统一的主键dict_id和一个父级别的parent_id,查询父级别的字典名称,parent_id是空,本渣用的是mybatis奥!!! 废话不多说,直接上代码mappe ...

  10. 原码、补码、反码的概念和java数的存储方式

    原码:用符号位和数值位表示一个带符号数,整数符号->0,负数符号->1,数值一般用二进制形式表示 [+10011]原=00010011    [-10011]原=10010011 反码:正 ...