Spring MVC基础(基于注解)环境搭建, 请求路径,参数绑定,简单数据类型部分

1. Spring MVC 概述

1.1 什么是Spring MVC

  • Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet。

  • 由于 Spring MVC 本身就是 Spring 框架的一部分,所有与 Spring 框架是无缝集成。是当今业界最主流的 Web 开发框架。

1.2 Spring MVC的执行流程

  1. 用户点击某个请求路径,发起一个 HTTP request 请求,该请求会被提交到 DispatcherServlet(前端控制器);

  2. 由 DispatcherServlet 请求一个或多个 HandlerMapping(处理器映射器),并返回一个执行链(HandlerExecutionChain)。

  3. DispatcherServlet 将执行链返回的 Handler 信息发送给 HandlerAdapter(处理器适配器);

  4. HandlerAdapter 根据 Handler 信息找到并执行相应的 Handler(常称为 Controller);

  5. Handler 执行完毕后会返回给 HandlerAdapter 一个 ModelAndView 对象(Spring MVC的底层对象,包括 Model 数据模型和 View 视图信息);

  6. HandlerAdapter 接收到 ModelAndView 对象后,将其返回给 DispatcherServlet ;

  7. DispatcherServlet 接收到 ModelAndView 对象后,会请求 ViewResolver(视图解析器)对视图进行解析;

  8. ViewResolver 根据 View 信息匹配到相应的视图结果,并返回给 DispatcherServlet;

  9. DispatcherServlet 接收到具体的 View 视图后,进行视图渲染,将 Model 中的模型数据填充到 View 视图中的 request 域,生成最终的 View(视图);

  10. 视图负责将结果显示到浏览器(客户端)。

2. 环境搭建

  • 项目名:maven_mvc_anno

  • 拷贝坐标


    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <!--声明不需要web.xml文件-->
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <!-- 事务 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>


        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.24</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>3.7.5</version>
        </dependency>

        <!--整合-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.5</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <!-- mvc json -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.10.2</version>
        </dependency>

        <!--swagger2-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>


        <!--文件上传-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>

        <!--jsp相关-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.10</version>
        </dependency>


    </dependencies>

配置WEB支持  

 

2.1 步骤

  • 步骤:

    1. 编写controller:处理入口

    2. 编写jsp页面:显示内容

    3. 拷贝核心配置类:(取代springmvc.xml)

    4. 拷贝核心配置类:(取代web.xml)

    5. 编写首页,部署项目,启动访问

2.1.1 实现

 

1、拷贝核心配置类:MvcConfiguration用于扫描controller

package liu.mvc.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "liu.mvc.controller")
public class MvcConfiguration  {

}

2.拷贝核心配置类:WebInitializer1

package liu.mvc.config;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

public class WebInitializer1 implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        //1 配置spring工厂
        AnnotationConfigWebApplicationContext application = new AnnotationConfigWebApplicationContext();
        // 注册所有的配置类
        application.register(MvcConfiguration.class);

        //2 post中文乱码
        FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding", new CharacterEncodingFilter("UTF-8"));
        encodingFilter.addMappingForUrlPatterns(null, true, "/*");

        //3 核心控制器
        ServletRegistration.Dynamic mvcServlet = servletContext.addServlet("springmvc", new DispatcherServlet(application));
        mvcServlet.addMapping("*.action");
        mvcServlet.setLoadOnStartup(2);	//tomcat启动时,执行servlet的初始化方法

    }

}

3.编写jsp页面:显示内容

位置:/web/pages/list.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
展示列表页面
</body>
</html>

4.编写首页,部署项目,并启动访问

位置:/web/index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
首页
</body>
</html>

3. Spring MVC 基础

3.1 请求路径:@RequestMapping

3.1.1 窄化请求路径

  • @RequestMapping放在类名上边,设置请求前缀

  • @RequestMapping放在方法名上边,设置方法对应请求路径。

  • 完整请求:前缀 + 请求路径

  • 需求:使用 /demo01/index.action访问首页

package liu.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/demo1")
public class Demo1IndexController {

    @RequestMapping("/index")
    public String index(){
        return "/index.jsp";
    }
}

访问路径:

<a href="${pageContext.request.contextPath}/demo1/index.action">窄化</a>

 

 

3.1.2 多路径映射

  • @RequestMapping 允许配置多个访问路径

  • 需求:使用 /demo01/index2.action访问首页

 @RequestMapping({"/index","/index2"})
    public String index(){
        return "/index.jsp";
    }

 访问路径:

<a href="${pageContext.request.contextPath}/demo1/index2.action">多路径</a>

 

 

3.1.3 请求方法限定

@RequestMapping 默认支持各种请求方式的访问,可以通过 method属性限制不同的请求方式。

注解描述
@RequestMapping(method = RequestMethod.GET)只有get请求方式可访问
@RequestMapping(method = RequestMethod.POST)只有post请求方式可访问
@RequestMapping(method={RequestMethod.GET,RequestMethod.POST})get和post都可访问

使用/demo01/post.action,以不同的请求方式访问首页

  • get请求抛异常

  • post允许访问

  @RequestMapping(value = "/post",method = RequestMethod.POST)

 访问路径:

//post请求方式访问
<form action="${pageContext.request.contextPath}/demo1/post.action" method="post">
    <input type="submit" value="post请求访问">
</form>

 

 

//get请求方式访问,会报异常
<a href="${pageContext.request.contextPath}/demo1/post.action">get请求访问</a>

3.2 参数绑定

3.2.1 简单数据类型

  • 在控制器的方法中,只要有对应的参数名,spring mvc就可以自动完成参数封装

1)基本操作

  • 访问`/demo02/findById.action?id=1,设置参数id

 

package liu.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/demo2")
public class Demo2ParamConroller {
    @RequestMapping({"/findById"})
    public String findById(String id){
        System.out.println("id:"+id);
        return "/index.jsp";
    }
}

访问路径

<a href="${pageContext.request.contextPath}/demo2/findById.action?id=1">简单数据</a>

 

 ps :参数名和变量名必须保持一致。

2)支持的数据类型

数据类型取值
整型Integer、int
字符串String
单精度Float、float
双精度Double、double
布尔型Boolean、boolean

3)自定义变量名:@RequestParam

  • 如果请求参数名和方法参数名不一致时,需要使用@RequestParam标记对应关系。

  • 需求:使用变量name接收参数id的值

  @RequestMapping("/findById2")
    public String findById2(@RequestParam("id") String uid){
        System.out.println("uid:"+uid);
        return "/index.jsp";
    }

 访问路径:

<a href="${pageContext.request.contextPath}/demo2/findById2.action?id=2">简单数据uid</a>

效果展示:

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值