SpringMVC框架学习(一)——框架部署和使用

1. 框架部署

1.1 基于Maven创建一个web工程

SpringMVC是一个web框架,应用在web工程中

  • 创建一个空的Maven项目
  • pom.xml 中添加语句 <packaging>war</packaging>
  • main 文件夹下新建一个文件夹,命名为 webapp ,刷新Maven依赖, webapp 文件夹就会出现一个小圆点;
  • webapp 目录下建立一个文件夹 WEB-INFWEB-INF 目录下创建一个文件 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_3_1.xsd"
         version="3.1">


</web-app>
  • 添加 Tomcat 依赖。点击 FIle → \rightarrow Project Structure → \rightarrow Modules → \rightarrow Dependencies → \rightarrow + → \rightarrow 选择Tomcat并添加。
  • 服务器部署。点击 Run/Debug Configurations → \rightarrow + → \rightarrow Tomacat → \rightarrow Local → \rightarrow 点击右下的Fix 选择下面一个选项部署项目。

1.2 添加SpringMVC依赖

其依赖主要有 spring-contextspring-aspectsspring-jdbcspring-testspring-webspring-webmvc,添加的依赖如下:

<properties>
    <spring.version>5.2.13.RELEASE</spring.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

</dependencies>

1.3 创建配置文件

resource 目录下建立 SpringMVC 配置文件,名为 spring-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"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
	<!--IoC采用注解配置-->
    <context:annotation-config/>
    <context:component-scan base-package="com.mr"/>

    <!--  声明MVC使用注解驱动  -->
    <mvc:annotation-driven/>

</beans>

1.4 配置前端控制器

SpringMVC提供了一个名为DispatcherServlet的类(SpringMVC前端控制器),用于拦截用户请求交由SpringMVC处理。

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_3_1.xsd"
         version="3.1">

    <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:spring-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

2. 框架的使用

在SpringMVC中,我们把接收用户请求、处理用户请求的类称之为Controlelr(控制器)

2.1 创建控制器类

  • 创建一个名为com.mr.controllers的包(包需要在Spring注解扫描的范围内)
  • 创建一个类(无需做任何的继承和实现)
  • 在类上添加@Controller注解声明此类为SpringMVC的控制器
  • 在类上添加@RequestMapping("url")声明此控制器类的请求url(可以省略)
@Controller
@RequestMapping("/book")
public class BookController {

}
  • 在一个控制器类中可以定于多个方法处理不同的请求
  • 在每个方法上添加@RequestMapping("url")用于声明当前方法请求的url
@Controller
@RequestMapping("/book")
public class BookController {
    
    @RequestMapping("/add")
    public void addBook(){
        System.out.println("---book add");
    }

    @RequestMapping("/list")
    public void listBooks(){
        System.out.println("---book list");
    }
}
  • 当访问网址 http://localhost:8080/springmvc/book/add 时,控制台会打印出相关的信息。

2.2 静态资源配置

静态资源:就是项目中的HTML、css、js、图片、字体等

