您的位置:首页 > 汽车 > 时评 > 营销团队外包_太原高级seo主管_上海站优云网络科技有限公司_广告主资源哪里找

营销团队外包_太原高级seo主管_上海站优云网络科技有限公司_广告主资源哪里找

2024/11/15 18:50:10 来源:https://blog.csdn.net/weixin_60583755/article/details/143497031  浏览:    关键词:营销团队外包_太原高级seo主管_上海站优云网络科技有限公司_广告主资源哪里找
营销团队外包_太原高级seo主管_上海站优云网络科技有限公司_广告主资源哪里找

SpringBoot的web开发

静态资源映射规则

总结:只要静态资源放在类路径下:

called /static (or /public or /resources or //METAINF/resources

一启动服务器就能访问到静态资源文件

springboot只需要将图片放在 static 下 就可以被访问到了

总结:

只要静态资源放在类路径下: called /static (or INF/resources

访问:当前项目根路径/ + 静态资源名

静态资源访问前缀

spring:mvc:static-path-pattern: static/test/**


enjoy模板引擎

四个步骤:

1.加坐标

<dependency><groupId>com.jfinal</groupId><artifactId>enjoy</artifactId><version>5.0.3</version>
</dependency>

2.开启配置

在configure包下新建配置类  官网可以复制https://gitee.com/jfinal/enjoy

package com.stringzhua.springboot_web_demo01.config;import com.jfinal.template.Engine;
import com.jfinal.template.ext.spring.JFinalViewResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class SpringBootConfig {@Bean(name = "jfinalViewResolver")public JFinalViewResolver getJFinalViewResolver() {// 创建用于整合 spring boot 的 ViewResolver 扩展对象JFinalViewResolver jfr = new JFinalViewResolver();// 对 spring boot 进行配置jfr.setSuffix(".html");jfr.setContentType("text/html;charset=UTF-8");jfr.setOrder(0);// 设置在模板中可通过 #(session.value) 访问 session 中的数据jfr.setSessionInView(true);// 获取 engine 对象,对 enjoy 模板引擎进行配置,配置方式与前面章节完全一样Engine engine  = JFinalViewResolver.engine;// 热加载配置能对后续配置产生影响,需要放在最前面engine.setDevMode(true);// 使用 ClassPathSourceFactory 从 class path 与 jar 包中加载模板文件engine.setToClassPathSourceFactory();// 在使用 ClassPathSourceFactory 时要使用 setBaseTemplatePath// 代替 jfr.setPrefix("/view/")engine.setBaseTemplatePath("/templates/");// 更多配置与前面章节完全一样// engine.addDirective(...)// engine.addSharedMethod(...);return jfr;}
}

3.将页面保存在templates目录下

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title></title>
</head>
<body><h1>测试测试测试</h1><img src="http://localhost:8080/lb1.jpg"/>
</body>
</html>

4.编写代码逻辑

package com.stringzhua.springboot_web_demo01.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;/*** @Author Stringzhua* @Date 2024/9/18 12:05* description:*/
@Controller
@RequestMapping("/user")//一级目录
public class UserController {/*** @RequestMapping 意义:处理用户的请求,相似于doget与dopost* 位置:* 类上:一级目录* 方法:二级目录* 例如:user/save* user/delete* student/save* student/delete* 属性:* value = "",path = "" value等同于path,只有它时可省略* 表示请求路径* =========================* method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式* =========================* params = ""* 限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数* 注意:1.超链接默认发送的是get请求* 2.所有请求所携带的参数格式均为:key = value* @DeleteMapping 删除* @PutMapping 修改* @GetMapping 查询* @PostMapping 新增* @RequestMapping 可以点击查看源码* @Target({ElementType.METHOD,ElementType.TYPE}) METHOD==代表修饰方法,TYPE==代表修饰类*/@RequestMapping(value = "/init")//二级目录public String init() {System.out.println("==========进入了springMVC的控制器=========");System.out.println("返回业务层,调用持久层");return "success";//返回方法执行完要跳转的页面名称}
}

加坐标 写配置类

在templates 下有success.html

不加 responsebody

测试:

SpringMVC

1.请求处理

2.参数绑定

3.常用注解

4.数据传递

5.文件上传

SpringMVC-请求处理

@RequestMapping

  • 意义:处理用户的请求,相似于doget与dopost
  • 位置:
    • 类上:一级目录
    • 方法:二级目录

例如:

  • user/save
  • user/delete
  • student/save
  • student/delete

属性:

  • value = “”,path = “” 表示请求路径
  • method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式
  • params = ""限制请求参数,
    • 例如:params={“msg1”,“msg2”}表示请求路径中必须携带参数名为msg1与msg2的参数

注意:

  1. 超链接默认发送的是get请求
  2. 所有请求所携带的参数格式均为:key = value

还有这些请求

  • @GetMapping   查询
  • @PostMapping  新增
  • @PutMapping   修改
  • @DeleteMapping 删除

@RequestMapping可以点击查看源码

@Target({ElementType.METHOD, ElementType.TYPE})

METHOD代表修饰方法,TYPE代表修饰类

浏览器默认 get请求

post 跳转不了

测试:

demo01.postman_collection.json

准备工作:下载postman

官网:https://www.postman.com/

1.下载postman使用postman测试

2.新建文件夹,新建测试:使用上面的success.html作为返回页面

Get方式请求:

 @RequestMapping(value = "/init")//二级目录
public String init() {System.out.println("==========进入了springMVC的控制器=========");System.out.println("返回业务层,调用持久层");return "success";//返回方法执行完要跳转的页面名称
}

Post方式请求

package com.stringzhua.springboot_web_demo01.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;/*** @Author Stringzhua* @Date 2024/9/18 12:05* description:*/
@Controller
@RequestMapping("/user")//一级目录
public class UserController {/*** @RequestMapping 意义:处理用户的请求,相似于doget与dopost* 位置:* 类上:一级目录* 方法:二级目录* 例如:user/save* user/delete* student/save* student/delete* 属性:* value = "",path = "" value等同于path,只有它时可省略* 表示请求路径* =========================* method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式* =========================* params = ""* 限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数* 注意:1.超链接默认发送的是get请求* 2.所有请求所携带的参数格式均为:key = value* @DeleteMapping 删除* @PutMapping 修改* @GetMapping 查询* @PostMapping 新增* @RequestMapping 可以点击查看源码* @Target({ElementType.METHOD,ElementType.TYPE}) METHOD==代表修饰方法,TYPE==代表修饰类*/@RequestMapping(value = "/show1", method = {RequestMethod.POST})public String show1() {System.out.println("==========进入了springMVC的控制器=========");System.out.println("使用post方式发送请求访问show1");return "success";}
}

限制请求携带的参数

@RequestMapping(value = "/show2", params = {"param1=aa", "param2=bb"})
public String show2() {System.out.println("==========进入了springMVC的控制器=========");return "success";
}

@GetMapping

//postman测试
@GetMapping("/show3")
public String show3() {System.out.println("==========进入了springMVC的控制器=========");System.out.println("必须使用get方式请求[默认]查询");return "success";
}

@PostMapping

 @PostMapping("/show4")
public String show4() {System.out.println("==========进入了springMVC的控制器=========");System.out.println("必须使用post方式请求新增");return "success";
}

@DeleteMapping

@DeleteMapping("/show5")
public String show5() {System.out.println("==========进入了springMVC的控制器=========");System.out.println("必须使用delete方式请求删除");return "success";
}

@PutMapping

@PutMapping("/show6")
public String show6() {System.out.println("==========进入了springMVC的控制器=========");System.out.println("必须使用put方式请求修改");return "success";
}

SpringMVC-参数绑定

springMVC请求参数的绑定

绑定的机制:SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的

支持数据类型:

1.基本类型参数:

           包括基本类型和 String 类型

2.POJO类型参数:

            包括实体类,以及关联的实体类

3.数组和集合类型参数:

            包括 List 结构和 Map 结构的集合(包括数组)

4.使用 ServletAPI 对象作为方法参数

     HttpServletRequestHttpServletResponseHttpSessionjava.security.PrincipalLocaleInputStreamOutputStreamReaderWriter

使用要求

  1. 发送请求中携带数据的key与方法参数的name必须一致
  2. 数据类型合法

测试项目准备:

controller层OneController的完整代码:

package com.stringzhua.springboot_web_demo02.controller;/*** @Author Stringzhua* @Date 2024/9/18 16:27* description:*/import com.stringzhua.springboot_web_demo02.pojo.Dep;
import com.stringzhua.springboot_web_demo02.pojo.Emp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;/*** springMVC请求参数的绑定* 绑定的机制:SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的** 一.支持数据类型:*      1.基本类型参数:*                  包括基本类型和 String 类型*      2.POJO类型参数:*                  包括实体类,以及关联的实体类*      3.数组和集合类型参数:*                  包括 List 结构和 Map 结构的集合(包括数组)*      4.使用 ServletAPI 对象作为方法参数*          HttpServletRequest*          HttpServletResponse*          HttpSession*          java.security.Principal*          Locale*          InputStream*          OutputStream*          Reader*          Writer**  二.使用要求*     1.发送请求中携带数据的key与方法参数的name必须一致*     2.数据类型合法** */
@Controller
@RequestMapping("/one")
public class OneController {//打开one的html页面@RequestMapping("/show")public String show(){return "one";}/***********************基本类型和 String 类型作为参数*********************************/@RequestMapping("/show1")public String show1(String msg1){System.out.println("接收到用户发送的数据为:" + msg1);return "success";}@RequestMapping("/show2")public String show2(String msg1,int msg2){System.out.println("接收到用户发送的数据为:" + msg1);System.out.println("接收到用户发送的数据为:" + msg2);return "success";}/***********************POJO 类型作为参数*********************************///单一对象@RequestMapping("/show3")public String show3(Emp emp){System.out.println("接收到用户发送的数据为:" + emp);return "success";}//对象嵌套@RequestMapping("/show4")public String show4(Emp emp){System.out.println("接收到用户发送的数据为:" + emp);return "success";}//数组、map集合[list集合不行]@RequestMapping("/map")public String map(@RequestParam Map map){System.out.println(map);return "success";}/***********************POJO 类型中包含集合类型的参数*********************************/@RequestMapping("/show5")public String show5(Dep dep){System.out.println("接受到用户发送数据为" + dep);return "success";}@RequestMapping("/show6")public String show6(int[] nums){System.out.println("接受到用户发送数据为" + Arrays.toString(nums));return "success";}/*********************使用 ServletAPI 对象作为方法参数*********************************/@RequestMapping("/show7")public String show7(HttpServletRequest request, HttpServletResponse response){
//        request.setCharacterEncoding("UTF-8");
//        response.setCharacterEncoding("UTF-8");System.out.println(request);System.out.println(response);request.getParameter("msg1");HttpSession session =     request.getSession();System.out.println(session);session.setAttribute("","");//        try {
//            response.sendRedirect("重定向");
//        } catch (IOException e) {
//            e.printStackTrace();
//        }ServletContext applaction =  session.getServletContext();return "success";}
}

pojo下创建俩实体类:

Dep.java

package com.stringzhua.springboot_web_demo02.pojo;import java.util.List;
import java.util.Map;/*** @Author Stringzhua* @Date 2024/9/18 16:38* description:*/
public class Dep {private int did;private String dname;//依赖员工集合private List<Emp> mylist;private Map<String, Emp> myMap;@Overridepublic String toString() {return "Dep{" +"did=" + did +", dname='" + dname + '\'' +", mylist=" + mylist +", myMap=" + myMap +'}';}public int getDid() {return did;}public void setDid(int did) {this.did = did;}public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;}public List<Emp> getMylist() {return mylist;}public void setMylist(List<Emp> mylist) {this.mylist = mylist;}public Map<String, Emp> getMyMap() {return myMap;}public void setMyMap(Map<String, Emp> myMap) {this.myMap = myMap;}
}

Emp.java

package com.stringzhua.springboot_web_demo02.pojo;/*** @Author Stringzhua* @Date 2024/9/18 16:37* description:*/
public class Emp {private int eid;private String ename;private String esex;//emp依赖的dep对象private Dep dept;@Overridepublic String toString() {return "Emp{" +"eid=" + eid +", ename='" + ename + '\'' +", esex='" + esex + '\'' +", dept=" + dept +'}';}public int getEid() {return eid;}public void setEid(int eid) {this.eid = eid;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public String getEsex() {return esex;}public void setEsex(String esex) {this.esex = esex;}public Dep getDept() {return dept;}public void setDept(Dep dept) {this.dept = dept;}
}

配置类同上,templates下创建两个页面

one.html

<!DOCTYPE html>
<html lang="cn" xmlns:th="http://www.thymeleaf.org">
<head><title>Title</title>
</head>
<body><h1>springMVC控制器方法参数作用:接受用户请求中的数据</h1><hr/><h3>基本类型和 String 类型作为参数</h3><a href="/one/show1?msg1=9527">发送请求1</a><a href="/one/show2?msg1=jdk&msg2=9527">发送请求2</a><h3>POJO 类型作为参数</h3><a href="/one/show3?eid=1&ename=郭凡&esex=小奶狗">发送请求3</a><form action="/one/show4" method="post">员工编号:<input type="text" name="eid" ><br/>员工姓名:<input type="text" name="ename" ><br/>员工性别:<input type="text" name="esex" ><br/>部门编号:<input type="text" name="dept.did" ><br/>部门名称:<input type="text" name="dept.dname" ><br/><input type="submit" value="发送请求4"/></form><form action="/one/map" method="post">员工编号:<input type="text" name="eids"><br/>员工姓名:<input type="text" name="enames"><br/>员工性别:<input type="text" name="esexs"><br/><input type="submit" value="发送请求4(map)"/></form><h3>POJO 类中包含集合类型参数</h3><form action="/one/show5" method="post">部门编号:<input type="text" name="did" ><br/>部门名称:<input type="text" name="dname" ><br/>员工编号1:<input type="text" name="mylist[0].eid" ><br/>员工姓名1:<input type="text" name="mylist[0].ename" ><br/>员工性别1:<input type="text" name="mylist[0].esex" ><br/>员工编号2:<input type="text" name="mylist[1].eid" ><br/>员工姓名2:<input type="text" name="mylist[1].ename" ><br/>员工性别2:<input type="text" name="mylist[1].esex" ><br/>员工编号3:<input type="text" name="myMap['one'].eid" ><br/>员工姓名3:<input type="text" name="myMap['one'].ename" ><br/>员工性别3:<input type="text" name="myMap['one'].esex" ><br/>员工编号4:<input type="text" name="myMap['two'].eid" ><br/>员工姓名4:<input type="text" name="myMap['two'].ename" ><br/>员工性别4:<input type="text" name="myMap['two'].esex" ><br/><input type="submit" value="发送请求5"/></form><a href="/one/show6?nums=123&nums=456&nums=789">发送请求6</a><h3>使用 ServletAPI 对象作为方法参数</h3><a href="/one/show7">发送请求7</a></body>
</html>

success.html

<!DOCTYPE html>
<head><meta charset="UTF-8"><title>success</title>
</head>
<body><h1>spring成功页面</h1>
</body>
</html>

基本类型和 String 类型作为参数

OneController

单个参数

package com.stringzhua.springboot_web_demo02.controller;/*** @Author Stringzhua* @Date 2024/9/18 16:27* description:*/import com.stringzhua.springboot_web_demo02.pojo.Dep;
import com.stringzhua.springboot_web_demo02.pojo.Emp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;/*** springMVC请求参数的绑定* 绑定的机制:SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的** 一.支持数据类型:*      1.基本类型参数:*                  包括基本类型和 String 类型*      2.POJO类型参数:*                  包括实体类,以及关联的实体类*      3.数组和集合类型参数:*                  包括 List 结构和 Map 结构的集合(包括数组)*      4.使用 ServletAPI 对象作为方法参数*          HttpServletRequest*          HttpServletResponse*          HttpSession*          java.security.Principal*          Locale*          InputStream*          OutputStream*          Reader*          Writer**  二.使用要求*     1.发送请求中携带数据的key与方法参数的name必须一致*     2.数据类型合法** */
@Controller
@RequestMapping("/one")
public class OneController {//打开one的html页面@RequestMapping("/show")public String show(){return "one";}/***********************基本类型和 String 类型作为参数*********************************/@RequestMapping("/show1")public String show1(String msg1){System.out.println("接收到用户发送的数据为:" + msg1);return "success";}
}

访问http://localhost:8080/one/show

进入主页面,点击发送请求1


多个参数

@RequestMapping("/show2")public String show2(String msg1,int msg2){System.out.println("接收到用户发送的数据为:" + msg1);System.out.println("接收到用户发送的数据为:" + msg2);return "success";}

进入主页面,点击发送请求2:

POJO类型作为参数

单一对象

 /***********************POJO 类型作为参数*********************************///单一对象@RequestMapping("/show3")public String show3(Emp emp){System.out.println("接收到用户发送的数据为:" + emp);return "success";}

进入主页面,点击发送请求3:


对象嵌套

//对象嵌套@RequestMapping("/show4")public String show4(Emp emp){System.out.println("接收到用户发送的数据为:" + emp);return "success";}

进入主页面,填写表单,点击发送请求4:


@RequestParam

//数组、map集合[list集合不行]@RequestMapping("/map")public String map(@RequestParam Map map){System.out.println(map);return "success";}

进入主界面,填写表单,点击发送请求4(map)

POJO 类中包含集合类型参数

/***********************POJO 类型中包含集合类型的参数*********************************/@RequestMapping("/show5")public String show5(Dep dep){System.out.println("接受到用户发送数据为" + dep);return "success";}

进入主页面,填写表单,点击发送请求5:


@RequestMapping("/show6")public String show6(int[] nums){System.out.println("接受到用户发送数据为" + Arrays.toString(nums));return "success";}

使用 ServletAPI 对象作为方法参数

/*********************使用 ServletAPI 对象作为方法参数*********************************/@RequestMapping("/show7")public String show7(HttpServletRequest request, HttpServletResponse response){
//        request.setCharacterEncoding("UTF-8");
//        response.setCharacterEncoding("UTF-8");System.out.println(request);System.out.println(response);request.getParameter("msg1");HttpSession session =     request.getSession();System.out.println(session);session.setAttribute("","");//        try {
//            response.sendRedirect("重定向");
//        } catch (IOException e) {
//            e.printStackTrace();
//        }ServletContext applaction =  session.getServletContext();return "success";}

SpringMVC-常用注解

@RequestParam

作用:

  • 把请求中指定名称的参数给控制器中的形参赋值。
  • 如果页面标签名称和方法参数名称不一致,可以使用此注解实现

属性:

  • name属性:设置参数名称
  • defaultValue属性:设置默认值
  • required属性:设置是否为必传

测试:

项目结构:

name属性

单个参数

package com.stringzhua.springboot_web_demo03.controller;/*** @Author Stringzhua* @Date 2024/9/18 22:49* description:*/import com.stringzhua.springboot_web_demo03.pojo.Emp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;/*** springMVC常用注解** 一.@RequestParam*      作用:*          把请求中指定名称的参数给控制器中的形参赋值。*          如果页面标签名称和方法参数名称不一致,可以使用此注解实现*      属性:*          name属性:设置参数名称*          defaultValue属性:设置默认值*          required属性:设置是否为必传** 二.@RequestBody json*      作用:*          用于获取"请求体"内容。直接使用得到是 key=value&key=value...*          结构的数据,并可以转换为对象*      属性:*          required:是否必须有请求体。默认值是:true。**** 三.@PathVaribale*      作用:*          用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},*          这个{id}就是 url 占位符。url 支持占位符是 spring3.0 之*          后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志*      属性:*          value:用于指定 url 中占位符名称。*          required:是否必须提供占位符。**  Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。*  主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,*  更易于实现缓存机制等。**  Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:*       GET:用于获取资源*       POST:用于新建资源*       PUT:用于更新资源*       DELETE:用于删除资源* 例如:*  /users/1                GET :      得到 id = 1 的 user*  /users/1                DELETE:    删除 id = 1 的 user*  /users/1/新名/新性       PUT:       更新 id = 1 的 user*  /users/新名/新性         POST:      新增 user** */
@Controller
@RequestMapping("/one")
public class OneController {@RequestMapping("/show1")public String show1(@RequestParam(name = "msg1") String msg){System.out.println("接收到用户发送数据为" + msg);return "success";}
}

使用postman测试:

es.postman_collection.json


多个参数

@RequestMapping("/show2")
public String show2(@RequestParam("msg1") String msg,@RequestParam("msg2") String num){System.out.println("接收到用户发送数据为" + msg);System.out.println("接收到用户发送数据为" + num);return "success";
}


defaultValue属性:设置默认值

@RequestMapping("/show3")
public String show3(@RequestParam(name = "uname",defaultValue = "暂无用户") String name){System.out.println("用户名"+name);return "success";
}

如果不传参数,测试:

@RequestBody

作用:

  • 用于获取"请求体"内容。直接使用得到是 key=value&key=value…
  • 结构的数据,并可以转换为对象

属性:

  • required:是否必须有请求体。默认值是:true。

测试:

/*** 前后端分离* @RequestBody可以将json ===》 javaBean* 注意:*  1.前端不能使用GET方式提交数据,GET方式无请求体* {* 	"eid":007,* 	"ename":"詹姆斯邦德",* 	"esex":"绅士"* }** * *///RequestBody注解解析json字符串,要求json字段直接使用得到key=value&@RequestMapping("/show4")public String show4(@RequestBody Emp emp){System.out.println(emp);return "success";}

@PathVariable

作用:

  • 用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},
  • 这个{id}就是 url 占位符。url 支持占位符是 spring3.0 之后加入的,是 springmvc 支持 rest 风格 URL 的一个重要标志

属性:

value:用于指定 url 中占位符名称。

required:是否必须提供占位符。

测试:

@RequestMapping("/show5/{uname}/{pwd}")
public String show5(@PathVariable("uname")String msg1,@PathVariable("pwd")String msg2){System.out.println(msg1);System.out.println(msg2);return "success";
}

当参数名和字段名相同时,省略@PathVariable()括号中的内容,进行简写

@RequestMapping("/show6/{uname}/{pwd}")
public String show6(@PathVariable String uname,@PathVariable String pwd){System.out.println(uname);System.out.println(pwd);return "success";
}

restFul

Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。

主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,

更易于实现缓存机制等。

Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:

  •  GET:用于获取资源
  •  POST:用于新建资源
  •  PUT:用于更新资源
  •  DELETE:用于删除资源

例如:

  •  /users/1                GET :      得到 id = 1 的 user
  •  /users/1                DELETE:    删除 id = 1 的 user
  •  /users/1/新名/新性       PUT:       更新 id = 1 的 user
  •  /users/新名/新性         POST:      新增 user

@RequestHeader

**作用:**用于获取请求消息头。

属性:

value:提供消息头名称

required:是否必须有此消息头

测试:

package com.stringzhua.springboot_web_demo03.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;/*** @Author Stringzhua* @Date 2024/9/19 10:38* description:*/
/**** springMVC常用注解** 四.@RequestHeader*      作用:*          用于获取请求消息头。*      属性:*          value:提供消息头名称*          required:是否必须有此消息头* 五.@CookieValue*      作用:*          用于把指定 cookie 名称的值传入控制器方法参数。*      属性:*          value:指定 cookie 的名称。*          required:是否必须有此 cookie。** */
@Controller
@RequestMapping("/two")
public class TwoController {/*** 获取头信息* @param msg* @return*/@RequestMapping("/show1")public String show1(@RequestHeader(value = "msg1") String msg){System.out.println(msg);return "success";}
}

@CookieValue

**作用:**用于把指定 cookie 名称的值传入控制器方法参数。

属性:

value:指定 cookie 的名称。

required:是否必须有此 cookie

测试:

/*** 获取cookie*/
@RequestMapping("/show2")
public String show2(@CookieValue(value = "JSESSIONID",required = false)String jsonid){System.out.println(jsonid);return "success";
}

SpringMVC-数据传递

准备工作:

index.html

<!DOCTYPE html>
<html lang="cn">
<head><title>Title</title>
</head>
<body><h3>springMVC控制器返回字符串</h3><a href="/string/show1">发送请求1</a><br/><a href="/string/show2">发送请求2</a><br/><a href="/string/show3">发送请求3</a><br/><a href="/string/show4">发送请求4</a><br/><hr/><h3>springMVC控制器返回json字符串</h3><a href="/json/show1">发送请求1</a><br/><a href="/json/show2">发送请求2</a><br/>
</body>
</html>

success_String.html

注意 测试发送请求123时,将span标签删掉 要不然会报错

<!DOCTYPE html>
<html lang="cn">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>返回值String成功页面</h1>
<!--        <span>#(session.emp.eid)</span>-->
<!--        <span>#(session.emp.ename)</span>-->
<!--        <span>#(session.emp.esex)</span><br/>-->
</body>
</html>

主页面

字符串


充当视图的逻辑名称,默认页面跳转为请求转发方式

package com.stringzhua.springboot_web_demo04.controller;import com.stringzhua.springboot_web_demo04.pojo.Emp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;/*** @Author Stringzhua* @Date 2024/9/19 11:20* description:*/
@Controller
@RequestMapping("/string")
public class StringController {/*** 进入首页*/@RequestMapping("/show")public String show() {return "index";}//请求转发//充当试图的逻辑名称,默认页面跳转为请求转发方式@RequestMapping("/show1")public String show1() {System.out.println("===show1转发...===");return "success_String";}
}


充当一次请求重定向

//作充当一次请求重定向,url地址改变,显示的页面改变
// http://localhost:8080/string/show1
@RequestMapping("/show2")
public String show2() {System.out.println("===show2重定向===");return "redirect:show1";
}


充当一次请求转发

//作充当一次请求转发,url地址不变,但显示的页面改变// http://localhost:8080/string/show3@RequestMapping("/show3")public String show3() {System.out.println("===show3转发===");return "forward:show1";}


通过session传入数据.

先修改下页面:

//ServletAPI@RequestMapping("/show4")public String show4(HttpServletRequest request) {System.out.println("===show4===");//模拟查询数据库Emp emp = new Emp(1, "猫猫头", "男");//设置sessionrequest.getSession().setAttribute("emp", emp);return "success_String";}


JSON

package com.stringzhua.springboot_web_demo04.controller;import com.stringzhua.springboot_web_demo04.pojo.Emp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @Author Stringzhua* @Date 2024/9/19 11:59* description:*//*** @ResponseBody 对象====>json* 位置:1.类* 2.方法* @RequestBody json====>对象* 位置:方法参数* @RestController =  @Controller  +  @ResponseBody*/
//@Controller
//@ResponseBody
@RestController
@RequestMapping("/json")
public class JsonController {@RequestMapping("/show1")@ResponseBodypublic List<Emp> show1() {List<Emp> list = new ArrayList<>();Emp emp1 = new Emp(2, "柳永", "男");Emp emp2 = new Emp(3, "橙橙", "男");Emp emp3 = new Emp(1, "李郁", "女");list.add(emp1);list.add(emp2);list.add(emp3);return list;}@RequestMapping("/show2")@ResponseBody//不加ResponseBody注解,就是逻辑地址的页面,加了就是json串,如果返回值是String类型不转,其他的都是json串
//    public String show2(){
//        return "特殊";
//    }
//    public int show2(){
//        return 50;
//    }
//    public Emp show2() {
//        return new Emp(1, "李郁", "女");
//    }public Map<String, Emp> show2() {HashMap<String, Emp> map = new HashMap<>();map.put("1", new Emp(2, "柳永", "男"));map.put("2", new Emp(3, "橙橙", "男"));map.put("3", new Emp(1, "李郁", "女"));return map;}}

@RequestMapping("/show2")
@ResponseBody//不加ResponseBody注解,就是逻辑地址的页面,加了就是json串,如果返回值是String类型不转,其他的都是json串
public String show2(){return "特殊";
}

SpringMVC-文件上传

项目结构:

1.导入文件上传的坐标:

<!-- 文件上传-->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version>
</dependency>
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version>
</dependency>

导入前端页面:

success.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>文件上传</title>
</head>
<body>
上传成功
<span>#(session.picname)</span>
<img src="http://sk1sw9rkd.hn-bkt.clouddn.com/#(session.picname)"/>
<form action="delete" method="post" enctype="multipart/form-data"><button>删除</button>
</form>
</body>
</html>

upload.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>文件上传</title>
</head>
<body>
<form action="fileupload" method="post" enctype="multipart/form-data">用户名:<input name="uname"/><br>图片:<input name="upic" type="file"/><br><input type="submit" value="上传图片"/>
</form>
</body>
</html>


2.编写Controller层:

@Controller
public class OneController {//进入测试页面@RequestMapping("/show")public String show(){return  "index";}//文件上传@RequestMapping("/fileupload")public String fileload(String uname, MultipartFile upic, HttpServletRequest request){System.out.println("用户名"+uname);System.out.println(upic);System.out.println(upic.getOriginalFilename());System.out.println(upic.getName());return "success_File";}
}

一般将文件upic以流的方式写入当前服务器磁盘(应用服务器)

这里我们使用文件服务器 七牛云

重新修改为七牛云的Controller:

package com.stringzhua.springboot_web_demo05.controller;import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;/*** @Author Stringzhua* @Date 2024/9/19 14:14* description:*/
@Controller
public class UploadController {@RequestMapping("upload")public String upload() {return "upload";}//文件上传@RequestMapping("/fileupload")public String fileupload(String uname, MultipartFile upic, HttpServletRequest request) {//获取文件信息System.out.println("用户名" + uname);System.out.println(upic);System.out.println(upic.getOriginalFilename());System.out.println(upic.getName());//将文件保存到磁盘的某处//方式1.将文件upic以流的方式写入当前服务器磁盘(应用服务器)//方式2.文件服务器(七牛云)//构造一个带指定 Region 对象的配置类Configuration cfg = new Configuration(Region.autoRegion());//...其他参数参考类注释UploadManager uploadManager = new UploadManager(cfg);//生成上传凭证,准备开始上传String accessKey = "Farupk0sMM7VMjF3xluaFTjwUQ-DtwA1QW1LOvMH";String secretKey = "kdzeXaRT8uiV2KZfX1YF89vTu11wDeT2fwGqGlBu";String bucket = "stringzhuaworkspace";//默认不指定key的情况下,以文件内容的hash值作为文件名String key = null;String name = null;try {byte[] uploadBytes = upic.getBytes();Auth auth = Auth.create(accessKey, secretKey);String upToken = auth.uploadToken(bucket);try {Response response = uploadManager.put(uploadBytes, key, upToken);//解析上传成功的结果DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);System.out.println(putRet.key);//获取文件名System.out.println(putRet.hash);//获取文件hash值name = putRet.key;} catch (QiniuException ex) {Response r = ex.response;System.err.println(r.toString());try {System.err.println(r.bodyString());} catch (QiniuException ex2) {//ignore}}} catch (Exception ex) {//ignore}request.getSession().setAttribute("picname", name);return "success";}//删除文件@RequestMapping("delete")public String delete(String uname, MultipartFile upic, HttpServletRequest request) {//构造一个带指定 Region 对象的配置类Configuration cfg = new Configuration(Region.region0());//...其他参数参考类注释String accessKey = "Farupk0sMM7VMjF3xluaFTjwUQ-DtwA1QW1LOvMH";String secretKey = "kdzeXaRT8uiV2KZfX1YF89vTu11wDeT2fwGqGlBu";String bucket = "stringzhuaworkspace";String key = (String) request.getSession().getAttribute("picname");System.out.println(key);Auth auth = Auth.create(accessKey, secretKey);BucketManager bucketManager = new BucketManager(auth, cfg);try {bucketManager.delete(bucket, key);} catch (QiniuException ex) {//如果遇到异常,说明删除失败System.err.println(ex.code());System.err.println(ex.response.toString());}return "upload";}
}

需要上传自己的密钥 并且新建一个存储空间

注意设置为公开 否则上传失败:

导入七牛云需要的坐标:

<!--        七牛云文件上传需要的坐标-->
<dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>7.2.25</version>
</dependency>
<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.14.2</version><scope>compile</scope>
</dependency>
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version><scope>compile</scope>
</dependency>
<dependency><groupId>com.qiniu</groupId><artifactId>happy-dns-java</artifactId><version>0.1.6</version><scope>test</scope>
</dependency>

启动项目,测试上传:

上传成功!

点击删除按钮,删除七牛云上的图片:

删除成功!

其他的详细操作,请查阅七牛云文档!

https://developer.qiniu.com/kodo/1650/chunked-upload

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com