SpringMVC框架基础知识(03)

简介: SpringMVC框架基础知识(03)

注意:同一个groupId下,各artifactId不同,但是,如果version的编号规则是一样的,并且,在同一个项目中需要使用不同artifactId对应的依赖,必须使用相同的version

package cn.tedu.spring;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
@ComponentScan("cn.tedu.spring")
public class SpringMvcConfigurer implements WebMvcConfigurer {
  private String characterEncoding = "utf-8";
  @Bean
  public ViewResolver configViewResolver() {
    ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
    templateResolver.setCharacterEncoding(characterEncoding);
    templateResolver.setTemplateMode("HTML");
    templateResolver.setCacheable(false);
    templateResolver.setPrefix("/templates/");
    templateResolver.setSuffix(".html");
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setTemplateResolver(templateResolver);
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    viewResolver.setCharacterEncoding(characterEncoding);
    viewResolver.setTemplateEngine(templateEngine);
    return viewResolver;
  }
}


2. 接收客户端提交的请求参数


2.1. 使用HttpServletRequest接收请求参数


在处理请求的方法的参数列表中,添加HttpServletRequest类型的参数,在处理过程中,调用参数对象的getParameter()方法即可获取请求参数:


@RequestMapping("handle_reg.do")
@ResponseBody
public String handleReg(HttpServletRequest request) {
    System.out.println("HelloController.handleReg()");
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    Integer age = Integer.valueOf(request.getParameter("age"));
    String phone = request.getParameter("phone");
    String email = request.getParameter("email");
    System.out.println("username=" + username);
    System.out.println("password=" + password);
    System.out.println("age=" + age);
    System.out.println("phone=" + phone);
    System.out.println("email=" + email);
    return "OK."; // 暂时不关心如何响应,所以使用@ResponseBody返回某个字符串,避免程序报错
}


2.2. 将请求参数直接声明为处理请求的方法的参数


可以将客户端提交的请求参数直接声明为处理请求的方法的参数,例如:


@RequestMapping("handle_reg.do")
@ResponseBody
public String handleReg(String username, String password, Integer age, 
        String phone, String email) {
    System.out.println("HelloController.handleReg()");
    System.out.println("[2] username=" + username);
    System.out.println("[2] password=" + password);
    System.out.println("[2] age=" + age);
    System.out.println("[2] phone=" + phone);
    System.out.println("[2] email=" + email);
    return "OK."; // 暂时不关心如何响应,所以使用@ResponseBody返回某个字符串,避免程序报错
}


在声明参数时,需要保证名称的一致,即“客户端提交的请求参数的名称”与“处理请求的方法的参数名称”必须是一致的!如果服务器端声明的参数,在客户端提交请求时并没有提交,则服务器端声明的参数值将是null。


在处理请求的方法中,声明参数时,可以将参数的类型声明为所期望的类型,例如以上代码中,就将age声明为Integer类型,当然,前提是客户端最终提交的数据是可以转换为Integer,如果客户端提交的数据根本就无法转换,则会报错。


使用这种虽然简单、方便,但是,不适用于请求参数过多的应用场景!


2.3. 使用封装的参数对象接收请求参数


可以将客户端将要提交的各请求参数封装到一个自定义的数据类型中,例如:


package cn.tedu.spring;
public class User {
  private String username;
  private String password;
  private Integer age;
  private String phone;
  private String email;
    // Getters & Setters
    // toString()
}


然后,将以上自定义的数据类型添加到处理请求的方法的参数列表中即可:


@RequestMapping("handle_reg.do")
@ResponseBody
public String handleReg(User user) {
    System.out.println("HelloController.handleReg()");
    System.out.println(user);
    return "OK."; // 暂时不关心如何响应,所以使用@ResponseBody返回某个字符串,避免程序报错
}


2.4. 小结


首先,在2.1介绍的使用HttpServletRequest接收请求参数的做法是不推荐使用的;


如果请求参数的数量较少,并且固定时,应该优先使用2.2介绍的做法;


如果请求参数的数量较多,或以后存在调整的可能性时,应该优先使用2.3介绍的做法。


另外,以上2.2和2.3的做法可以同时存在!


3. 向模版页面转发数据


当需要向Thymeleaf模版页面转发数据时,应该先在处理请求的方法的参数列表中添加ModelMap类型的参数,并在需要转换数据时,调用ModelMap参数对象的addAttribute()方法将数据封装进去:

@RequestMapping("handle_login.do")
public String handleLogin(String username, String password, ModelMap modelMap) {
    System.out.println("UserController.handleLogin()");
    System.out.println("username=" + username);
    System.out.println("password=" + password);
    // 假设root/1234是正确的用户名/密码
    // 判断用户名
    if ("root".equals(username)) {
        // 用户名正确,判断密码
        if ("1234".equals(password)) {
            // 密码也正确,则登录成功
            return "OK";
        } else {
            // 密码错误
            String message = "登录失败!密码错误!";
            modelMap.addAttribute("errorMessage", message);
            return "error";
        }
    } else {
        // 用户名错误
        String message = "登录失败!用户名错误!";
        modelMap.addAttribute("errorMessage", message);
        return "error";
    }
}



后续,在Thymeleaf模版页面中,使用Thymeleaf表达式即可显示此前封装的数据:


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>操作错误</title>
</head>
<body>
<h1>操作错误:<span th:text="${errorMessage}"></span></h1>
</body>
</html>


目录
相关文章
|
21天前
|
设计模式 前端开发 Java
步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
通过对 `DispatcherServlet`源码的深入剖析,我们了解了SpringMVC请求处理的全流程。`DispatcherServlet`作为前端控制器,负责请求的接收和分发,处理器映射和适配负责将请求分派到具体的处理器方法,视图解析器负责生成和渲染视图。理解这些核心组件及其交互原理,有助于开发者更好地使用和扩展SpringMVC框架。
33 4
|
2月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
150 2
|
3月前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
4月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
|
3月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
67 2
|
3月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
233 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
4月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
5月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
5月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
5月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查

热门文章

最新文章