web.xml 文件中,配置SpringMVC时 //* 是有区别的。

  • /* 拦截所有的HTTP请求,包括.jsp的请求,都做为控制器类的请求路径来处理
  • / 拦截所有的HTTP请求,但不包括.jsp的请求,不会放行静态资源的请求(html/css/js/图片)

若想要 SpringMVC 放行静态资源,必须进行如下配置:

<!--配置静态资源放行-->
<!--下面一句话的意思是,如果有css打头的请求,一律到location所在的位置中去寻找-->
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/imgs/**" location="/imgs/"/>
<mvc:resources mapping="/pages/**" location="/pages/"/>

3. 前端提交数据到控制器

3.1 表单提交

先将 web.xml 中的 /* 改为/ ,在 webapp 下建立一个JSP文件,名为 book-add.jsp ,其内容如下:

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

<h3>表单提交</h3>
<%--action指定提交到哪里--%>
<form action="book/add" method="get" enctype="multipart/form-data">
    <p>图书名称:<input type="text" name="name"/></p>
    <p>图书作者:<input type="text" name="author"/></p>
    <p>图书价格:<input type="text" name="price"/></p>
    <p>出版日期:<input type="text" name="date"/></p>
    <p><input type="submit" value="提交"/></p>
</form>
</body>
</html>

若使用表单提交,则输入框需要提供name属性,SpringMVC控制器是通过name属性取值的。

3.2 超链接提交

<a href="book/add?bookName=Java">URL提交</a>

Ajax 提交

<input type="button" value="ajax提交" id="btn1"/>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
    $("#btn1").click(function(){
        var obj = {};
        obj.bookName = "Java";
        obj.bookAuthor="张三";
        obj.bookPrice = 3.33;

        $.ajax({
            url:"book/add",
            type:"post",
            headers:{

            },
            contentType:"application/json",
            data:obj,
            success:function(res){
                console.log(res);
            }
        });
    });
</script>

4. 控制器接收前端提交的数据

一般使用 @RequestParam 注解用于接收请求行传递的数据

4.1 接收表单数据

前端如 3.1 节所示,控制器的代码如下:

@RequestMapping("/add")
public void addBook(@RequestParam("name") String a,
                    @RequestParam("author") String b,
                    @RequestParam("price") double c){
    System.out.println("---book add");
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
}

注意:如果控制器方法中接收数据的参数名与表单中的 name 值一致,则 @RequestParam 注解可省略。

4.2 接收请求头数据

  • 前端
<input type="button" value="ajax提交" id="btn1"/>
    <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
    <script type="text/javascript">
        $("#btn1").click(function(){
            $.ajax({
                url:"book/list",
                type:"post",
                headers:{
                    token:"wahahaawahaha"
                },
                success:function(res){
                    console.log(res);
                }
            });
        });
    </script>
  • 控制器
@RequestMapping("/list")
public void listBooks(@RequestHeader("token") String token){
    System.out.println("---book list");
}

4.3 接收请求体数据

  • 前端
<input type="button" value="ajax提交" id="btn1"/>
    <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
    <script type="text/javascript">
        $("#btn1").click(function(){
            var obj = {};
            obj.bookName = "Python";
            obj.bookAuthor="杰哥";
            obj.bookPrice = 2.22;

            var s = JSON.stringify(obj); //将对象转换成JSON格式
      
            $.ajax({
                url:"book/update",
                type:"post",
                contentType:"application/json",
                data:s,   //如果data的值为json格式字符串,contentType必须设置为"application/json"
                success:function(res){
                    console.log(res);
                }
            });
        });
    </script>
  • 导入 jackson 依赖
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.1</version>
</dependency>
  • 控制器
@RequestMapping("/update")
public void update(@RequestBody Book book){
    System.out.println("---book update");
    System.out.println(book);
}

5. 控制器响应前端请求

处理同步请求的方法的返回类型定义为String或者ModelAndView,以实现页面的跳转。

5.1 返回值为String

  • 转发
  @RequestMapping("/add")
  public String addBook(String name, String author, double price){
      System.out.println("---book add");
      return "/tips.jsp";
  }
  • 重定向
  @RequestMapping("/add")
  public String addBook(String name, String author, double price){
      System.out.println("---book add");
      return "redirect:/tips.jsp";
  }

5.2 返回类型为 ModelAndView

  • 转发
@RequestMapping("/add")
public ModelAndView addBook(String name, String author, double price){
    System.out.println("---book add");
    ModelAndView modelAndView = new ModelAndView("/tips.jsp");
    return modelAndView;
}
  • 重定向
@RequestMapping("/add")
public ModelAndView addBook(String name, String author, double price){
    System.out.println("---book add");
    ModelAndView modelAndView = new ModelAndView("redirect:/tips.jsp");
    return modelAndView;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值