河南省建设协会网站,网站优化要怎么做才会做到最佳,表情包在线制作生成器,适合中小企业的管理软件文章目录 一. 简单认识SpringMVC1. 什么是SpringMVC?2. SpringMVC与MVC的关系 二. SpringMVC1. SpringMVC创建和连接2. SpringMVC的简单使用2.1 RequestMapping 注解介绍2.2 RequestMapping支持的请求类型2.3 GetMapping 和 PostMapping 3. 获取参数3.1 传递单个参数3.2 传递对… 文章目录 一. 简单认识SpringMVC1. 什么是SpringMVC?2. SpringMVC与MVC的关系 二. SpringMVC1. SpringMVC创建和连接2. SpringMVC的简单使用2.1 RequestMapping 注解介绍2.2 RequestMapping支持的请求类型2.3 GetMapping 和 PostMapping 3. 获取参数3.1 传递单个参数3.2 传递对象3.3 表单参数传递/传递多个参数(非对象)3.4 后端参数重命名(后端参数映射)3.5 RequestBody 接收JSON对象3.6 获取URL中参数PathVariable3.7 上传文件RequestPart3.8 获取Cookie/Session/header 4. 返回数据4.1 返回静态页面4.2 返回text/html4.3返回JSON对象 请求转发或请求重定向添加热部署 一. 简单认识SpringMVC
1. 什么是SpringMVC?
SpringMVC是基于Java的Web应用程序开发框架它是Spring Framework的一部分。它提供了一种基于模型-视图-控制器Model-View-ControllerMVC架构的方式来开发灵活、可扩展的Web应用程序。
SpringMVC框架通过将请求的处理流程划分为三个核心组件来实现MVC架构
模型Model模型表示应用程序中的数据和业务逻辑。在SpringMVC中模型可以是POJOPlain Old Java Object或者通过集成其他持久化技术如Hibernate实现的持久化对象。视图View视图负责渲染模型的数据并将其展示给用户。视图可以是JSPJavaServer Pages、HTML页面、PDF文档、Excel表格等。控制器Controller控制器接收用户请求并根据用户的操作调用适当的模型和视图。它负责处理用户输入、验证数据、调用业务逻辑和选择合适的视图来响应用户的请求。
SpringMVC框架通过DispatcherServlet作为前端控制器Front Controller协调和管理整个请求处理过程。当客户端发送请求时DispatcherServlet会根据配置信息将请求委派给相应的处理器Controller并将结果发送给适当的视图进行渲染。 SpringMVC提供了许多功能和特性如请求映射、数据绑定、表单处理、数据验证、文件上传、国际化、拦截器、异常处理等。它还支持使用注解和XML配置来进行灵活的开发和配置。
总而言之SpringMVC是一个用于开发Web应用程序的轻量级、灵活且功能丰富的框架它通过MVC架构模式提供了一种优雅的方式来构建现代化的Web应用程序。
2. SpringMVC与MVC的关系
MVC 是⼀种思想而 Spring MVC 是对 MVC 思想的具体实现。SpringMVC是Spring Framework中用于构建Web应用程序的MVC框架它实现了MVC设计模式的思想并提供了一套机制来实现模型、视图和控制器之间的解耦和交互。
现在绝大部分的 Java 项目都是基于 Spring或 Spring Boot的而 Spring 的核心就是 Spring MVC。也就是说 Spring MVC 是 Spring 框架的核心模块而 Spring Boot 是 Spring 的脚手架.Spring MVC 是⼀切项目的基础Spring、Spring Boot 项目基本都是基于 Spring MVC 的。
二. SpringMVC
学习SpringMVC只需要掌握以下三个功能:
连接:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到Spring程序.获取参数:用户访问的时候会携带一些参数,在程序中要想办法获取到参数.输出数据:执行了业务逻辑之后,要把程序执行的结果返回给服务器.
1. SpringMVC创建和连接
Spring MVC 项目创建和 Spring Boot 创建项目相同Spring MVC 使用Spring Boot 的方式创建在创建的时候选择 Spring Web 就相当于创建了 Spring MVC 的项目。
SpringMVC项目的创建:
2. SpringMVC的简单使用
接下来创建一个UserController类:
package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;RestController
public class UserController {RequestMapping(/sayhi)public String sayHi(){return hi SpringMVC!;}
}启动项目,在网页中访问http://localhost:8080/sayhi,结果如下: 代码中各注解的含义:
RestController: 相当于ControllerResponseBody;Controller在Spring框架启动时加载.ResponseBody表示返回非页面数据.
2.1 RequestMapping 注解介绍
RequestMapping: RequestMapping 是 Spring Web 应⽤程序中最常被用到的注解之⼀它是⽤来注册接口的路由映射的。 路由映射所谓的路由映射指的是当用户访问⼀个 url(地址) 时将用户的请求对应到程序中某个的某个方法的过程就叫路由映射。 RequestMapping的使用:
package com.example.demo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;RequestMapping(/Test)//一级路径
Controller
ResponseBody
public class TestRequestMapping {RequestMapping(/testReqMap)//二级路径public String doTestMapping(){return doTestMapping!;}
}RequestMapping既可以修饰类也可以修饰方法.当修饰类和方法时,访问的地址是类方法.
2.2 RequestMapping支持的请求类型
打开PostMan,当发送GET请求时: 执行成功! 当发生POST请求时: 执行成功. 我们可以看到,默认情况下使用注解 RequestMapping 可以接收 GET 或 POST 请求.
2.3 GetMapping 和 PostMapping 关于GET请求的三种写法: (1)RequestMapping(/index) (2)RequestMapping(value /index,method RequestMethod.GET) (3)GetMapping(/index) 关于POST请求的三种写法; (1)RequestMapping(value /index,method RequestMethod.POST) (2)PostMapping(/index)
3. 获取参数
3.1 传递单个参数
在 Spring MVC 中可以直接用方法中的参数来实现传参比如以下代码
!DOCTYPE html
html langen
headmeta charsetUTF-8titleMy Simple Web Page/title
/head
body
h1Welcome to My Simple Web Page/h1pThis is a paragraph of text./pulliItem 1/liliItem 2/liliItem 3/li
/ul
/body
/html将Test.html文件放置到resources-static目录下:
package com.example.demo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;Controller
RequestMapping(/GetParam)
public class GetParameter {RequestMapping(/m1)public Object method1(String name){System.out.println(参数 name: name);return /Test.html;}
}在网页中访问:http://localhost:8080/GetParam/m1?nameflower.可以看到html写的简易网页: 同时我们在url中赋值nameflower 同时我们可以在控制台中看到:
3.2 传递对象
首先创建一个Student类:
package com.example.demo.controller;import lombok.Data;Data//组合注解相当于Getter Setter ToString// EqualsAndHashCode RequiredArgsConstructor NoArgsConstructor
public class Student {private String name;private int age;private int id;
}再运行一下代码: RequestMapping(/m2)public Object method_2(Student s1){System.out.println(对象中的 names1.getName());System.out.println(对象中的 ages1.getAge());System.out.println(对象中的 id: s1.getId());return /Test.html;}打开网页访问http://localhost:8080/GetParam/m2,运行结果如下: 同时控制台的信息打印如下: 如果我们在url中加入参数:http://localhost:8080/GetParam/m2?namehuangage18id1 同时控制台打印信息如下: 如果url为:http://localhost:8080/GetParam/m2?namehuangid18age1 注意此时参数的顺序变化对控制台打印的信息是没有影响的.当有多个参数时,前后端进行参数匹配时是以参数的名称进行匹配的因此参数的位置是不影响后端获取参数的结果.
3.3 表单参数传递/传递多个参数(非对象)
RequestMapping(/m3)public Object method_3(String name, String pwd) {System.out.println(name 参数 name);System.out.println(pwd 参数 pwd);return /Test.html;}使用Postman访问http://localhost:8080/GetParam/m3?namehuangage18 访问成功.同时控制台打印信息为:
3.4 后端参数重命名(后端参数映射)
某些特殊的情况下前端传递的参数key 和我们后端接收的key可以不一致比如前端传递了一个time给后端而后端又是用createtime 字段来接收的这样就会出现参数接收不到的情况如果出现这种情况我们就可以使用RequestParam来重命名前后端的参数值。
RequestMapping(/m4)public Object method_4(RequestParam(time) String createtime) {System.out.println(时间 createtime);return /Test.html;}我们可以从控制台看到打印的信息正确,也就是说拿到了time. 但是在Postman中出现了400的情况: 查看原码可以看到,RequestParam中的required默认为true. required:必须的意思默认值为true因此不传递此参数就会报400的错误。 我们可以修改参数实现非必传参数设置. 修改代码为:
RequestMapping(/m4)public Object method_4(RequestParam(value time,required false) String createtime) {System.out.println(时间 createtime);return /Test.html;}3.5 RequestBody 接收JSON对象
使用RequestBody注解可以简化接收JSON数据的过程提高开发效率保障安全性并且支持复杂对象和可扩展性。它是一种常用的处理JSON数据的方式在前后端分离的开发模式中广泛使用。 后端代码为:
RequestMapping(value /m5, method RequestMethod.POST)public Object method_5(RequestBody Student s1) {System.out.println(Student s1);return redirect:/Test.html;}注意此处要使用redirect.但是在使用JSON格式的POST请求接收对象返回时通常不会使用重定向。因为重定向主要用于将客户端导航到另一个URL而在处理POST请求时我们通常期望在同一个URL下进行数据传递和处理。 控制台中信息打印为:
3.6 获取URL中参数PathVariable
后端代码:
PostMapping(/m6/{name}/{password})public Object method_6(PathVariable String name, PathVariable String password) {System.out.println(name name);System.out.println(password password);return redirect:/Test.html;}使用Postman访问:http://localhost:8080/GetParam/m6/huang/12345: 注意这种方式通常用于网页搜索时在前面显示的情况.
3.7 上传文件RequestPart
后端代码:
RequestMapping(/m7)public Object upload(RequestPart(myimg6) MultipartFile file) {String fileName UUID.randomUUID() // 文件名file.getOriginalFilename().substring( // 文件后缀file.getOriginalFilename().lastIndexOf(.));File saveFile new File(E:\\JavaEE\\upload\\ fileName);try {file.transferTo(saveFile);return true;} catch (IOException e) {e.printStackTrace();}return false;}此处使用了UUID. UUID (Universally Unique Identifier) 是一种标识符用于唯一地标识信息、实体或资源。它是一个128位长的数字在计算机系统中广泛使用。UUID 通常表示为32位十六进制数由连字符分隔为五组形如xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx其中每组为8位、4位、4位、4位和12位十六进制数字。 打开Postman,设置文件myimg6为longmao.jpg,发送GET请求: 打开upload文件可以看到: 注: 文件大小有要求, 那么可以通过Spring官方文档查询默认值, 进而在配置文件中修改默认大小. Common Application Properties
3.8 获取Cookie/Session/header
获取 Request 和 Response 对象 后端代码:
RequestMapping(/param10)ResponseBodypublic String param10(HttpServletResponse response, HttpServletRequest request) {String name request.getParameter(name);// 获取所有 cookie 信息Cookie[] cookies request.getCookies();return name 你好.;}CookieValue获取cookie: 后端代码:
RequestMapping(/cookie)ResponseBodypublic String cookie(CookieValue(value bite,required false) String bite) {return cookie bite;}访问网页:http://localhost:8080/GetParam/cookie,设置cookie SessionAttribute获取Session: 后端代码:
// 存储 sessionRequestMapping(/setsess)ResponseBodypublic void setSess(HttpServletRequest request) {HttpSession session request.getSession();session.setAttribute(SESSION_KEY, zhangsan);}// 获取 sessionRequestMapping(/getsess)ResponseBodypublic Object getSession(SessionAttribute(SESSION_KEY) String name) {return session - name;}执行:http://localhost:8080/GetParam/setsess后再执行http://localhost:8080/GetParam/getsess可以看到: RequestHeader获取 Header: 后端代码: ResponseBodyRequestMapping(/gethd)public Object getHeader(RequestHeader(Host) String host) {return header - host;}在代码中执行http://localhost:8080/GetParam/gethd:
4. 返回数据
4.1 返回静态页面
前面我们已经提及到了关于返回静态页面,此处做简单介绍即可: 在resources.static中创建前端页面Test.html:
!DOCTYPE html
html langen
headmeta charsetUTF-8titleMy Simple Web Page/title
/head
body
h1Welcome to My Simple Web Page/h1pThis is a paragraph of text./pulliItem 1/liliItem 2/liliItem 3/li
/ul
/body
/html
后端代码:
package com.example.demo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;Controller
RequestMapping(/Test)
public class TestController {RequestMapping(/test)public Object getTest() {return /Test.html;}
}
在浏览器中访问:http://localhost:8080/Test/test 注意代码中的返回路径: 当return中加了/之后就代表是从根路径去找Test.html的. 当不加/的时候, 它是在/test底下去找Test.html的, 即在当前目录底下去找Test.html的. 显然在上面的URL并找不到, 因为Test.html是放在根路径下的.
4.2 返回text/html
后端代码:
package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;RestController
public class OwnerController {RequestMapping(/m7)public String method_1(){return h1hi, h1./h1;}
}通过Fiddler抓包可以看到,返回的是text/html:
4.3返回JSON对象
后端代码: RequestMapping(/m2)public HashMapString, String method_2(){HashMapString, String map new HashMap();map.put(C, C Value);map.put(Java, Java Value);map.put(MySQL, MySQL Value);return map;}运行可以得到: 通过Fiddler抓包可以看到,返回的是JSON对象:
请求转发或请求重定向
// TestController下, 类注解RequestMapping(/Test)// 请求转发ResponseBodyRequestMapping(/fw)public String fw(){return forward:/index.html;}// 请求重定向ResponseBodyRequestMapping(/rd)public String rd(){return redirect:/index.html;}请求转发和请求重定向的直观区别:
请求转发: 当输入localhost:8080/Test/fw后, URL不变. 请求重定向: 当输入localhost:8080/Test/rd后, URL变为localhost:8080/Test.html
请求转发Forward和请求重定向Redirect是在Web应用程序中用于处理请求的两种不同的方式。
请求转发Forward
请求转发是服务器内部的操作客户端并不感知。当服务器接收到一个请求后它可以将请求转发给另一个资源进行处理然后将结果返回给客户端。在请求转发中客户端只发起了一次请求URL地址没有变化因此客户端浏览器的地址栏仍显示原始请求的URL。请求转发可以在同一个web应用程序的不同组件之间进行如Servlet之间的转发或JSP页面与Servlet之间的转发。请求转发可以共享请求的信息包括请求参数、请求属性等给目标资源进行处理。
请求重定向Redirect
请求重定向是通过发送特殊的响应给客户端让客户端重新发起一个新的请求。在请求重定向中服务器会给客户端返回一个特殊的HTTP响应码通常是302 Found并在响应头中包含一个新的URL地址告诉客户端进行重新定向。客户端收到响应后会自动发起一个新的GET请求到新的URL地址上因此客户端的地址栏会显示新的URL地址。请求重定向可以用于跳转到不同的应用程序、不同的服务器甚至是跳转到外部网站。
区别
请求转发是服务器内部操作客户端无感知而请求重定向是通过响应告诉客户端重新发起新的请求。请求转发只有一次请求URL地址不变而请求重定向将产生两次请求第一次是原始请求第二次是重定向后的请求。请求转发可以在同一个Web应用程序内进行共享请求信息而请求重定向可以跳转到不同的应用程序、服务器和外部网站。请求转发更高效不需要额外的网络传输而请求重定向可能会有额外的网络开销。
添加热部署
热部署Hot Deployment是指在系统运行过程中无需停机或重新启动即可更新和部署软件或应用程序的新版本或修改。 热部署则提供了一种更加灵活和高效的方式来部署软件。通过热部署新的代码、配置文件或资源可以在系统运行时被动态加载而无需重启整个应用程序。这样可以减少系统停机时间避免用户的中断提高系统的可用性和稳定性。 热部署技术通常与现代的应用程序框架和容器化技术结合使用如Java中的热代码替换Hot Code Replacement和Spring Boot的热部署功能。通过热部署开发人员可以快速地进行代码调试、功能添加或修复并且不会对正在运行的系统产生较大的影响。
在pom.xml中引入依赖: dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependency在Settings中勾选 在Settings-Advanced Settings中选择: 启动 热部署启动成功: