当前位置: 首页 > article >正文

Spring MVC进阶

目录

1.Spring MVC控制器技术

定义控制器

 定义Action

 Action地址中使用路径变量

Action限定请求类型

2.视图向控制器传值 

 视图向控制器传参的常用方式

 案例演示:

 登录页面核心逻辑:

 2.2视图向控制器传参

第一种方式:使用HttpServletRequest接收请求参数

第二种方式:使用简单数据类型接收请求参数

 第三种方式:使用实体类对象接收请求参数

3. 控制器向视图传值 

 控制器向视图传参的常用方式

 控制器向视图传参(续上面的案例)

 用HttpServletRequest传递数据

 用Model或者Map传递数据

 用ModelAndView传递数据

 推荐方式:

 视图获取数据

4. 编程实操

 Spring-mvc.xml配置

登录视图user/login.jsp:

系统首页视图home/index.jsp

 实体类User:

用户登录时的提交对象LoginPo

业务层UserService

控制器UserController 

 控制器HomeController

 运行验证:

至此,完成了mvc实操的要求与显示结果


1.Spring MVC控制器技术

定义控制器

Spring MVC 中使用 org.springframework.stereotype.Controller 注解声明某类的实例是控制器
定义控制器 步骤 如下:
为控制器类 加注解 @Controller
自动扫描 控制器所在

 

 定义Action

Spring MVC 中使用 @RequestMapping 将请求与处理方法一一对应
@RequestMapping 负责将不同请求映射到对应的控制器方法 , Action
@RequestMapping 不仅仅可以定义在 方法 处,还可以定义在
建议采用 类级别注解 ,将相关处理放在同一控制器中
类注解 url + 方法注解的 url

 Action地址中使用路径变量

 

@RequestMapping 指定的 URL 时可含有变量
使用 @PathVariable 指定形参接收 url 的参数值

Action限定请求类型

@RequestMapping 可通过 method 属性 来限制 请求 类型 ,如 GET POST
method 使用枚举类 RequestMethod 来定义 请求类型
URL 请求方式 Action method 属性值 不符, 将拒绝请求

也可以使用组合注解来限制方法接收请求的类型 

 

2.视图向控制器传值 

 视图向控制器传参的常用方式

使用 HttpServletRequest 接收请求参数
使用 简单数据类型 接收请求参数
使用 实体类对象 接收请求参数

 案例演示:

案例:用户登录
输入用户名、密码
提交验证登录
登录成功到成功页面
登录失败到失败页面

咱不访问数据库,而假定
登录账号=admin
登录密码password=123456
为登录成功的充要条件
 

 登录页面核心逻辑:

 2.2视图向控制器传参

第一种方式:使用HttpServletRequest接收请求参数

使用 HttpServletRequest 作为 Action 的参数来接收用户请求 ,从用户请求中获取参数值,如下:

 

第二种方式:使用简单数据类型接收请求参数

这种方式要保证 方法形参名 要和 用户请求参数名 保持一致
扩展:如果不一致,则使用 @RequestParam 指定

 

 这种方式@RequestParam里的值要和请求参数名保持一致

 第三种方式:使用实体类对象接收请求参数

