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 ②自动扫描控制器所在包 https://i-blog.csdnimg.cn/direct/e1569710b774454aa0a465dbfc79bc59.png
定义Action
Spring MVC 中利用 @RequestMapping将哀求与处理方法一一对应 @RequestMapping负责将不同哀求映射到对应的控制器方法,即Action @RequestMapping不仅仅可以定义在方法处,还可以定义在类上 建议接纳类级别注解,将相关处理放在同一控制器中 类注解url+方法注解的url Action地址中利用路径变量
在@RequestMapping指定的URL时可含有变量 利用@PathVariable指定形参吸收url的参数值 https://i-blog.csdnimg.cn/direct/b3a6692703c94ed4afdc3bc583fe1afb.pngAction限定哀求范例
@RequestMapping可通过method 属性来限定哀求范例,如GET、POST等。 https://i-blog.csdnimg.cn/direct/cade487fc16943769d2ae9ad1a900922.png method 利用枚举类RequestMethod来定义哀求范例 URL哀求方式和Action中method属性值不符,将拒绝哀求 也可以利用组合注解来限定方法吸收哀求的范例。
https://i-blog.csdnimg.cn/direct/f21e69779ded49dbb096b225ebf5b84b.png
2.视图向控制器传值
视图向控制器传参的常用方式
①利用HttpServletRequest吸收哀求参数 ②利用简单数据范例吸收哀求参数 ③利用实体类对象吸收哀求参数 案例演示:
案例:用户登录
输入用户名、暗码
提交验证登录
登录成功到成功页面
登录失败到失败页面
咱不访问数据库,而假定
登录账号=admin
登录暗码password=123456
为登录成功的充要条件
登录页面核心逻辑:
https://i-blog.csdnimg.cn/direct/56ee209fc6f74c38b9c58f58a627729d.png
2.2视图向控制器传参
第一种方式:利用HttpServletRequest吸收哀求参数
利用HttpServletRequest作为Action的参数来吸收用户哀求,从用户哀求中获取参数值,如下: https://i-blog.csdnimg.cn/direct/d692f0ffcc43465298c97cb7fbb04b90.png
第二种方式:利用简单数据范例吸收哀求参数
https://i-blog.csdnimg.cn/direct/108ff5bcd67943209f9d0ec1effb26da.png 这种方式要保证方法形参名要和用户哀求参数名保持一致 扩展:如果不一致,则利用@RequestParam指定 https://i-blog.csdnimg.cn/direct/101780608f074cc894709b4f5ad02c4d.png
这种方式@RequestParam里的值要和哀求参数名保持一致
第三种方式:利用实体类对象吸收哀求参数
(1)在项目下新建“entity”包,包下新建一个实体类“LoginParam”用于吸收参数 https://i-blog.csdnimg.cn/direct/2a7d3dcf13844906842fd778691e1ada.png
(2)在Action中利用“LoginParam”对象作为参数来吸收表单数据
https://i-blog.csdnimg.cn/direct/5084ecd1f69b4cb18c98ebaa4ff9747d.png3. 控制器向视图传值
控制器向视图传参的常用方式
控制器获取到数据后,需要将数据渲染到视图中
常用方式如下 ①通过HttpServletRequest通报数据 ②利用Model大概Map大概ModelMap通报数据 ③利用ModelAndView通报数据 控制器向视图传参(续上面的案例)
https://i-blog.csdnimg.cn/direct/0d270774cf8d432ab0be631d6fbbd2f8.png
用HttpServletRequest通报数据
通过request.setAttribute(key,value)将通报到视图的数据放入哀求域中 https://i-blog.csdnimg.cn/direct/5bc6dc793a944dc48bd6a84bff4dfb85.png
用Model大概Map通报数据
可利用SpringMVC提供的Model对象来完成控制器和视图间数据的通报
Model是Map布局,可用Map/ModelMap作为入参 model.addAttribute(key,value)将通报数据放入哀求中 https://i-blog.csdnimg.cn/direct/40e932e2f6af4227bdde692f243319a8.png
用ModelAndView通报数据
推荐方式:
https://i-blog.csdnimg.cn/direct/3e04b87eb3f34fad9f1f15b0f88f34c3.png
视图获取数据
视图端通过EL表达式${键名}来获取数据
在login_succ.jsp页面中通过${param.username}大概${requestScope.param.username}取值 https://i-blog.csdnimg.cn/direct/71993f3bec3d4aa4934b6ae5c67ff95f.png
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;
}
}
运行验证:
https://i-blog.csdnimg.cn/direct/c469e61323fe4eeca2d95fe5df367e31.png
https://i-blog.csdnimg.cn/direct/9e4ec81aaab14ff0a527e0013a7d5c72.png
https://i-blog.csdnimg.cn/direct/63efa6f4015d423fb82f586218bdd3e9.png
https://i-blog.csdnimg.cn/direct/02bf10a6e8c84be48b0bac60f2b3e79b.png
至此,完成了mvc实操的要求与显示结果
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]