Springmvc入门介绍

一、Springmvc架构
Springmvc 属于表现层的框架 , 作用就是controller(控制层,替换以前的servlet),它是 Spring 框架的一部分 , 我们可以从 Spring 的整体结构中看出来:
Springmvc入门介绍_第1张图片
Spring MVC 处理请求的流程
Springmvc入门介绍_第2张图片
具体执行步骤如下:
1、(图1、2步骤)首先用户发送请求————> 前端控制器,前端控制器根据请求信息(如 URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分
2、(图3、4、5步骤)页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在 Spring Web MVC 中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个 ModelAndView(模型数据和逻辑视图名)
3、(图6、7步骤)前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染
4、(图8步骤)前端控制器再次收回控制权,将响应返回给用户

Spring MVC架构图
Springmvc入门介绍_第3张图片
spring mvc的执行过程:客户端发送请求到DispatcherServlet,把相应的请求给HandlerMapping(然后给Adapter进行处理(比如到哪个界面,数据返回给哪个界面,对数据要做哪些处理
会返回一个modelandview(数据和视图),把这个modelandview给DispatcherServlet 给视图渲染器(viewResolver)
再返回到DispatcherServlet,最后才能看到好的网页))

核心对象:第一个对象:DispatcherServlet
第二个:HandelerAdapter
第三个:视图渲染器

二、开发一个Springmvc
1.导入jar包(核心jar包spring-webmvc-3.2.13.RELEASE.jar)
Springmvc入门介绍_第4张图片
2.配置核心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:mvc="http://www.springframework.org/schema/mvc"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    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">

②配置controller(两种)

    <!--name是url匹配地址(第一种controller单一配置)-->
     <bean name="/index.html" class="com.offcn.controller.UserController"></bean>
    <!--扫描controller下所有的包(第二种)-->
    <context:component-scan base-package="com.offcn.controller" />

③配置由网页进入到控制层(两种)

     <!--当你的请求地址是index.html的时候,就会到UserController这个类(第一种)-->
    <bean name="/index.html" class="com.offcn.controller.UserController"></bean>
    <!--开启注解驱动(第二种)-->
    <mvc:annotation-driven />

④完成视图的对应

    <!--完成视图的对应-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--开始配置jsp包的路径-->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

3.将核心配置文件配置到web.xml

<?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">
    <!--配置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>
        </init-param>
        <!--立刻加载-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

4.控制层的配置
第一种方式(非注解):

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class UserController implements Controller {
    /**
     * 当客户端发送请求的url地址匹配这个类时运行这个方法-->HandlerMapping
     * @param httpServletRequest
     * @param httpServletResponse
     * @return
     * @throws Exception
     */
    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        //跳转页面
        return new ModelAndView("doIndex");
    }

第二种方式(注解)(通过注解不同的传参方式)

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import java.util.Map;


@Controller
@RequestMapping()
public class UserController {
 /**
     * 注解的方式
     * @param userName 页面参数(required代表参数可有可无,默认为true)
     * @return
     */
/*    @RequestMapping(value = "index",method = RequestMethod.GET)
    public String index(@RequestParam(value ="userName",required = false) String userName){
        System.out.println(userName);
        return ("doIndex");
    }*/

      @RequestMapping(value = "/index/{pid}")
      public String index(@PathVariable String pid){
          System.out.println(pid);
          return "doIndex";
      }
      //把controller的数据传到Jsp中
    @RequestMapping(value = "toDoIndex1")
      public ModelAndView toDoIndex(String userName){
          ModelAndView modelAndView = new ModelAndView();
          modelAndView.addObject("userName",userName);
          //把跳转的页面放到modelAndView里
          modelAndView.setViewName("doIndex");
          return modelAndView;
      }
      @RequestMapping(value = "toDoIndex2")
      public String toDOIndex(String userName, Map<String,Object> map){
          map.put("userName",userName);
          return "doIndex";
      }
      //常用版
      @RequestMapping(value = "toDoIndex")
       public String toDoIndex(String userName, Model model){
          model.addAttribute("userName",userName);
          return "doIndex";
      }

      //常用版
      @RequestMapping(value = "toLoading")
    public String toLoading(
            @RequestParam(value = "userName",required = false)String userName,
            @RequestParam(value = "password",required = true) String password){
          return "doIndex";
    }

}

总结:web.xml(加载前段控制器,引入核心配置文件) 用户发送一个请求----->(当请求有匹配的controller)—>到实体bean(controller)---->返回一个modelAndView----->springmvc-servlet.xml---->视图渲染器----->网页(jsp接收)

你可能感兴趣的:(JAVA框架,Springmvc)