(lks)SpringMvc底层+基础+自动装配

吾生也有涯,而知也无涯。这篇文章主要讲述(lks)SpringMvc底层+基础+自动装配相关的知识,希望能为你提供帮助。
Springmvc

  • Springmvc的运行概念
  • Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。处理器是你的应用中注解了@Controller和@RequestMapping的类和方法,Spring为处理器方法提供了极其多样灵活的配置。Spring 3.0以后提供了@Controller注解机制、@PathVariable注解以及一些其他的特性,你可以使用它们来进行RESTful web站点和应用的开发。

  • 配置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">
        < !-- 注册SpringMvc的DispatcherServlet-->
        < 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>
< !--启动级别-1-->
< load-on-startup> 1< /load-on-startup>
        < /servlet>
        < !-- / 匹配所有请求:不包括jsp-->
        < !-- /* 匹配所有请求:包括jsp-->
        < servlet-mapping>
                < servlet-name> springmvc< /servlet-name>
                < url-pattern> /< /url-pattern>
        < /servlet-mapping>
< /web-app>
  • 配置完web.xml后我们的classpath后的会报错,
  • 因为没有配置classpath的xml文件,所以配置springmvc-servlet.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"
              xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
      < !-- 添加 处理映射器-->
        < 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="https://www.songbingjia.com/WEB-INF/jsp/"/>
                < !--后缀-->
                < property name="suffix" value="https://www.songbingjia.com/android/.jsp"/>
        < /bean>
< /beans>




  • 第一步用户发送请求
  • 前端控制器  代码戴web.xml中,





  • 此时请求都会在才段代码




  • 委托请求给处理器----controller


  •     返回视图和模型
  • 模型装数据,视图跳转对象





具体解决第二个问题流程:File--Prodect Structer -- Artiface --  选择到你的项目--然后添加Lib包(idea)



  • 简要分析执行流程
  • 在url上,是请求了位于服务器localhost8080上的Srpingmvc站点的hello服务器


  • HandlerMapping为处理映射。DispatcherServlet的调用
      根据URL来查询我们的处理器,然后返回给DispatcherServlet


  • 解析到对应的Handler后,开始由HandlerAdapter适配器处理。


  • HandlerAdapter会根据Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。


  • 处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View。


  • ViewResolver会根据逻辑View查找实际的View。


  • DispaterServlet把返回的Model传给View。


  • 通过View返回给请求者(浏览器)

  • 升入学习SpringMVC配置
  • 配置请求分发控制器(Spring自己配置好的)
< servlet>
        < servlet-name> springmvc< /servlet-name>
        < servlet-class> org.springframework.web.servlet.DispatcherServlet
< /servlet-class>
  • 注册他的请求
< servlet-mapping>
        < servlet-name> springmvc< /servlet-name>
        < url-pattern> /< /url-pattern>
< /servlet-mapping>
  • 注意“/”和“/*”的区别
  • 在Springmvc中
  • / 只匹配所有的请求,不会去匹配jsp页面(一般都使用这个)
  • /*  还会配置一个jsp,如果加了jsp会进行无线套娃
  • 配置Spring的配置文件
< init-param>
        < param-name> contextConfigLocation< /param-name>
        < param-value> classpath:sprintmvc-servlet.xml< /param-value>
< /init-param>
  • 通过contextconfiglocation绑定一个类
  • classpath:当前配置文件(绑定)


  • 设置服务器启动时,这个同事也启动
< load-on-startup> 1< /load-on-startup>
  • 通过Spring配置controller类
< ?xml version="1.0" encoding="UTF-8"?>
< beans xmlns="http://www.springframework.org/schema/beans"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        < !-- 添加 处理映射器-->
        < 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">
< !--  以上是springmvc必须配置的东西-->
< !-- -->
                < !--前缀-->
                < property name="prefix" value="https://www.songbingjia.com/WEB-INF/jsp/"/>
                < !--后缀-->
                < property name="suffix" value="https://www.songbingjia.com/android/.jsp"/>
        < /bean>








        < !--Handler-->
        < bean id="/hello" class="com.lyd.controller.HelloController"/>
< /beans>
  • 写入java类,继承controller接口,然后重写方法。
  • 然后调用//ModelAndView 模型和视图
  • 通过ModelAndView调用获取(addObect)和(setViewName)
  • addObect:是一个键值对,name  和  传入的参数
  • setViewName  是表示跳转的jsp界面(注意看xml中是否添加了后缀)
package com.lyd.controller;




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




import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;




//注意:这里我们先导入Controller接口
public class HelloController implements Controller {




        public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
                //ModelAndView 模型和视图
                ModelAndView mv = new ModelAndView();




                //封装对象,放在ModelAndView中。Model
                //模型存数据(返回时携带的数据)
                mv.addObject("msg","HelloSpringMVC!");




                //封装要跳转的视图,放在ModelAndView中
                //视图调整到hello这个页面(在xml中配置了前缀和后缀
                mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
                return mv;
        }




}
  • 把java文件配置到xml中
< !--Handler-->
< bean id="/hello" class="com.lyd.controller.HelloController"/>
  • 写一个jsp文件
< html>
< head>
        < title> LYD< /title>
< /head>
< style>
      div h1{
                color: aquamarine;
                text-align: center;
        }
< /style>
< body>
< div>
        < h1> ${msg}< /h1>
< /div>




< /body>
< /html>
  • 运行结果
  • 最后包目录







  • 自动装配


  • 首先配置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">
        < !-- 注册SpringMvc的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:sprintmvc-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>
< /web-app>




  • 然后配置springmvc-servlet.xml文件在resouces文件下
  • 用context和mvc进行配置,context对包进行自动导入
  • mvc让其可以自动配置springmvc的东西
  • < !-- 默认的资源过滤-->
  • < mvc:default-servlet-handler/>
  • < !--完成注解生效和自动注入 -->
  • < mvc:annotation-driven/>
< ?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: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.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">
        < !--自动扫描包 -->
        < context:component-scan base-package="com.lyd.controller"/>




        < !-- 默认的资源过滤-->
        < mvc:default-servlet-handler/>
        < !--完成注解生效和自动注入 -->
        < mvc:annotation-driven/>
        < !-- 添加 处理映射器-->
        < 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="https://www.songbingjia.com/WEB-INF/jsp/"/>
        < !--后缀-->
        < property name="suffix" value="https://www.songbingjia.com/android/.jsp"/>
        < /bean>








< /beans>


  • 开始编写java类
  • 此时注意就不用继承Controller的接口可以直接注释解决
  • Model  作为传入的参数,可以直接获得信息内容
  • 此时也可以不用setViemName方法,并且不用在后面注释  < bean id="/hello" class="com.lyd.controller.HelloController"/>
  • 直接使用@RequestMapping("/hello")注释搞定
@Controller
public class HelloController {




        //请求url:项目的映射地址,项目名字为:/HelloController/hello        类的名字+mapping的名字
        @RequestMapping("/hello")
        //model可以直接取出并且渲染
        public String hello(Model model){
                //封装数据,像项目中添加msg与值,可以在jsp中取出并且渲染
              model.addAttribute("msg","HelloSpringMvc");
                return "hello"; //被视图解析器解析
        }




}


  • 注意导入lib包(具体放法见上面问题二的解决方法)
  • 运行结果展示





























































【(lks)SpringMvc底层+基础+自动装配】


    推荐阅读