目录
1.常用注解
1.1@RequestMapping
1.2.@RequestParam
1.3.@RequestBody
1.4.@PathVariable
2.参数传递
2.1 slf4j-----日志
2.2基础类型
2.3复杂类型
2.4@RequestParam
2.5@PathVariable
2.6@RequestBody
2.7请求方法(增删改查)
3.返回值
3.1void 返回值
3.2String 返回值
4.3 model+String
4.页面跳转
4.1转发
4.2重定向
1.1@RequestMapping
@RequestMapping注解是一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。
1.2.@RequestParam
@RequestParam主要用于将请求参数区域的数据映射到控制层方法的参数上
1.3.@RequestBody
@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(即请求体中的数据的
GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
1.4.@PathVariable
该注解请求URI中的模板变量部分到处理器功能处理方法的方法参数上的绑定。即当使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
先来在pom.xml配置文件中导入SLF4J的依赖
4.0.0
org.example
ssm
1.0-SNAPSHOT
war
ssm Maven Webapp
http://www.example.com
UTF-8
1.8
1.8
3.7.0
5.0.2.RELEASE
3.4.5
5.1.44
5.1.2
1.3.1
2.1.1
2.4.3
2.9.1
3.2.0
1.7.13
4.12
4.0.0
1.18.2
1.2
1.1.2
5.0.2.RELEASE
2.9.3
org.springframework
spring-context
${spring.version}
org.springframework
spring-orm
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-aspects
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-test
${spring.version}
org.mybatis
mybatis
${mybatis.version}
mysql
mysql-connector-java
${mysql.version}
com.github.pagehelper
pagehelper
${pagehelper.version}
org.mybatis
mybatis-spring
${mybatis.spring.version}
org.apache.commons
commons-dbcp2
${commons.dbcp2.version}
org.apache.commons
commons-pool2
${commons.pool2.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
jcl-over-slf4j
${slf4j.version}
runtime
org.apache.logging.log4j
log4j-api
${log4j2.version}
org.apache.logging.log4j
log4j-core
${log4j2.version}
org.apache.logging.log4j
log4j-slf4j-impl
${log4j2.version}
org.apache.logging.log4j
log4j-web
${log4j2.version}
runtime
com.lmax
disruptor
${log4j2.disruptor.version}
junit
junit
${junit.version}
javax.servlet
javax.servlet-api
${servlet.version}
provided
org.projectlombok
lombok
${lombok.version}
provided
org.springframework
spring-webmvc
${spring.version}
jstl
jstl
${jstl.version}
taglibs
standard
${standard.version}
com.fasterxml.jackson.core
jackson-databind
${jackson.version}
com.fasterxml.jackson.core
jackson-core
${jackson.version}
com.fasterxml.jackson.core
jackson-annotations
${jackson.version}
ssm
src/main/java
**/*.xml
src/main/resources
jdbc.properties
*.xml
maven-clean-plugin
3.1.0
maven-resources-plugin
3.0.2
maven-compiler-plugin
3.8.0
maven-surefire-plugin
2.22.1
maven-war-plugin
3.2.2
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2
org.apache.maven.plugins
maven-compiler-plugin
${maven.compiler.plugin.version}
${maven.compiler.target}
${project.build.sourceEncoding}
org.apache.maven.plugins
maven-compiler-plugin
${maven.compiler.plugin.version}
${maven.compiler.target}
${project.build.sourceEncoding}
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
mysql
mysql-connector-java
${mysql.version}
true
package com.sy.web;
import com.sy.model.Book;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/**
* @author 谌艳
* @site www.shenyan.com
* @create 2023-09-05 15:46
*/
@Slf4j
@Controller
@RequestMapping("/param")
public class ParamController {
@RequestMapping("/hello1")
public String index(String bname,Integer bid){
//System.out.println("hello springmvc!!!");
log.info("简单类型参数:bname:{},bid:{}",bname,bid);
return "index";
}
效果展示:
@RequestMapping("/hello2")
public String index2(Book book, HttpServletRequest request){
//System.out.println("hello springmvc!!!");
log.info("复杂类型参数:bname:{},bid:{}",request.getParameter("bname"),
request.getParameter("bid"));
log.info("复杂类型参数:book:{} " ,
book.toString());
return "index";
}
效果展示:
@RequestMapping("/hello3")
public String index3(
@RequestParam String bname,
@RequestParam (required = false) Integer bid){
//System.out.println("hello springmvc!!!");
log.info("@RequestParam类型参数:bname:{},bid:{}",bname,bid);
return "index";
}
效果展示:
@RequestMapping("/hello4/{bid}")
public String index4(@PathVariable("bid") Integer bid){
//System.out.println("hello springmvc!!!");
log.info("@PathVariable类型参数:bid:{}",bid);
return "index";
}
效果展示:
@RequestMapping("/hello5")
public String index5(Map map){
//System.out.println("hello springmvc!!!");
log.info("RequestBody类型参数:map:{}",map);
return "index";
}
效果展示:
方需要借助一个测试软件传参数,我用的是Eolink
// 查询请求
@GetMapping
public String type1(){
System.out.println("GetMapping!!!");
return "index";
}
//新增请求
@PostMapping
public String type2(){
System.out.println("GetMapping!!!");
return "index";
}
//修改请求
@PutMapping
public String type3(){
System.out.println("PutMapping!!!");
return "index";
}
//删除请求
@DeleteMapping
public String type4(){
System.out.println("DeleteMapping!!!");
return "index";
}
创建一个ResponseUtil工具类,辅助完成测试代码如下 :
package com.sy.utis;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
public class ResponseUtil {
public static void write(HttpServletResponse response,Object o)throws Exception{
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
out.println(o.toString());
out.flush();
out.close();
}
public static void writeJson(HttpServletResponse response,Object o)throws Exception{
ObjectMapper om = new ObjectMapper();
// om.writeValueAsString(o)代表了json串
write(response, om.writeValueAsString(o));
}
}
创建一个ReturnController类,来进行方法的请求测试(包含关于返回值的所以方法)。
处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回 void。
/**
* @author 谌艳
* @site www.shenyan.com
* @create 2023-09-05 19:25
*/
@Controller
@RequestMapping("/rs")
public class RetrurnController {
@RequestMapping("/hello1")
public void hello1(HttpServletResponse response){
Map map=new HashMap<>();
map.put("code",200);
map.put("mag","成功添加。。。");
try {
ResponseUtil.writeJson(response,map);
} catch (Exception e) {
e.printStackTrace();
}
}
测试结果:
@RequestMapping("/hello3")
public String hello3() {
return "index";
}
@RequestMapping("/hello4")
public String hello4(
Model model,
HttpServletRequest request) {
model.addAttribute("name","米西米西");
request.setAttribute("chapter","花不垃圾");
return "index";
}
测试结果:
转发和重定向的实现方式有所不同。转发是在服务器端进行处理,服务器接收到用户的请求后,将请求转发到另一个URL,并将响应返回给用户。重定向是通过发送特定的HTTP响应代码来告诉浏览器将用户的请求重定向到另一个URL,浏览器接收到重定向响应后,会自动发送新的请求到重定向的URL。
使用场景方面,转发适用于需要在服务器端进行一些处理后,将请求转发到其他页面或处理逻辑的情况。转发可以保持用户的URL不变,用户在浏览器中看到的URL仍然是原始的URL。重定向适用于需要将用户导航到其他页面或处理逻辑的情况,重定向会导致浏览器发送新的请求到重定向的URL,并在浏览器的地址栏中显示新的URL。 增删改都是用重定向