欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > Spring MVC进阶

Spring MVC进阶

2024/11/19 19:13:30 来源:https://blog.csdn.net/m0_73302939/article/details/143771622  浏览:    关键词: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: 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="登录" /> &nbsp;<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;}
}

 运行验证:

 

 

 

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com