SpringMVC

目录

一、SpringMVC

二、Spring MVC基于Annotation开发-Spring MVC环境搭建

三、Spring MVC工作流程运行原理

四、SpringMVC接收请求参数的4种方式

(一)在controller使用参数接收,请求有什么参数,方法就有什么参数 

 (二)在controller使用参数接收, @RequstParam改变controller方法接收请求参数和使用参数不一致

​(三)在controller使用实体类作为参数接收,请求参数作为实体类的属性

(四)restful格式接收参数

五、请求转发和重定向

(一)请求转发

(二)重定向

 六、Spring MVC视图解析器

1.什么是 Spring 视图和视图解析器

2.常用视图和视图解析器简介

七、Spring MVC与JSON

1.SpringMVC处理json的框架是Jackson,要引入pom的依赖

2.在springmvc.xml配置

3.写controller

4.浏览器运行效果

八、拦截器

(一)什么是拦截器?适用场景?

(二)拦截器相关接口?

(三)登录拦截器类

(四)springmvc.xml配置拦截器

​九、Spring整合Spring MVC及MyBatis

(一)什么是SSM整合

(二)三大框架的角色划分和职责

1.Spring框架

2.SpringMVC框架

3.Mybatis

(三)父子容器的关系

​(四)SSM整合步骤

1.创建maven工程2.pom.xml

3.配置web4.配置web.xml

5.applicationContext.xml

6.db.properties

7.mybatis.xml

8.springmvc.xml

9.User

10.UserMapper.xml

11.UserMapper

12.UserService

13.UserServiceImpl

14.UserController

15.add.jsp

16.list.jsp

以下是模糊查询和分页17.UserMapper.xml

18.UserMapper

19.UserService

20.UserServiceImpl

21.UserController

22.add.jsp

23.list.jsp

24.update.jsp


一、SpringMVC

SpringMVC是一个spring家族 MVC(Model View Controller 模型视图控制器)框架.

二、Spring MVC基于Annotation开发-Spring MVC环境搭建

(一)创建maven工程 
(二)添加依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.8</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/javax.servlet/jsp-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

(三)web.xml中配置前端控制器(核心控制器),其实就是一个Servlet

<?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">
    <!--配置springmvc核心的DisPatcherServlet-->
    <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:springmvc.xml</param-value>
        </init-param>
        <!--tomcat  启动创建DisPatcherServlet-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!--正斜杠表示所有的请求-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!--配置编码过滤器(springmvc提供的)-->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>*</url-pattern>
    </filter-mapping>
</web-app>

(四)springmvc.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: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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--扫描使用4大注解的类 @Controller @Service @Repository @Component ,纳入springmvc管理-->
    <context:component-scan base-package="com.tjetc"></context:component-scan>

    <!--配置让@RequestMapping生效-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--图片资源等交给默认的Servlet处理, 也就是Tomcat处理-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>


    <!--配置视图解析器-->
    <!--视图解析器的作用是查找指定的视图-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置视图-->
        <!--这里使用的是jstl视图-->
        <!--视图的作用是解析view的代码转换成html-->
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
        <!--配置前后缀的作用是简化返回页面的代码, 例如: @RequestMapping注解到方法中, return "hello", 实际上return "/hello.jsp"页面-->
        <!--配置前缀-->
        <property name="prefix" value="/"></property>
        <!--配置后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

(五)HelloController

package com.tjetc.controller;

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

@Controller
//@RequestMapping  写在类上, controller里所有的方法映射加一个前缀
@RequestMapping("user")
public class HelloController {
    //@RequestMapping 作用:  访问的url映射到加上@RequestMapping 的方法上面
    //@RequestMapping  注解的值: url
    @RequestMapping("/hello")
    //Model 对象用途: 用来存储数据, 传输到页面中, 在页面中就可以获取数据
    public String hello(Model model) {
        //添加数据,  传输到页面
        model.addAttribute("msg", "hello spring!");
        //请求转发到页面,  /index.jsp页面
        return "jsp/index";
    }

    @RequestMapping("order")
    public String order(Model model) {
        model.addAttribute("msg", "我是订单列表");
        //请求转发到/order.jsp页面
        return "jsp/order";
    }
}

(六)index.jsp和order.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
        <base href="<%=request.getContextPath()%>/">
    </head>
    <body>
        <%--使用el表达式获取model存储的值--%>
        <h1>${msg}</h1>
    </body>
</html>

(七)运行效果

三、Spring MVC工作流程运行原理

 

1、 用户发送请求至前端控制器DispatcherServlet。
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView。
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、 ViewReslover解析后返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户。

四、SpringMVC接收请求参数的4种方式

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
        <base href="<%=request.getContextPath()%>/">
    </head>
    <body>
        <form action="login" method="post">
            用户名:<input type="text" name="username"><br>
            密码:<input type="password" name="password"><br>
            <input type="submit" value="登录">
        </form>
    </body>
</html>

welcome.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
        <base href="<%=request.getContextPath()%>/">
    </head>
    <body>
        <h1>username=${username}</h1>
        <h1>password=${password}</h1>
    </body>
</html>

(一)在controller使用参数接收,请求有什么参数,方法就有什么参数 

package com.tjetc.controller;

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

@Controller
public class LoginController {
    @RequestMapping("login")
    public String login(String username, String password, Model model) {
        System.out.println("username=" + username);
        System.out.println("password=" + password);
        //登录判断 todo
        model.addAttribute("username", username);
        model.addAttribute("password", password);
        //请求转发到welcome.jsp页面
        return "jsp/welcome";
    }
}

 (二)在controller使用参数接收, @RequstParam改变controller方法接收请求参数和使用参数不一致

package com.tjetc.controller;

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

@Controller
public class LoginController {
    @RequestMapping("login")
    public String login(@RequestParam(value = "username") String un,
                        //required  表示是否需要提交的字段, false表示可以不提交字段,也可以提交, true表示必须要提交的字段, 不提交就会报400错误
                        //defaultValue   表示默认值, 不提交字段, 使用默认值, 提交字段, 使用默认值, 在required = false情况下有意义
                        @RequestParam(value = "password", required = false, defaultValue = "123456") String pd,
                        Model model) {
        System.out.println("username=" + un);
        System.out.println("password=" + pd);
        //登录判断 todo
        model.addAttribute("username", un);
        model.addAttribute("password", pd);
        //请求转发到welcome.jsp页面
        return "jsp/welcome";
    }
}


(三)在controller使用实体类作为参数接收,请求参数作为实体类的属性

package com.tjetc.model.param;

public class User {
    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
package com.tjetc.controller;

import com.tjetc.model.param.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class LoginController {
    @RequestMapping("login")
/**
 * 通过参数的实体类接收传过来的参数
 */
    public String login(User user, Model model) {
        System.out.println("username=" + user.getUsername());
        System.out.println("password=" + user.getPassword());
        //登录判断  todo
        model.addAttribute("username", user.getUsername());
        model.addAttribute("password", user.getPassword());
        //请求转发到welcome.jsp页面
        return "jsp/welcome";
    }
}

(四)restful格式接收参数

url路径传参

success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
        <base href="<%=request.getContextPath()%>/">
    </head>
    <body>
        <h1>订单删除成功,path=${path},id=${id}</h1>
    </body>
</html>
package com.tjetc.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
@RequestMapping("order")
public class OrderController {
    @RequestMapping("del
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值