一、Spring MVC的原理 和 四大组件

 SpringMVC 和Servlet 作用一样,我们先看下一个处理请求名为“control ”的Servlet 

@WebServlet("/ ")
               // 1、DispatchServlet 用于接收所有请求
public class DispatchServlet extends HttpServlet {

      protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
               // 2、解析判断具体哪个请求,往哪个方法跳转
          String result =res.getparmenter("control")
	      if(result.equals("example1")){
               // 3、调用具体的方法
               example1();
        }


          public void example1(){
              System.out.println("方法example1执行")
              此处一般写结果返回页面的代码
            }
	}
}

流程:

          接收所有请求  --  判别具体哪个请求 --- 调用具体方法 --- 结果返回页面

SpringMVC 原理 和Servelt 执行流程一样,四个流程对应四大核心组件

 

 SpringMVC四大重要组件

 

      1.1 DispatcherServlet : (前端控制器),请求入口:接收捕获所有请求    (如果过滤规则 配置为 “/ ”,不接收 jsp  页面)

      1.2 HandlerMapping: (处理器映射器) 请求派发,(负责URL请求和 控制器建立一一对应的关系)解析请求.判断具体哪个请求,希望要执行哪个具体的方法.

      1.3 HandlerAdapter: (处理器适配器) 负责调用具体的方法(方法称为Controller 或 Handder).

      1.4 ViewResovler:(视图解析器).解析结果,准备跳转到具体的物理视图(页面文件)

 

Spring MVC 原理和理解 【百战】

 

 二、SpringMVC 使用配置

web.xml    进行初始化配置(其实是配置前端控制器 DispatcherServlet)

<!-- 配置SpringMVC -->
	<servlet>
		<servlet-name>ssm-crm</servlet-name> <!-- 1、名字可以随便起,内容固定 -->
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>    <!-- 2、SpringMVC 详细配置文件的位置和名字 -->
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:Spring/springmvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup><!-- springmvc启动优先级,为整数0或者大于0springMVC随着容器启动而启动,小于0,则在第一次请求进来的时候启动,固定 -->
	</servlet>
	<servlet-mapping>
		<servlet-name>ssm-crm</servlet-name>
		<url-pattern>/</url-pattern> <!-- 3、配置拦截规则,什么样的请求能进来 配置为 “/ ”,不接收 jsp  页面 -->
	</servlet-mapping>



扩展:
    在web.xml中可以配置字符编码过滤器,解决中文编码

springmvc.xml      详细配置

<?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:p="http://www.springframework.org/schema/p"
	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-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
	<!-- 1、配置Controller的注解包扫描,原理上是使用注解的都需要包扫描 -->
	<context:component-scan base-package="com.crm.controller" />
	
	<!-- 2、配置注解驱动,固定 -->
	<mvc:annotation-driven />
    
        <!-- 3、放行静态资源 -->
        <mvc:resources location="/images/" mapping="/images/**"/> <!-- 所有URL请求格式为mapping="/images/**"的,去location="/images/"中找 -->
        <mvc:resources location="/css/" mapping="/css/**"/>
        <mvc:resources location="/js/" mapping="/js/**"/>    

	<!-- 配置视图解析器 -->
	<bean	class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 前缀 -->
		<property name="prefix" value="/WEB-INF/jsp/" />
		<!-- 后缀 -->
		<property name="suffix" value=".jsp" />
	</bean>
</beans>

Controller  程序

@Controller
public class ExampleController {

	@RequestMapping("Example")
	public String Example() {
            System.out.println("执行了Example")
            return "执行了Example"
    }
}

结果:

       在地址栏输入 http://项目名/Example 控制台就会出现

"执行了Example"

       同时,由于设置了return,会自动跳转到一个空页面,页面内容为

执行了Example

 

 

 

 二、SpringMVC 使用的一些特性

1、SpringMVC 中 Contrlooer 的方法接收参数,需要啥就写啥,你要你敢写,SpringMVC就敢自动给你传进来

      需要默认保证参数名称和请求中传递的参数名相同,SpringMVC 自动为我们做了很多工作

如:

    前端:

<html>
......
<form action ="Example" method="post">
    <input type ="text" name ="name"/>
    <input type ="text" name ="age"/>
    <input type ="submit" value ="提交"/>
......
</html>

Spring MVC 原理和理解 【百战】

 Controller  程序

说明:之前写了一个User的实体类 属性为name 和age 


@Controller
public class ExampleController {

	@RequestMapping("Example")
	public String Example(User user,String name,int age) {
            System.out.println("user")
            return "执行了Example"
    }
}

结果:

   我们需要一个实体类,直接在接收参数写上一个实体类参数,SpringMVC 会自动把 接收的name 和age 参数自动封装成user

控制台输出:

[name 张三 age 18]  张三 18

 

相关文章:

  • 2022-01-18
  • 2021-12-01
猜你喜欢
  • 2021-11-28
  • 2022-12-23
  • 2022-02-13
  • 2018-03-01
  • 2021-09-06
  • 2021-07-28
相关资源
相似解决方案