热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

张三_JavaEE开发之SpringMVC框架整合1

篇首语:本文由编程笔记#小编为大家整理,主要介绍了JavaEE开发之SpringMVC框架整合1相关的知识,希望对你有一定的参考价值。SpringMVC是处于Web层的框

篇首语:本文由编程笔记#小编为大家整理,主要介绍了JavaEE开发之SpringMVC框架整合1相关的知识,希望对你有一定的参考价值。


SpringMVC是处于Web层的框架,所以其主要的作用就是用来接收前端发过来的请求和数据然后经过处理并将处理的结果响应给前端,所以如何处理请求和响应是SpringMVC中非常重要的一块内容。REST是一种软件架构风格,可以降低开发的复杂性,提高系统的可伸缩性,后期的应用也是非常广泛。SSM整合是把咱们所学习的SpringMVC+Spring+Mybatis整合在一起来完成业务开发,是对我们所学习这三个框架的一个综合应用。

 

目录

一、SpringMVC概述及入门案例

1.1、SpringMVC概述

1.2、 SpringMVC入门案例

1.3、SpringMvc加载bean

1.4、Postman软件的安装与使用

 二、请求与响应

2.1、设置请求映射路径 

2.2、请求参数的传递

2.3、常见5种类型的参数传递

2.4、JSON数据传递参数

2.5、日期类型参数传传递

2.6、响应





对于SpringMVC的学习,最终要达成的目标:
1. 掌握基于SpringMVC获取请求参数和响应json数据操作
2. 熟练应用基于REST风格的请求路径设置与参数传递
3. 能够根据实际业务建立前后端开发通信协议并进行实现
4. 基于SSM整合技术开发任意业务模块功能



一、SpringMVC概述及入门案例


1.1、SpringMVC概述

SpringMVC是处于Web层的框架,所以其主要的作用就是用来接收前端发过来的请求和数据然后经过处理并将处理的结果响应给前端,SpringMVC就是途中的Controller部分。


1.2、 SpringMVC入门案例

1)首先创建maven项目的web项目,在pom.xml中导入springMVC相关依赖。


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.example
WebMVC1
1.0-SNAPSHOT
war
WebMVC1 Maven Webapp

http://www.example.com

UTF-8
1.7
1.7



junit
junit
4.11
test


org.springframework
spring-webmvc
5.2.10.RELEASE


javax.servlet
javax.servlet-api
3.1.0
provided





org.apache.tomcat.maven
tomcat7-maven-plugin
2.1




2)创建spring配置类,对指定的包进行扫描。

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com")
public class SpringMvcConfig

3)创建controller类,在该层完后请求并给出响应。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController
@RequestMapping("/save")
@ResponseBody
public String save()
System.out.println("controller save ...");
return "'info':'springMvc" ;

4)使用配置类替代web.xml文件去设置配置文件的位置以及控制器的请求映射路径。

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer
@Override
protected WebApplicationContext createServletApplicationContext()
AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext() ;
ac.register(SpringMvcConfig.class);
return ac ;

@Override
protected String[] getServletMappings()
return new String[]"/";

@Override
protected WebApplicationContext createRootApplicationContext()
return null;

5)配置tomcat,启动运行,并在浏览器访问即可。


1.3、SpringMvc加载bean

加载Spring控制的bean的时候排除掉SpringMVC控制的bean。
具体该如何排除:
方式一:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等。
方式二:Spring加载的bean设定扫描范围为com,排除掉controller包中的bean。

方式1:如下

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.dao","com.service")
public class SpringConfig

方式2:如下,这种方式需要把SpringMVC的@Configration的注解去掉,防止排除失败

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
@Configuration
@ComponentScan(value = "com",excludeFilters = @ComponentScan.Filter
(type = FilterType.ANNOTATION, classes = Controller.class))
public class SpringConfig

对于加载springMVC的配置文件和Spring的配置文件,可以使用如下两种方式:

方式1:继承AbstractDispatcherServletInitializer类并重写响应方法。


