家庭农场做网站的好处,网站的后期维护自己怎么做,网络营销方式变化背后的逻辑与趋势,重庆网站建设公司价格文章目录 1.概述1.1 SpringMVC快速入门 2. 请求2.1 加载控制2.2 请求的映射路径2.3 get和post请求发送2.4 五种请求参数种类2.5 传递JSON数据2.6 日期类型参数传递 3.响应3.1 响应格式 4.REST风格4.1 介绍4.2 RESTful快速入门4.3 简化操作 1.概述 SpringMVC是一个基于Java的Web… 文章目录 1.概述1.1 SpringMVC快速入门 2. 请求2.1 加载控制2.2 请求的映射路径2.3 get和post请求发送2.4 五种请求参数种类2.5 传递JSON数据2.6 日期类型参数传递 3.响应3.1 响应格式 4.REST风格4.1 介绍4.2 RESTful快速入门4.3 简化操作 1.概述 SpringMVC是一个基于Java的Web应用程序框架用于构建灵活和可扩展的MVCModel-View-Controller架构的Web应用程序。 它是Spring框架的一部分旨在简化Web应用程序的开发过程。SpringMVC技术与Servlet技术功能等同属于WEB层开发技术。 SpringMVC优点 简化WEB层开发与Spring、SpringBoot等框架集成提供强大的约定大于配置的契约式编程支持支持REST风格 1.1 SpringMVC快速入门 步骤 创建maven-web工程添加spring-webmvc依赖准备controller类处理浏览器请求的接口创建配置文件定义一个用于配置Servlet容器的初始化类加载spring配置启用测试 project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.imooc/groupIdartifactIdspringmvc-demo/artifactIdpackagingwar/packagingversion1.0-SNAPSHOT/versionurlhttp://maven.apache.org/urldependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion3.8.1/versionscopetest/scope/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.2.9.RELEASE/version/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/versionscopeprovided/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat7-maven-plugin/artifactIdversion2.2/versionconfigurationport81/portpath/path/configuration/plugin/plugins/build
/project
package it.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;//3.创建控制器等同于servlet
Controller
public class MyController {//设置当前操作的请求路径RequestMapping(/save)//设置当前操作的返回类型ResponseBodypublic String save(){System.out.println(user saving...);return {info:springmvc};}
}-------------------------------------------------------------------------------------
package it.conf;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;//4.创建springmvc的配置文件加载controller对应的bean
Configuration
ComponentScan(it.controller)
public class SpringMvcConfig {
}------------------------------------------------------------------------------------------------
package it.conf;import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;//
//5.定义一个用于配置Servlet容器的初始化类加载spring配置
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {//创建Servlet应用程序上下文加载springmvc容器配置Overrideprotected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext context new AnnotationConfigWebApplicationContext();context.register(SpringMvcConfig.class);return context;}//配置DispatcherServlet映射的URL路径设置哪些请求归属springmvc处理//{/}表示所有请求Overrideprotected String[] getServletMappings() {return new String[]{/};}//创建根应用程序上下文加载spring容器配置Overrideprotected WebApplicationContext createRootApplicationContext() {return null;}
} 2. 请求
2.1 加载控制 Spring相关bean 业务beanService功能beanDataSource SpringMVC相关bean 表现bean 不同的bean都是通过controller 定义如何避免扫描混乱
配置Servlet容器的初始化并加载Spring和Spring MVC的配置的两种方式 方法1继承自AbstractDispatcherServletInitializer package it.conf;import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;//
//定义一个用于配置Servlet容器的初始化类加载spring配置
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {//创建Servlet应用程序上下文加载springmvc容器配置Overrideprotected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext context new AnnotationConfigWebApplicationContext();context.register(SpringMvcConfig.class);return context;}//配置DispatcherServlet映射的URL路径设置哪些请求归属springmvc处理//{/}表示所有请求Overrideprotected String[] getServletMappings() {return new String[]{/};}//创建根应用程序上下文加载spring容器配置Overrideprotected WebApplicationContext createRootApplicationContext() {AnnotationConfigWebApplicationContext context new AnnotationConfigWebApplicationContext();context.register(SpringConfig.class);return context;}
} 方法2继承自AbstractAnnotationConfigDispatcherServletInitializer类 package it.conf;import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;//
//定义一个用于配置Servlet容器的初始化类加载spring配置
public class ServletContainersInitConfigg extends AbstractAnnotationConfigDispatcherServletInitializer {Overrideprotected Class?[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}Overrideprotected Class?[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}Overrideprotected String[] getServletMappings() {return new String[]{/};}
}
2.2 请求的映射路径
避免不同控制器中有相同的请求映射每个控制器类中要加应该请求路径前缀用于区分不同的请求
Controller
RequestMapping(/book) //请求路径的前缀
public class BookController {RequestMapping(/save) //请求映射ResponseBodypublic String save(){System.out.println(book save);return {module:book save};}RequestMapping(/delete)ResponseBodypublic String delete(){System.out.println(book delete);return {module:book save};}
}2.3 get和post请求发送 get请求 post请求 解决中文乱码问题 在Springmvc的Servlet容器配置中添加过滤器 Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter characterEncodingFilter new CharacterEncodingFilter();characterEncodingFilter.setEncoding(utf-8);return new Filter[]{characterEncodingFilter};}2.4 五种请求参数种类 参数类型 普通参数POJO类型参数嵌套POJO数组类型集合类型 ResponseBody的作用 设置当前控制器方法响应内容为当前返回值无需解析。 参数映射规则 客户端传递的参数名称需要和服务器端的参数名称对应名称不对应无法接受。 解决注解RequestParam 2.实体类参数传递 3.嵌套POJO 4. 数组类型 5. 集合类型
2.5 传递JSON数据
添加json坐标
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.9.0/version/dependency在SpringMvcConfig配置文件中添加EnableWebMvc开启Json转换功能
package com.it.config;Configuration
ComponentScan(com.it.controller)
EnableWebMvc
public class SpringMvcConfig{
} 2.6 日期类型参数传递 日期格式 2023-08-292023/08/2908/23/2023 3.响应
3.1 响应格式 响应将处理完的结果反馈给客户端浏览器 响应页面 响应数据 文本数据json数据 ResponseBody的作用 设置当前控制器返回值作为响应体对象-json 、list-json 1.响应页面
package com.it.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;Controller
public class UserRespController {//响应页面RequestMapping(/toJumpPage)public String toJumpPage(){System.out.println(跳转页面中);return page.jsp;}
} %--Created by IntelliJ IDEA.User: 11445Date: 2023/8/29Time: 18:22To change this template use File | Settings | File Templates.
--%
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitle跳转页面/title
/head
body
h1跳转页面hh/h1
/body
/html
跳转到其他网站页面 将返回值改为 “redirect:https://www.baidu.com/” //响应页面2RequestMapping(/tobaidu)public String tobaidu(){System.out.println(跳转页面中);return redirect:https://www.baidu.com/;}2.响应文本数据
//响应文本RequestMapping(/toText)ResponseBodypublic String toText(){System.out.println(响应文本);return response text;}3.响应JSON数据
//响应JSONRequestMapping(/toJSON)ResponseBodypublic User toJSON(){System.out.println(响应JSON);User user new User();user.setId(1);user.setAge(56);user.setName(nimi);return user;}4.REST风格
4.1 介绍 RESTRepresentational State Transfer表现形式转换 是一种软件架构风格用于设计网络应用程序的分布式系统。使用统一的接口和基于资源的通信方式通过HTTP协议进行通信。 REST风格的设计原则 基于资源将应用程序的功能抽象为资源每个资源通过唯一的URL进行标识。使用HTTP方法通过HTTP的不同方法GET、POST、PUT、DELETE等对资源进行操作。无状态服务器不保存客户端的状态信息每个请求都包含足够的信息来完成请求。统一接口使用统一的接口定义资源的操作方式包括资源的标识、操作方法和表示形式等。可缓存性对于不经常变化的资源可以使用缓存机制提高性能。分层系统不同的组件可以通过中间层进行通信提高系统的可伸缩性和灵活性。 与传统资源描述形式的区别
传统风格
http//localhost/user/getById?id1
http//localhost/user/saveUserREST
http//localhost/user/1
http//localhost/user
---------------------------------------------------------------------------按照REST风格访问资源使用 -行为动作- 区分对资源进行何种操作查全部用户 GEThttp//localhost/user
查指定用户 GEThttp//localhost/user/1
添加用户 POSThttp//localhost/user
修改用户 PUT http//localhost/user
删除用户 DELETEhttp//localhost/user/1 优点 隐藏了资源的访问行为无法通过地址得知对资源是何种操作书写简化 4.2 RESTful快速入门
package com.it.controller;import com.it.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;Controller
public class UserRestController {//1通过id查RequestMapping(value /user/{id},method RequestMethod.GET)ResponseBodypublic String getById(PathVariable Integer id){System.out.println(通过id查询id);return ...;}//查全部RequestMapping(value /user,method RequestMethod.GET)ResponseBodypublic String getAll(){System.out.println(查全部);return ...;}//修改//ResponseBody注解表示该方法的返回值将直接作为HTTP响应的body部分返回给客户端。// insert方法返回的字符串将作为响应的body返回给客户端。//RequestBody注解表示该方法需要从请求的body部分获取数据通常用于处理POST、PUT请求中的数据。// RequestBody User user表示将请求的body中的数据转换为User对象并作为参数传入insert方法中。RequestMapping(value /user,method RequestMethod.PUT)ResponseBodypublic String update(RequestBody User user){System.out.println(修改user);return ...;}//新增RequestMapping(value /user,method RequestMethod.POST)ResponseBodypublic String insert(RequestBody User user){System.out.println(新增user);return ...;}//删除//PathVariable是Spring MVC中的注解它的作用是将路径中的变量与方法参数进行绑定。// PathVariable注解用于绑定路径中的{id}变量到方法参数id上即通过{id}来获取请求路径中的id值。RequestMapping(value /user/{id},method RequestMethod.DELETE)ResponseBodypublic String delete(PathVariable Integer id){System.out.println(通过id删除id);return ...;}
} 4.3 简化操作
package com.it.controller;import com.it.pojo.User;
import org.springframework.web.bind.annotation.*;RestController //Controller和ResponseBody的合体
RequestMapping(/user)public class UserRestEasyController {//1通过id查GetMapping(/{id})public String getById(PathVariable Integer id){System.out.println(通过id查询1id);return ...;}//查全部GetMappingpublic String getAll(){System.out.println(查全部);return ...;}//修改PutMappingpublic String update(RequestBody User user){System.out.println(修改user);return ...;}//新增PostMappingpublic String insert(RequestBody User user){System.out.println(新增user);return ...;}//删除DeleteMapping(/{id})public String delete(PathVariable Integer id){System.out.println(通过id删除id);return ...;}
}