1 )在项目下新建 “entity” 包,包下新建一个实体类 LoginParam 用于接收参数

 

 (2Action中使用LoginParam对象作为参数来接收表单数据

3. 控制器向视图传值 

 控制器向视图传参的常用方式

 控制器获取到数据后,需要将数据渲染到视图中

常用方式如下
通过 HttpServletRequest 传递数据
使用 Model 或者 Map 或者 ModelMap 传递数据
使用 ModelAndView 传递数据

 控制器向视图传参(续上面的案例)

 HttpServletRequest传递数据

通过 request.setAttribute ( key,value ) 将传递到视图的数据放入请求域中

 

 Model或者Map传递数据

 可使用SpringMVC提供的Model对象来完成控制器和视图间数据的传递

Model Map 结构,可用 Map/ ModelMap 作为入参
model.addAttribute ( key,value ) 将传递数据放入请求中

 

 ModelAndView传递数据

 推荐方式:

 视图获取数据

 视图端通过EL表达式${键名}来获取数据

login_succ.jsp 页面中通过 ${ param.username }或者${requestScope. param.user name} 取值

 

4. 编程实操

实现用户登录功能
登录成功跳转到系统首页
登录失败返回登录页面,并显示错误信息

 Spring-mvc.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
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 将控制器扫描到容器中 -->
    <context:component-scan base-package="org.flowerfog.service"/>
    <context:component-scan base-package="org.flowerfog.controller"/>
    <!-- 开启SpringMVC框架的注解驱动 -->
    <mvc:annotation-driven/>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>


登录视图user/login.jsp:

<%--
  Created by IntelliJ IDEA.
  User: flowerfog
  Date: 2024/11/14
  Time: 15:13
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
<h1>用户登录</h1>
<form method="POST" action="${pageContext.request.contextPath}/user/doLogin">
    登录账号:<input type="text" name="account"><br />
    登录密码:<input type="password" name="password"><br />
    <input type="submit" value="登录" /> &nbsp;
    <input type="reset" value="重置" />
</form>
<div style="color: red">${message}</div>
</body>
</html>


系统首页视图home/index.jsp

<%--
  Created by IntelliJ IDEA.
  User: flowerfog
  Date: 2024/11/14
  Time: 15:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
  <title>首页</title>
</head>
<body>
欢迎:${loginUser.name}进入系统
</body>
</html>


 实体类User:

package org.flowerfog.pojo;

import lombok.Data;

/**
 * 实体类:用户
 */
@Data
public class User {
    private Integer id;
    private String name;
    private String account;
    private String password;
    private Integer status;
}



 

用户登录时的提交对象LoginPo

package org.flowerfog.dto;

import lombok.Data;

/**
 * 用户登录提交对象
 */
@Data
public class LoginPo {
    private String account;
    private String password;
}



业务层UserService

 

package org.flowerfog.service;

import org.flowerfog.dto.LoginPo;
import org.flowerfog.pojo.User;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    public User login(LoginPo loginPo) {
        //暂不访问数据库
        if("admin".equals(loginPo.getAccount()) && "123456".equals(loginPo.getPassword())) {
            User user = new User();
            BeanUtils.copyProperties(loginPo, user);
            user.setId(1);
            user.setName("系统管理员");
            user.setStatus(0);

            return user;
        }else{
            return null;
        }
    }
}



控制器UserController 

package org.flowerfog.controller;

import org.flowerfog.dto.LoginPo;
import org.flowerfog.pojo.User;
import org.flowerfog.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    UserService userService;

    @GetMapping(value = "/login")
    public ModelAndView login() {
        ModelAndView mv = new ModelAndView();
        mv.setViewName("user/login");

        return mv;
    }

    @PostMapping(value = "/doLogin")
    public ModelAndView doLogin(LoginPo loginPo) {
        ModelAndView mv = new ModelAndView();
        User user = userService.login(loginPo);
        if (user != null) {
            mv.setViewName("home/index");
            mv.addObject("loginUser", user);
        } else {
            mv.setViewName("user/login");
            mv.addObject("message","账号或密码错误");
        }
        return mv;
    }
}



 控制器HomeController

package org.flowerfog.controller;
import org.flowerfog.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/home")
public class HomeController {
    @GetMapping(value = "/index")
    public ModelAndView index() {
        ModelAndView mv = new ModelAndView();
        mv.setViewName("home/index");
        User user = new User();
        user.setName("");
        mv.addObject("loginUser", user);

        return mv;
    }
}

 运行验证:

 

 

 

至此,完成了mvc实操的要求与显示结果


http://www.kler.cn/a/394436.html

相关文章:

  • JavaScript 观察者设计模式
  • STM32问题集
  • 【数据结构与算法】第12课—数据结构之归并排序
  • 优化时钟网络之时钟抖动
  • 数据集标注txt文件读取小工具
  • 基于标签相关性的多标签学习
  • R语言基础| 机器学习
  • 改扩配系列:浪潮英政服务器CS5280H2、IR5280H2——后置SATA、NVME硬盘安装
  • SpringBoot实战:AI大模型+亮数据代理高效获取视频资源
  • 【Apache Paimon】-- 1 -- Apache Paimon 是什么?
  • Python Pandas 结构之 Series 和 DataFrame
  • NFS存储基础操作
  • PostgreSQL 行转列实现
  • 存储大挑战:如何在可靠性与大容量之间玩转平衡术?
  • LabVIEW 使用 Snippet
  • 【Excel】数据透视表分析方法大全
  • 【C++进阶实战】基于linux的天气预报系统
  • CTF攻防世界小白刷题自学笔记15
  • 【Golang】golang框架,为什么选择GoFrame, GoFrame使用心得
  • Electron 项目中杀掉进程的不同方式
  • 《FreeRTOS列表和列表项篇》
  • 6.584-Lab1:MapReduce
  • 深入解析 OpenHarmony 构建系统-1
  • 制作图片木马
  • 为什么海外服务器IP会被封
  • WebKit(适用2024年11月份版本)