import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer
@Override
protected WebApplicationContext createServletApplicationContext()
AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext() ;
ac.register(SpringMvcConfig.class);
return ac ;

@Override
protected String[] getServletMappings()
return new String[]"/";

@Override
protected WebApplicationContext createRootApplicationContext()
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringConfig.class);
return ctx;

方式2:继承AbstractAnnotationConfigDispatcherServletInitializer类并重写相应方法。

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer
@Override
protected Class[] getRootConfigClasses()
return new Class[]SpringConfig.class;

@Override
protected Class[] getServletConfigClasses()
return new Class[]SpringMvcConfig.class;

@Override
protected String[] getServletMappings()
return new String[]"/";


1.4、Postman软件的安装与使用

Postman软件是用于模拟浏览器发送请求的,常用于进行接口测试。

1)直接下载exe文件,打开即安装,注册一个账号,登录后打开工作空间,在工作空间创建Collectin用于后面的使用。

2)在输入框输入地址,模拟浏览器发送请求即可,如下:

3)可以对请求进行命名并保存,如下:


 二、请求与响应


2.1、设置请求映射路径 

当类上和方法上都添加了 @RequestMapping 注解,前端发送请求的时候,要和两个注解的value
值相加匹配才能访问到。@RequestMapping注解value属性前面加不加 / 都可以

使用如下链接访问save方法:http://localhost/user/save

使用如下方法访问delete方法:http://localhost/user/delete

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/user")
public class UserController
@RequestMapping("/save")
@ResponseBody
public String save()
System.out.println("controller save ...");
return "'info':'save" ;

@RequestMapping("/delete")
@ResponseBody
public String delete()
System.out.println("controller delete ...");
return "'info':'delete" ;


2.2、请求参数的传递

请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接
收到前端的请求,接收到请求后,如何接收页面传递的参数?
关于请求参数的传递与接收是和请求方式有关系的,目前比较常见的两种请求方式为:GET和POST,针对于不同的请求前端如何发送,后端如何接收?

postman发送get请求:

 

接收参数:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController
@RequestMapping("/commonParam")
@ResponseBody
public String save(String name,int age)
System.out.println("姓名" + name);
System.out.println("年龄" + age);
return "'info':'save" ;

处理get请求的中文参数乱码问题,需要配置tomcat的访问路径编码字符集。




org.apache.tomcat.maven
tomcat7-maven-plugin
2.1

UTF-8



postman发送post请求:

处理post请求中文乱码问题,通过重写过滤器方法,设置编码方式,如下:

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.Filter;
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer
@Override
protected Class[] getRootConfigClasses()
return new Class[]SpringConfig.class;

@Override
protected Class[] getServletConfigClasses()
return new Class[]SpringMvcConfig.class;

@Override
protected String[] getServletMappings()
return new String[]"/";

//处理post请求乱码问题
@Override
protected Filter[] getServletFilters()
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter() ;
characterEncodingFilter.setEncoding("utf-8");
return new Filter[]characterEncodingFilter ;


2.3、常见5种类型的参数传递

1)普通对象参数传递

对于普通对象的传递,直接对应形参值传递即可,当请求参数和形参不一样时,可以用@RequestParam注解绑定参数。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController
@RequestMapping("/commonParam")
@ResponseBody
public String save(@RequestParam("username") String name, int age)
System.out.println("姓名" + name);
System.out.println("年龄" + age);
return "'info':'save" ;

2)pojo对象参数传递

首先创建一个java实体对象user类,如下:

public class User
private String name ;
private Integer age ;

public String getName()
return name;

public void setName(String name)
this.name = name;

public Integer getAge()
return age;

public void setAge(Integer age)
this.age = age;

@Override
public String toString()
return "User" +
"name='" + name + '\\'' +
", age=" + age +
'';

在userController中使用实体类直接接收对象 ,如下:

@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user)
System.out.println("姓名" + user.getName());
System.out.println("年龄" + user.getAge());
return "'info':'pojo" ;

