SpringMVC基础篇(一)

文章目录

1.基本介绍

1.特点
2.SpringMVC跟SpringBoot的关系

2.快速入门

1.需求分析
2.图解
3.环境搭建
1.创建普通java工程
2.添加web框架支持
3.配置lib文件夹
1.导入jar包
2.Add as Library
3.以后自动添加
4.配置tomcat
1.配置上下文路径
2.配置热加载
5.src下创建Spring配置文件applicationContext-mvc.xml
6.配置中央控制器web.xml读取Spring配置文件
  • 服务器启动则自动装载这个servlet,实例化servlet,调用init方法,读取spring配置文件
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">
    <!--配置中央控制器-->
    <!--只要服务器启动,这个servlet就调用init方法读取spring的配置文件,并且接收所有请求-->
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--init方法可以通过ServletConfig来读取这个初始化参数-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!--读取spring配置文件-->
            <param-value>classpath:applicationContext-mvc.xml</param-value>
        </init-param>
        <!--服务器启动就装载这个servlet,直接创建servlet实例,调用init方法-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <!--所有的请求都交给这servlet处理-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
4.具体实现
文件目录
1.编写首页面login.jsp
jsp 复制代码
<%--
  Date: 2024/2/23
  Time: 20:44
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="">
    username:<input name="username" type="text">
    password:<input name="password" type="password">
    <input type="submit" value="登录">
</form>
</body>
</html>
2.编写控制器UserServlet.java
java 复制代码
package com.sun.web;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
//表示这是一个控制器
@Controller
public class UserServlet {
    //这个方法的网址是上下文路径 + login
    @RequestMapping(value = "/login")
    public String login() {
        System.out.println("login ok...");
        //视图解析器配置的前缀是/WEB-INF/pages/ 后缀是.jsp所以这个资源的路径就是/WEB-INF/pages/login_ok.jsp
        return "login_ok"; //返回的这个值会交给视图解析器,指定要跳转的页面
    }
}
3.编写视图解析器要跳转的页面login_ok.jsp
jsp 复制代码
<%--
  Date: 2024/2/23
  Time: 20:54
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>ok!</h1>
</body>
</html>
4.配置视图解析器和容器扫描applicationContext-mvc.xml
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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <!--容器扫描-->
    <context:component-scan base-package="com.sun.web"/>

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

</beans>
5.配置login.jsp的action
5.结果展示
1.login.jsp
2.点击登录
6.注意事项和细节说明
1.控制器UserServlet指定url的时候可以省略value
2.关于web.xml文件中配置读取Spring的配置文件

3.SpringMVC执行流程

4.RequestMapping注解使用方式(不要背!)

1.@RequestMapping可修饰方法和类
文件目录
1.编写控制器UserHandler.java
java 复制代码
package com.sun.web;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
@Controller
@RequestMapping(value = "/user")
public class UserHandler {
    /**
     * 1.requestMethod支持四个常用选项,get,post,delete,put
     * 2.如果不写method参数则默认支持get和post
     * 3.目前这个buy方法的访问路径是上下文路径 + user/buy
     */
    @RequestMapping(value = "/buy", method = RequestMethod.POST)
    public String buy() {
        System.out.println("buy方法被调用");
        return "success";
    }

}
2.编写success.jsp
java 复制代码
<%--
  Date: 2024/2/24
  Time: 12:40
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>success</h1>
</body>
</html>
3.编写request.jsp
java 复制代码
<%--
  Date: 2024/2/24
  Time: 12:43
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="user/buy" method="post">
    <input type="submit" value="提交">
</form>
</body>
</html>
4.结果展示
1.首页
2.点击提交
5.注意事项
1.如果指定了post请求,使用其他请求方式则会报错
2.如果没有指定请求方式则get或post都可以
2.@RequestMapping可指定params支持简单表达式
文件目录
1.基本介绍
2.请求必须包含某个参数
1.UserHandler.java添加方法
java 复制代码
    /**
     * 会将参数bookid自动填充到方法中
     * @param bookid
     * @return
     */
    @RequestMapping(value = "/find", method = RequestMethod.POST, params = "bookid")
    public String search(String bookid) {
        System.out.println("bookid=" + bookid);
        return "success";
    }
