SpringMVC入门——day1

2022/3/28 23:29:29

本文主要是介绍SpringMVC入门——day1,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一 . MVC是什么

  MVC是一种 架构模式(软件设计规范),以 业务逻辑、数据、显示分离 的方法来组织代码。作用是降低了 视图与业务逻辑 的双向耦合

  Model(模型):数据模型,提供需要展示的数据和 对模型进行操作的各种功能,现在的开发中一般都分为:数据层 DAO 和 业务层 Service。

  View(视图):负责模型的展示,就是用户看得到的东西                                     (JSP)

  Controller(控制器):接受用户请求,委托给模型进行处理,处理完后把 返回的模型数据返回给视图,由视图负责展示,起到了调度的作用(Servlet)

 职责分析:

        Controller:获取表单数据,调用业务逻辑,转向指定的页面     

        Model:业务逻辑,保存数据的状态

        View:显示页面

   最典型的MVC就是 JSP + Servlet + javabean

二 . 回顾Servlet  

  写一个实现类继承 HttpServlet,重写 doGet和doPost方法

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取前端的参数
        String method = req.getParameter("method");
        if (method.equals("add")){
            req.getSession().setAttribute("msg","执行了add方法");
        }
        if (method.equals("delete")){
            req.getSession().setAttribute("msg","执行了delete方法");
        }
        //调用Service层

        //视图转发和重定向
        req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

  然后去 web.xml中注册和指定映射的路径

<servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>com.ma.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</servlet>

三 . 什么是SpringMVC

  Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。

  Spring的 web框架围绕 DispatcherServlet 来设计的

  执行流程:

        DispatcherServlet(前端控制器)接受并拦截用户的请求,

        根据对应请求找到对应的 Controller 处理器,

        处理器 调用业务层 并 返回信息给 DispatcherServlet(前端控制器)

        最后由 DispatcherServlet(前端控制器) 调用 视图解析器 找到对应视图,把数据渲染出来

  

 

   1 . 接收到请求后,先去 web.xml中找到 DispatcherServlet,接着读取init-pararm中的配置文件 pringmvc-servlet.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">

    <!--配置 DispatcherServlet:Spring的核心,请求分发器(前端控制器)-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <!--DispatcherServlet要绑定Spring 的配置文件-->
        <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>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

  

<?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"/>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>


    <!--BeanNameUrlHandlerMapping这个处理器会根据 名称来找bean,所以要注册一个bean-->
    <bean id="/hello" class="com.ma.controller.HelloController"/>


</beans>

  2,3,4 然后通过 处理器映射器 返回 在最后bean注册的 hello 这个类,

  5. 接着通过 处理器适配器 去找 helloController 处理

  6 . 执行 实现类中的功能 

  7 . 实现类调用完成之后 返回一个ModelAndView

public class HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mv = new ModelAndView();

        //业务代码
        String result = "HelloSpringMVC";
        mv.addObject("msg",result);
        //视图跳转
        mv.setViewName("test");

        return mv;
    }
}

  9 . 视图解析器 接收到 ModelAndView,然后根据 mv 区拼接前缀和后缀

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

  10 . 拼接完成后再返回给 DispatcherServlet

  虽然springmvc-servlet.xml和web.xml的代码时死得,实现其他功能只需要新建实现类

  当每当出现新的实现类,我们就要去 springmvc-servlet.xml下面注册一个bean,还是很麻烦

  所以,用注解!

 

四 . 使用注解开发

  注解开发与上面的不同点:

    springmvc-servlet.xml

<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.ma.controller"/>

    <!-- 让Spring MVC不处理静态资源,引用.css/js/html等时 -->
    <mvc:default-servlet-handler />

    <!--
    支持mvc注解驱动
        在spring中一般采用@RequestMapping注解来完成映射关系
        要想使@RequestMapping注解生效
        必须向上下文中注册DefaultAnnotationHandlerMapping
        和一个AnnotationMethodHandlerAdapter实例
        这两个实例分别在类级别和方法级别处理。
        而 annotation-driven 配置帮助我们 自动完成上述两个实例的注入。
     -->
    <mvc:annotation-driven />

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

    HelloController.java

@Controller
public class HelloController {
    @RequestMapping("/hello")
    public String hello(Model model){
        //封装数据,再模型中添加属性 msg与值,在JSP页面取出渲染
        model.addAttribute("msg","Hello,SpringMvcAnnotation");

        return "hello";//返回的东西会被 视图解析器 处理
    }
}

    @Controller:为了让 Spring IOC容器初始化时,能够自动扫描到。 相当于帮我们做了 之前在spring配置文件中的注册bean

                   

    @RequestMapping:映射请求的路径

  补充:

    @Override:重写父类的方法

    @Deprecated:表示此方法不建议使用

    @SuppressWarnings:镇压警告

    @Inherited:语序子继承父类中的注解

    @Autowired:将 Bean容器中的值自动转配到 Bean中

    @Component:把中立的类交给 Spring管理

    @Method:后面跟 get、post、put、delete 进行有关SQL的操作

                

总结:使用SpringMVC必须配置的三大件:

    1 . 处理器映射器(注解帮我们做了)

    2 . 处理器适配器(注解帮我们做了)

    3 . 视图解析器(在spring配置文件中手动配置)

       

       

    

  

      

 



这篇关于SpringMVC入门——day1的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程