3)数组对象参数传递

@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String [] likes)
System.out.println(Arrays.toString(likes));
return "'info':'pojo" ;

4)集合对象传递参数

@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List likes)
System.out.println(likes);
return "'info':'pojo" ;

5)pojo嵌套类

首先创建一个被嵌套的实体类,如下:

public class Address
private String province ;
private String city ;
public String getProvince()
return province;

public void setProvince(String province)
this.province = province;

public String getCity()
return city;

public void setCity(String city)
this.city = city;

@Override
public String toString()
return "Address" +
"province='" + province + '\\'' +
", city='" + city + '\\'' +
'';

然后在实体类User中,引入Address对象,如下:
 


public class User
private String name ;
private Integer age ;
private Address address ;
public Address getAddress()
return address;

public void setAddress(Address address)
this.address = address;

public String getName()
return name;

public void setName(String name)
this.name = name;

public Integer getAge()
return age;

public void setAge(Integer age)
this.age = age;

@Override
public String toString()
return "User" +
"name='" + name + '\\'' +
", age=" + age +
", address=" + address +
'';

最后,正常接收参数即可,如下:

@RequestMapping("/pojoParam1")
@ResponseBody
public String pojoParam1(User user)
System.out.println(user);
return "'info':'pojo" ;

使用postman发送请求的方式如下,对于嵌套的需要写到具体的变量名:


2.4、JSON数据传递参数

1)SpringMVC默认使用的是jackson来处理json的转换,所以需要在pom.xml添加jackson依赖。


com.fasterxml.jackson.core
jackson-databind
2.9.0

2)在SpringMVC的配置类中开启SpringMVC的注解支持,这里面就包含了将JSON转换成对象的功能。

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
//开启json数据类型自动转换
@EnableWebMvc
@ComponentScan("com.controller")
public class SpringMvcConfig

3)参数前添加@RequestBody

@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestBody List likes)
System.out.println(likes);
return "'info':'pojo" ;

4)发送json数据请求,获取相应数据:

@RequestBody与@RequestParam区别:
@RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
@RequestBody用于接收json数据【application/json】

后期开发中,发送json格式数据为主,@RequestBody应用较广
如果发送非json格式数据,选用@RequestParam接收请求参数


2.5、日期类型参数传传递

1)postman模拟发送日期请求:

 2)接收请求,分别是按默认格式接收和按指定格式接收,如下:

@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date,
@DateTimeFormat(pattern="yyyy-MM-dd") Date date1,
@DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date
date2)
System.out.println("参数传递 date ==> "+date);
System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);
System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
return "'module':'data param'";

2.6、响应

1)页面响应,页面跳转,直接return页面的字符串形式即可。


@RequestMapping("/JumpPage")
public String JumpPage()
return "newPage.jsp" ;

2)返回文本内容

@RequestMapping("/ToText")
@ResponseBody
public String ToText()
return "hello world" ;

3)响应json数据

@RequestMapping("/ToJson")
@ResponseBody
public User ToJson()
User user = new User() ;
user.setName("张三");
user.setAge(19);
return user ;

4)响应POJO集合对象

@RequestMapping("/toJsonList")
@ResponseBody
public List toJsonList()
User user1 = new User() ;
user1.setName("张三");
user1.setAge(12);
Address address = new Address() ;
address.setProvince("安徽省");
address.setCity("合肥市");
user1.setAddress(address);
User user2 = new User() ;
user2.setName("李四");
user2.setAge(32);
Address address1 = new Address() ;
address1.setProvince("江苏省");
address1.setCity("南京市");
user2.setAddress(address1);
List list &#61; new ArrayList<>() ;
list.add(user1) ;
list.add(user2) ;
return list ;

推荐阅读
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 本文详细介绍了如何解决MyBatis中常见的BindingException错误,提供了多种排查和修复方法,确保Mapper接口与XML文件的正确配置。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
author-avatar
叫我小小小火枪的天空_603
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有