首先我们来看一下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. Jquery分享插件

    效果图如下: 代码如下: <!DOCTYPE HTML> <html style="padding-bottom: 54px;"> <head> ...

  2. 洛谷P3246 [HNOI2016]序列 [莫队]

    传送门 思路 看到可离线.无修改.区间询问,相信一定可以想到莫队. 然而,莫队怎么转移是个大问题. 考虑\([l,r]\rightarrow[l,r+1]\)时答案会怎样变化?(左端点变化时同理) \ ...

  3. ant 相关命令

    # jmeter-ant A Simple Ant project for JMeter Performance Test # Pre-Requisite* Java 1.7 or above* JM ...

  4. Confluence 6 Oracle 驱动输入你的数据库细节

    Confluence 的安装向导将会指导你一步一步的在 Confluence 中配置安装 Oracle 数据库. 使用 JDBC 连接(默认) JDBC 是推荐的连接你的 Confluence 到数据 ...

  5. 第九单元 利用vi编辑器创建和编辑正文文件

    vi编辑器简介  什么是vi vi编辑器的操作模式 vi编辑器的3种基本模式 在vi编辑器中光标的移动 移动光标位置的键与光标移动间的关系 进入插入模式 从命令行模式进入插入模式的命令 在命令行模式下 ...

  6. 高并发编程基础Synchronized与Volatile

    关键字Synchronized: 当使用Synchrnized (o) ,锁定 o 的时候,锁定的是 o 指向的堆内存中 new 出来的对象,而非 o 引用,当锁定 o 以后,一旦 o 指向了其他对象 ...

  7. python面向对象三大特性之封装

    一. 概述 定义:隐藏对象的属性和实现细节,仅对外提供公共访问方式 封装的原则:把不需要对外提供的内容都隐藏起来,提供公共的方法访问这些隐藏属性 二.封装手段 使用双下划线将属性和方法隐藏起来 cla ...

  8. Python_网络编程udp-飞秋自动攻击

    # 模拟一个接收数据import socketimport time def auto_hack(udp_socket, recv_msg, revc_ip, revc_port=2425): # 发 ...

  9. PHP中self和this的用法区别

    PHP支持类和面向对象结构,PHP的类的静态函数和变量不与任何特定类的实例相关联(换句话说,一个对象).请看:类与对象的区别. 相反,静态函数和变量与类定义本身相关联.换言之,一个类的所有实例都共享相 ...

  10. 来一个使用sysbench测试cpu性能的简单脚本

    #!/bin/bash for ((i=1; i<16; i++)); do sysbench cpu run --cpu-max-prime=10000 --threads=4 --time= ...