2.编写request.jsp
jsp 复制代码
<%--
  Date: 2024/2/24
  Time: 12:43
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="user/find" method="post">
    输入bookid:<input name="bookid" type="text">
    <input type="submit" value="提交">
</form>

</body>
</html>
3.结果展示
3.请求必须包含参数并且指定参数值
1.修改UserHandler.java
2.结果展示
4.需要有参数并且值不等于什么
1.修改UserHandler.java
2.结果展示
3.@RequestMapping支持Ant风格资源地址
1.基本介绍
2.匹配多层路径
1.修改UserHandler.java
java 复制代码
    /**
     * 要求可以匹配 /user/message/aa, /user/message/aa/bb/cc
     * @return
     */
    @RequestMapping(value = "/message/aa/**")
    public String im() {
        System.out.println("匹配成功");
        return "success";
    }
2.结果展示
4.@RequestMapping可配合@PathVariable映射URL绑定的占位符
1.基本介绍
2.通过路径变量获取参数
1.修改UserHandler.java
java 复制代码
    /**
     * 可以编写路径变量,直接在路径中接受变量,结合@PathVariable来进行参数传递
     *
     * @return
     */
    @RequestMapping(value = "/reg/{username}/{password}")
    public String register(@PathVariable("username") String name, @PathVariable("password") String password) {
        System.out.println("username = " + name + " password = " + password);
        return "success"; //请求转发
    }
2.结果展示
5.@RequestMapping注意事项和细节
1.映射的URL不能重复
1.修改UserHandler.java
java 复制代码
    /**
     * 两个重复的url
     */
    @RequestMapping("/l1")
    public String h1() {
        return "success";
    }
    @RequestMapping("/l1")
    public String h2() {
        return "success";
    }
2.结果展示
2.请求方式简写
1.基本介绍
2.修改UserHandler.java
java 复制代码
    /**
     * 这样表示的就是get类型的请求,请求地址为"/buy1"
     */
    @GetMapping("/buy1")
    public String buy_() {
        return "success";
    }
3.结果展示
3.提交数据简写
1.基本介绍
2.修改UserHandler.java
java 复制代码
    //提交的信息如果包含这个参数则会自动填充,否则会传入一个空值
    @GetMapping("/hello")
    public String hello(String email) {
        System.out.println(email);
        return "success";
    }
3.结果展示

5.课后练习

1.题目
2.第一题
3.第三题
1.修改UserHandler.java
java 复制代码
    //课后练习
    @PostMapping("/computer")
    public String computer(String brand, String price, String num) {
        System.out.println("brand=" + brand + " price=" + price + " num=" + num);
        return "success";
    }
2.homework01.jsp
jsp 复制代码
<%--
  Date: 2024/2/24
  Time: 15:21
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="user/computer" method="post">
    品牌:<input name="brand" type="text"><br>
    价格:<input name="price" type="text"><br>
    数量:<input name="num" type="text"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>
3.结果展示
相关推荐
weisian15125 分钟前
Redis篇--常见问题篇8--缓存一致性3(注解式缓存Spring Cache)
redis·spring·缓存
向阳121825 分钟前
mybatis 缓存
java·缓存·mybatis
上等猿32 分钟前
函数式编程&Lambda表达式
java
蓝染-惣右介1 小时前
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
java·设计模式
一只淡水鱼661 小时前
【mybatis】详解 # 和 $ 的区别,两者分别适用于哪种场景,使用 $ 不当会造成什么影响
sql·spring·mybatis·sql注入
秋恬意1 小时前
IBatis和MyBatis在细节上的不同有哪些
java·mybatis
荆州克莱2 小时前
Golang的性能监控指标
spring boot·spring·spring cloud·css3·技术
齐 飞2 小时前
BeanFactory和FactoryBean
java·sprint
大霞上仙2 小时前
lxml 解析xml\html
java·服务器·网络