Spring MVC进阶

打印 上一主题 下一主题

主题 1734|帖子 1734|积分 5206

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录

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  ”  用于吸收参数   

 (2)在Action中利用“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设置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xmlns:mvc="http://www.springframework.org/schema/mvc"
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  12.     <!-- 将控制器扫描到容器中 -->
  13.     <context:component-scan base-package="org.flowerfog.service"/>
  14.     <context:component-scan base-package="org.flowerfog.controller"/>
  15.     <!-- 开启SpringMVC框架的注解驱动 -->
  16.     <mvc:annotation-driven/>
  17.     <!--视图解析器-->
  18.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  19.         <property name="prefix" value="/WEB-INF/views/"/>
  20.         <property name="suffix" value=".jsp"/>
  21.     </bean>
  22. </beans>
复制代码
登录视图user/login.jsp:

  1. <%--
  2.   Created by IntelliJ IDEA.
  3.   User: flowerfog
  4.   Date: 2024/11/14
  5.   Time: 15:13
  6.   To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  9. <html>
  10. <head>
  11.     <title>用户登录</title>
  12. </head>
  13. <body>
  14. <h1>用户登录</h1>
  15. <form method="POST" action="${pageContext.request.contextPath}/user/doLogin">
  16.     登录账号:<input type="text" name="account"><br />
  17.     登录密码:<input type="password" name="password"><br />
  18.     <input type="submit" value="登录" /> &nbsp;
  19.     <input type="reset" value="重置" />
  20. </form>
  21. <div style="color: red">${message}</div>
  22. </body>
  23. </html>
复制代码
系统首页视图home/index.jsp

  1. <%--
  2.   Created by IntelliJ IDEA.
  3.   User: flowerfog
  4.   Date: 2024/11/14
  5.   Time: 15:14
  6.   To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  9. <html>
  10. <head>
  11.   <title>首页</title>
  12. </head>
  13. <body>
  14. 欢迎:${loginUser.name}进入系统
  15. </body>
  16. </html>
复制代码
 实体类User:

  1. package org.flowerfog.pojo;
  2. import lombok.Data;
  3. /**
  4. * 实体类:用户
  5. */
  6. @Data
  7. public class User {
  8.     private Integer id;
  9.     private String name;
  10.     private String account;
  11.     private String password;
  12.     private Integer status;
  13. }
复制代码
 
用户登录时的提交对象LoginPo

  1. package org.flowerfog.dto;
  2. import lombok.Data;
  3. /**
  4. * 用户登录提交对象
  5. */
  6. @Data
  7. public class LoginPo {
  8.     private String account;
  9.     private String password;
  10. }
复制代码
业务层UserService

 
  1. package org.flowerfog.service;
  2. import org.flowerfog.dto.LoginPo;
  3. import org.flowerfog.pojo.User;
  4. import org.springframework.beans.BeanUtils;
  5. import org.springframework.stereotype.Service;
  6. @Service
  7. public class UserService {
  8.     public User login(LoginPo loginPo) {
  9.         //暂不访问数据库
  10.         if("admin".equals(loginPo.getAccount()) && "123456".equals(loginPo.getPassword())) {
  11.             User user = new User();
  12.             BeanUtils.copyProperties(loginPo, user);
  13.             user.setId(1);
  14.             user.setName("系统管理员");
  15.             user.setStatus(0);
  16.             return user;
  17.         }else{
  18.             return null;
  19.         }
  20.     }
  21. }
复制代码
控制器UserController 

  1. package org.flowerfog.controller;
  2. import org.flowerfog.dto.LoginPo;
  3. import org.flowerfog.pojo.User;
  4. import org.flowerfog.service.UserService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.GetMapping;
  8. import org.springframework.web.bind.annotation.PostMapping;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.servlet.ModelAndView;
  11. @Controller
  12. @RequestMapping("/user")
  13. public class UserController {
  14.     @Autowired
  15.     UserService userService;
  16.     @GetMapping(value = "/login")
  17.     public ModelAndView login() {
  18.         ModelAndView mv = new ModelAndView();
  19.         mv.setViewName("user/login");
  20.         return mv;
  21.     }
  22.     @PostMapping(value = "/doLogin")
  23.     public ModelAndView doLogin(LoginPo loginPo) {
  24.         ModelAndView mv = new ModelAndView();
  25.         User user = userService.login(loginPo);
  26.         if (user != null) {
  27.             mv.setViewName("home/index");
  28.             mv.addObject("loginUser", user);
  29.         } else {
  30.             mv.setViewName("user/login");
  31.             mv.addObject("message","账号或密码错误");
  32.         }
  33.         return mv;
  34.     }
  35. }
复制代码
 控制器HomeController

  1. package org.flowerfog.controller;
  2. import org.flowerfog.pojo.User;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.servlet.ModelAndView;
  7. @Controller
  8. @RequestMapping("/home")
  9. public class HomeController {
  10.     @GetMapping(value = "/index")
  11.     public ModelAndView index() {
  12.         ModelAndView mv = new ModelAndView();
  13.         mv.setViewName("home/index");
  14.         User user = new User();
  15.         user.setName("");
  16.         mv.addObject("loginUser", user);
  17.         return mv;
  18.     }
  19. }
复制代码
 运行验证:



 

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表