目录
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控制器技术
定义控制器
定义Action
Action地址中使用路径变量
Action限定请求类型
也可以使用组合注解来限制方法接收请求的类型。
2.视图向控制器传值
视图向控制器传参的常用方式
案例演示:
案例:用户登录
输入用户名、密码
提交验证登录
登录成功到成功页面
登录失败到失败页面
咱不访问数据库,而假定
登录账号=admin
登录密码password=123456
为登录成功的充要条件
登录页面核心逻辑:
2.2视图向控制器传参
第一种方式:使用HttpServletRequest接收请求参数
第二种方式:使用简单数据类型接收请求参数
这种方式@RequestParam里的值要和请求参数名保持一致
第三种方式:使用实体类对象接收请求参数
(2)在Action中使用“LoginParam”对象作为参数来接收表单数据
3. 控制器向视图传值
控制器向视图传参的常用方式
控制器获取到数据后,需要将数据渲染到视图中
控制器向视图传参(续上面的案例)
用HttpServletRequest传递数据
用Model或者Map传递数据
可使用SpringMVC提供的Model对象来完成控制器和视图间数据的传递
用ModelAndView传递数据
推荐方式:
视图获取数据
视图端通过EL表达式${键名}来获取数据
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: flowerfogDate: 2024/11/14Time: 15:13To 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="登录" /> <input type="reset" value="重置" />
</form>
<div style="color: red">${message}</div>
</body>
</html>
系统首页视图home/index.jsp
<%--Created by IntelliJ IDEA.User: flowerfogDate: 2024/11/14Time: 15:14To 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 {@AutowiredUserService 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;}
}
运行验证: