springMVC简单使用

本笔记是在学习狂神说的SpringMVC时创建。

SpringMVC学习笔记

1.什么是SpringMVC?

   + Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。
   + Spring 框架提供了构建 [Web](https://baike.baidu.com/item/Web/150564) 应用程序的全功能 MVC 模块。
   + 使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。

2.使用SpringMVC的好处

  • Lifecycle for overriding binding, validation, etc,易于同其它View框架(Tiles等)无缝集成,采用IOC便于测试。* 它是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架。

3.SpringMVC执行原理

SpringMVC的核心是DispatcherServlet中心控制器

Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能 ,DispatcherServlet 是一个实际的Servlet (它继承自HttpServlet 基类)。

SpringMVC执行流程图

mvc01.png

1.用户发起请求,中心控制器接到用户请求,调用处理器映射器(HanderMapping)处理用户请求,

在通过调用HanderExecution解析用户请求查找Handler,最后返回给中心控制器。

2.中心控制器得到用户请求的Handler,调用处理器适配器,找到用户请求的Controller。

3.Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView,然后返回中心控制器。

4.中心控制器在调用ViewResolver,根据Controller返回的信息生成View返回给用户。

1.第一个SpringMVC程序

  1. 搭建环境

  2. 创建Maven项目

  3. 添加wed框架支持

  4. 进行SpringMVC配置

1.在pom中添加SpringMVC依赖

<dependencies>
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-webmvc</artifactId>
           <version>5.1.9.RELEASE</version>
       </dependency>
 </dependencies>

2.在wed.xml中进行相关配置

     <!-- 注册DispatcherServlet-->
      <servlet>
          <servlet-name>DispatcherServlet</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <!-- 关联一个springmvc的配置文件-->
          <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>

<!--设置配置DispatcherServlet匹配所有请求-->
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

3.创建关联配置文件

<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

</beans>

4.在配置文件中

<!--添加处理映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!--添加处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    <!--添加视图解析器-->
    <mvc:view-resolvers>
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
              id="InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
        </bean>
    </mvc:view-resolvers>

5.编写Controller业务代码

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

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

public class controller implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //ModelAndView 模型和视图
        ModelAndView mv=new ModelAndView();
       //封装对象,放在ModelAndView中。Model
        mv.addObject("msg","SpringMVC-------");
        //封装要跳转的视图,放在ModelAndView中
        mv.setViewName("hello");
        return mv;
    }
}

6.在Spring容器中注册Bean

<bean id="/tets" class="com.chao.wed.controller"></bean>

7.创建需要跳转jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  //取出封装对象中的值
   ${msg}
</body>
</html>

8.配置tomcat启动测试 得到效果


mvc02.png

2.使用注解开发SpringMVC

准备工作:

  1. 创建一个新的Maven模块

  2. 添加wed框架支持

  1. 在wed.xml中配置SpringMVC

     <servlet>
            <servlet-name>DispatcherServlet</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:SpringMVC-Servlet.xml</param-value>
            </init-param>
            <!--启动级别-1-->
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>DispatcherServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    

    2.创建SpringMVC的配置文件

        <!-- 自动扫描包 -->
        <context:component-scan base-package="com.chao.controller"/>
        <!-- 不处理静态资源 -->
        <mvc:default-servlet-handler />
        <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>
    
    

    3.创建controller

    package com.chao.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    //使用注解定义类为Controller
    @Controller
    public class controller {
    
        @RequestMapping("/hello")
        public String servlet(Model model)
        {
            model.addAttribute("msg","hello---");
    
            return "hello";
        }
    }
    
    • @RequestMapping是为了映射请求路径;

    • 方法中声明Model类型的参数是为了把Action中的数据带到视图中;

    • 方法返回的结果是视图的名称hello;

4.创建jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

5.配置tomcat 启动测试


mvc03.png

3.RequestMapping

@RequestMapping

  • @RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。

    @Controller
    public class TestController {
       @RequestMapping("/hello")
       public String test(){
           return "hello";
      }
    }
    

4.RestFul 风格

概念

Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。

功能

资源:互联网所有的事物都可以被抽象为资源

资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。

分别对应 添加、 删除、修改、查询。

测试

  1. 在新建一个类 RestFulController

    @Controller
    public class RestFulController {
    }
    
  2. 使用 @PathVariable 注解,让方法参数的值绑定到一个URI上。

    package com.chao.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    
    @Controller
    public class controller {
    
        @RequestMapping("/hello")
        public String servlet(Model model)
        {
            model.addAttribute("msg","hello---");
    
            return "hello";
        }
    }
    
  3. 我们来测试请求查看下


    mvc03.png

我们来修改下对应的参数类型,再次测试

package com.chao.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
public class controller {

    @RequestMapping("/hello/{a}/{b}")
    public String servlet(@PathVariable int a,@PathVariable int b, Model model)
    {
        int res=a+b;
        model.addAttribute("msg",res);

        return "hello";
    }
}

mvc04.png

使用method属性指定请求类型

指定请求的类型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等

我们来测试一下:

  • 增加一个方法

    @Controller
    public class controller {
    
        @RequestMapping(value = "/hello/{a}/{b}",method = RequestMethod.POST)
        public String servlet(@PathVariable int a,@PathVariable int b, Model model)
        {
            int res=a+b;
            model.addAttribute("msg",res);
    
            return "hello";
        }
    }
    
    
  • 使用浏览器地址栏进行访问默认是Get请求,会报错405:


    mvc05.png

    将POST修改为GET就可以了;

@Controller
public class controller {

    @RequestMapping(value = "/hello/{a}/{b}",method = RequestMethod.GET)
    public String servlet(@PathVariable int a,@PathVariable int b, Model model)
    {
        int res=a+b;
        model.addAttribute("msg",res);

        return "hello";
    }
}

mvc06.png

另外,可以使用组合注解

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@Controller
public class controller {

    @PostMapping("/hello/{a}/{b}")
    public String servlet(@PathVariable int a,@PathVariable int b, Model model)
    {
        int res=a+b;
        model.addAttribute("msg",res);

        return "hello";
    }
}

也是可以的!

mvc07.png

在实际开发中是用组合注解比较多!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 三层架构 和 MVC模型 三层架构:我们在Servlet 学习笔记讲过,当前 Web 应用体系主要为 C/S架构 ...
    Whyn阅读 512评论 0 0
  • 写文章 一、SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的j...
    刺绣兰溪阅读 545评论 0 0
  • springmvc学习笔记 学习springmvc框架原理 包括哪些组件: 前端控制器(中心) 处理器映射器(三大...
    罗志贇阅读 1,170评论 0 51
  • 强烈推荐使用Spring Boot,搭建Spring Web项目,进入网址,把WEB依赖打钩,点击生成项目,会下载...
    tenlee阅读 1,583评论 3 44
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,548评论 0 11