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控制器技术
定义控制器
定义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: 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="登录" />
<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;
}
}
运行验证: