ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringMVC入门——day1

2022-03-28 21:05:04  阅读:197  来源: 互联网

标签:xml 入门 SpringMVC req 视图 day1 Controller DispatcherServlet servlet


一 . 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配置文件中手动配置)

       

       

    

  

      

 

标签:xml,入门,SpringMVC,req,视图,day1,Controller,DispatcherServlet,servlet
来源: https://www.cnblogs.com/TRUENO-86/p/16039809.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有