当前位置:   article > 正文

springmvc框架

springmvc框架

1.什么是MVC?

MVC就是一个分层架构模式:

        M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

        V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操作的方式。

        C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

springMVC它是spring框架的一个分支,该springMVC框架主要完成的功能是:==接收浏览器的请求响应,对数据进行处理,然后返回页面进行显示== 可以把它理解为和Servlet干的工作是一样的。

2. springmvc如何搭建。依赖,配置文件,web.xml

1.创建maven-web工程。

用原来的web.xml文件替换现在的web.xml文件

2.在pom.xml中引入springmvc的依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. </web-app>

3.注册DispatcherServlet到web.xml文件上

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <!--默认DispactherServlet加载的springmvc配置文件:WEB-INF/[servlet-name]-servlet.xml-->
  7. <!--指定自己的配置文件-->
  8. <servlet>
  9. <servlet-name>DispactherServlet</servlet-name>
  10. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  11. <init-param>
  12. <param-name>contextConfigLocation</param-name>
  13. <!--classpath:表示编译后的路径-->
  14. <param-value>classpath:springmvc.xml</param-value>
  15. </init-param>
  16. </servlet>
  17. <servlet-mapping>
  18. <servlet-name>DispactherServlet</servlet-name>
  19. <url-pattern>/</url-pattern>
  20. </servlet-mapping>
  21. </web-app>

4.创建自己的springmvc.xml配置文件

 5.在springmvc.xml文件中加入包扫描

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
  6. <!--包扫描-->
  7. <context:component-scan base-package="com.xdh.controller"/>
  8. </beans>

6.创建一个类,在类上加上@Controller 并且在方法上加上@RequestMapping注解

  1. @Controller //该注解标记该类为处理层类---类似@WebServlet
  2. public class HelloController {
  3. @RequestMapping(value = "/hello01") //把请求路径映射到该方法上。
  4. public String hello01(){
  5. System.out.println("hello!");
  6. return "hello01.jsp"; //响应一个页面
  7. }
  8. }

3.springmvc如何接受请求的参数。

      [1]单个参数--方法中生成这个参数名

只需要给定方法的参数,参数必须要求和请求的参数名称一致。


      [2]多个参数--封装一个java实体类,方法中声明该实体类即可。


      [3]接受的为日期类型参数.

在时间类型的属性上添加一个注解:@DateTimeFormat(pattern = "yyyy-MM-dd")

  1. //yyyy年 MM:月 dd日 24小时制
  2. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  3. private Date birthday;//出生日期

 在springmvc配置文件上开启注解驱动

  1. <!--开启注解驱动-->
  2. <mvc:annotation-driven/>

4. 处理静态资源 

springmvc的前端控制器DispatcherSerlvet也把静态资源拦截器。放行静态资源

  1. <!--放行静态资源:哪些资源为静态资源。css img js html-->
  2. <mvc:default-servlet-handler/>

4. springmvc如何保存数据到网页: request,session ,model

request: 作用范围: 同一个请求内有效。setAttribute(key,value)

session:作用范围: 同一个会话有效,只要会话不关闭会一直有效。setAttribute(key,value)

model:默认是request范围,加@SessionAttributes会增加session范围

  1. package com.xdh.controller;
  2. import com.xdh.entity.Student;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.ui.Model;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.SessionAttribute;
  7. import org.springframework.web.bind.annotation.SessionAttributes;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpSession;
  10. import java.util.Date;
  11. /**
  12. * @author: xmhz45
  13. * @create: 2022/6/12
  14. */
  15. @Controller
  16. @SessionAttributes(value = {"user","user2"}) //设置哪些model的key在session范围
  17. public class HelloController02 {
  18. @RequestMapping("/list")
  19. public String list(HttpServletRequest request){
  20. //查询到一个学生信息。
  21. Student student=new Student(1,"张三","110@qq.com",new Date());
  22. //可以保存到request中,同一个请求
  23. request.setAttribute("s",student);
  24. return "list.jsp"; //转发
  25. }
  26. @RequestMapping("/list2")
  27. public String list2(Model model){ //如果你使用request,你和tomcat容器绑定了。 建议使用Model.
  28. //查询到一个学生信息。
  29. Student student=new Student(1,"张三","110@qq.com",new Date());
  30. //可以保存到model中,同一个请求 和request是一样。
  31. model.addAttribute("s2",student);
  32. return "list.jsp"; //转发
  33. }
  34. //上面讲解都是保存request范围。如何保存到session范围。
  35. @RequestMapping("/list3")
  36. public String list3(HttpSession session){
  37. Student student=new Student(3,"赵四","120@qq.com",new Date());
  38. session.setAttribute("user",student);
  39. return "list.jsp"; //转发
  40. }
  41. @RequestMapping("/list4")
  42. public String list4( Model model){
  43. Student student=new Student(3,"赵五","120@qq.com",new Date());
  44. Student student2=new Student(3,"赵六","120@qq.com",new Date());
  45. model.addAttribute("user",student);
  46. model.addAttribute("user2",student2); //默认在request范围
  47. return "list.jsp"; //转发
  48. }
  49. }

5. springmvc如何响应json数据。

    1.依赖jackson

  1. <!--jackson依赖 可以把java对象转换为json对象-->
  2. <dependency>
  3. <groupId>com.fasterxml.jackson.core</groupId>
  4. <artifactId>jackson-databind</artifactId>
  5. <version>2.13.2.2</version>
  6. </dependency>

    2.方法的返回类型为java对象类型并加上@ResponseBody

  1. package com.xdh.controller;
  2. import com.xdh.entity.User;
  3. import com.xdh.util.CommonResult;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpSession;
  9. /**
  10. * @author: xmhz45
  11. * @create: 2022/6/12
  12. */
  13. @Controller
  14. public class UserController {
  15. @RequestMapping(value = "/login")
  16. @ResponseBody
  17. public CommonResult login(User user, HttpServletRequest request){
  18. if ("aaa".equals(user.getUsername()) && "aaaa".equals(user.getPassword())){
  19. HttpSession session = request.getSession();
  20. session.setAttribute("user",user);
  21. return new CommonResult(2000,"登录成功",user);
  22. }else {
  23. return new CommonResult(2001,"账号或密码有误",null);
  24. }
  25. }
  26. }

 效果

 发现: 上面返回的时间类型的json数据显示的为毫秒,正常情况应该显示时间格式。如何解决。

@JsonFormat

 

6. 全局异常处理.

     创建一个类并使用@ControllerAdvice
     该类中创建异常处理的方法@ExceptionHandler

  1. @ControllerAdvice //表示该为类controller的异常处理类
  2. public class MyExceptinHandle {
  3. @ExceptionHandler(value = RuntimeException.class) //当发生RuntimeException就会触发该方法
  4. public String error(){
  5. return "error.jsp";
  6. }
  7. @ExceptionHandler(value = Exception.class) //当发生Exception就会触发该方法
  8. public String error2(){
  9. return "error2.jsp";
  10. }
  11. }

 保证springmvc能够扫描到该类。

 7. 拦截器:

         创建一个拦截器类并实现HandlerInterceptor接口。

         重写preHandler方法。写拦截器的业务代码。

  1. public class MyInterceptor implements HandlerInterceptor {
  2. //拦截器的处理方法。
  3. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  4. System.out.println("经过了该拦截器");
  5. return true;//true:表示拦截器放行 false:不放行
  6. }
  7. }


       注册到springmvc容器上.

  1. <!--拦截器的配置-->
  2. <mvc:interceptors>
  3. <mvc:interceptor>
  4. <!--mapping:哪些路径需要经过拦截器
  5. /**: 表示n层路径
  6. /*:表示一层路径
  7. -->
  8. <mvc:mapping path="/**"/>
  9. <!--exclude-mapping:设置不经过该拦截的路径-->
  10. <mvc:exclude-mapping path="/list2"/>
  11. <mvc:exclude-mapping path="/list3"/>
  12. <!--bean表示你自定义的拦截器类路径-->
  13. <bean class="com.ykq.interceptor.MyInterceptor"/>
  14. </mvc:interceptor>
  15. </mvc:interceptors>

8. springmvc文件上传.

 1.本地服务器上传.-------服务重启后文件不见了. 多态服务器无法共享文件。

(1)文件上传的依赖。

  1. <!--文件上传的依赖-->
  2. <dependency>
  3. <groupId>commons-fileupload</groupId>
  4. <artifactId>commons-fileupload</artifactId>
  5. <version>1.4</version>
  6. </dependency>

   (2) 创建一个页面

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. </head>
  6. <body>
  7. <%--
  8. method: 提交方式 文件上传必须为post提交。
  9. enctype:默认application/x-www-form-urlencoded 表示提交表单数据
  10. multipart/form-data:可以包含文件数据
  11. input的类型必须为file类型,而且必须有name属性
  12. --%>
  13. <form method="post" action="upload01" enctype="multipart/form-data">
  14. <input type="file" name="myfile"/>
  15. </form>
  16. </body>
  17. </html>

 (3)在springmvc中配置文件上传解析器

  1. <!--
  2. id的名称必须叫multipartResolver
  3. -->
  4. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  5. <!--这里的单位为字节10M*1024K*1024-->
  6. <property name="maxUploadSize" value="10485760"/>
  7. </bean>

   (4) 创建upload01接口方法

  1. //注意:MultipartFile 参数名必须和<input type="file" name="myfile"/>中name属性相同
  2. @RequestMapping("/upload01")
  3. public String upload01(MultipartFile myfile, HttpServletRequest request) throws Exception{
  4. //(1)得到本地服务目录的地址
  5. String path = request.getSession().getServletContext().getRealPath("upload");
  6. //(2)判断该目录是否存在
  7. File file=new File(path);
  8. if(!file.exists()){
  9. file.mkdirs();
  10. }
  11. //(3)//把myfile保存到本地服务中某个文件夹下。 缺点:文件的名称
  12. String filename= UUID.randomUUID().toString().replace("-","")+myfile.getOriginalFilename();
  13. File target=new File(path+"/"+filename);
  14. myfile.transferTo(target); //把myfile转移到目标目录下
  15. return "";
  16. }

  elementui+vue+axios完成文件上传

(1)页面的布局

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. <!--引入element得css样式-->
  6. <link type="text/css" rel="stylesheet" href="css/index.css"/>
  7. <!--引入vue得js文件 这个必须在element之前引入-->
  8. <script type="text/javascript" src="js/vue.js"></script>
  9. <script type="text/javascript" src="js/qs.min.js"></script>
  10. <script type="text/javascript" src="js/axios.min.js"></script>
  11. <!--element得js文件-->
  12. <script type="text/javascript" src="js/index.js"></script>
  13. </head>
  14. <body>
  15. <div id="app">
  16. <%--action:文件上传的路径--%>
  17. <el-upload
  18. class="avatar-uploader"
  19. action="/upload02"
  20. :show-file-list="false"
  21. :on-success="handleAvatarSuccess"
  22. :before-upload="beforeAvatarUpload">
  23. <img v-if="imageUrl" :src="imageUrl" class="avatar">
  24. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  25. </el-upload>
  26. </div>
  27. </body>
  28. <script>
  29. var app=new Vue({
  30. el:"#app",
  31. data:{
  32. imageUrl:"",
  33. },
  34. methods:{
  35. //上传成功后触发的方法
  36. handleAvatarSuccess(res, file) {
  37. this.imageUrl=res.data;
  38. },
  39. //上传前触发的方法
  40. beforeAvatarUpload(file) {
  41. const isJPG = file.type === 'image/jpeg';
  42. const isPNG = file.type === 'image/png';
  43. const isLt2M = file.size / 1024 / 1024 < 2;
  44. if (!isJPG) {
  45. this.$message.error('上传头像图片只能是 JPG 格式!');
  46. }
  47. if (!isLt2M) {
  48. this.$message.error('上传头像图片大小不能超过 2MB!');
  49. }
  50. return isJPG && isLt2M;
  51. }
  52. }
  53. })
  54. </script>
  55. <style>
  56. .avatar-uploader .el-upload {
  57. border: 1px dashed #d9d9d9;
  58. border-radius: 6px;
  59. cursor: pointer;
  60. position: relative;
  61. overflow: hidden;
  62. }
  63. .avatar-uploader .el-upload:hover {
  64. border-color: #409EFF;
  65. }
  66. .avatar-uploader-icon {
  67. font-size: 28px;
  68. color: #8c939d;
  69. width: 178px;
  70. height: 178px;
  71. line-height: 178px;
  72. text-align: center;
  73. }
  74. .avatar {
  75. width: 178px;
  76. height: 178px;
  77. display: block;
  78. }
  79. </style>
  80. </html>

(2)后台的接口

  1. @RequestMapping("/upload02")
  2. @ResponseBody
  3. public Map upload02(MultipartFile file, HttpServletRequest request) {
  4. try {
  5. //1.获取上传到服务器的文件夹路径
  6. String path = request.getSession().getServletContext().getRealPath("upload");
  7. File file1 = new File(path);
  8. //判断指定的目录是否存在
  9. if (!file1.exists()) {
  10. file1.mkdirs();
  11. }
  12. //设置上传后的文件名称
  13. String filename = UUID.randomUUID().toString().replace("-", "") + file.getOriginalFilename();
  14. File target = new File(path+"/"+filename);
  15. file.transferTo(target);
  16. Map map=new HashMap();
  17. map.put("code",2000);
  18. map.put("msg","上传成功");
  19. //通过访问服务器地址来访问图片.
  20. map.put("data","http://localhost:8080/upload/"+filename);
  21. return map;
  22. }catch (Exception e){
  23. e.printStackTrace();
  24. }
  25. Map map=new HashMap();
  26. map.put("code",5000);
  27. map.put("msg","上传失败");
  28. return map;
  29. }

2. 上传到oss阿里云的服务器

 上传到本地服务器的缺点: 如果搭建集群,导致文件无法在集群中共享。 它的解决方法就是把文件专门上传到一个文件服务器上,这些tomcat服务器都操作同一个文件服务器。

2.1 申请oss文件服务。

2.2 在oss界面上操作文件上传

(1)创建bucket容器

 

可以在该bucket中通过网页面板的形式操作该bucket.

但是实际开发我们应该通过java代码往bucket中上传文件。

2.3 申请阿里云的密钥

 

 

19. 普通的文件上传到OSS文件服务器

 

(1)引入阿里云的OSS依赖

  1. <dependency>
  2. <groupId>com.aliyun.oss</groupId>
  3. <artifactId>aliyun-sdk-oss</artifactId>
  4. <version>3.10.2</version>
  5. </dependency>

(2)代码的书写。

  1. @RequestMapping("/upload03")
  2. public String upload03(MultipartFile myfile,HttpServletRequest request){
  3. // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  4. String endpoint = "oss-cn-hangzhou.aliyuncs.com";
  5. // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  6. String accessKeyId = "xxxid";
  7. String accessKeySecret = "xxxkey";
  8. // 填写Bucket名称,例如examplebucket。
  9. String bucketName = "qy151";
  10. //你上传到oss后的名字 会根据日期帮你创建文件夹。
  11. Calendar calendar=Calendar.getInstance();
  12. String objectName =calendar.get(Calendar.YEAR)+"/"+(calendar.get(Calendar.MONTH)+1)+"/"+
  13. calendar.get(Calendar.DATE)+"/"+UUID.randomUUID().toString().replace("-","")+
  14. myfile.getOriginalFilename();
  15. // 创建OSSClient实例。
  16. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  17. try {
  18. InputStream inputStream =myfile.getInputStream();
  19. // 创建PutObject请求。
  20. ossClient.putObject(bucketName, objectName, inputStream);
  21. } catch (Exception oe) {
  22. } finally {
  23. if (ossClient != null) {
  24. ossClient.shutdown();
  25. }
  26. }
  27. //https://qy151.oss-cn-hangzhou.aliyuncs.com/2022/6/10/20d3d7e6b5bb455cb548675501f7270fgdnj.jpg
  28. String url="https://"+bucketName+"."+endpoint+"/"+objectName;
  29. request.setAttribute("imgUrl",url);
  30. return "success.jsp";
  31. }

3. elementui 异步上传OSS服务器

(1)前端

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. <!--引入element得css样式-->
  6. <link type="text/css" rel="stylesheet" href="css/index.css"/>
  7. <!--引入vue得js文件 这个必须在element之前引入-->
  8. <script type="text/javascript" src="js/vue.js"></script>
  9. <script type="text/javascript" src="js/qs.min.js"></script>
  10. <script type="text/javascript" src="js/axios.min.js"></script>
  11. <!--element得js文件-->
  12. <script type="text/javascript" src="js/index.js"></script>
  13. </head>
  14. <body>
  15. <div id="app">
  16. <%--action:文件上传的路径--%>
  17. <el-upload
  18. class="avatar-uploader"
  19. action="/upload04"
  20. :show-file-list="false"
  21. :on-success="handleAvatarSuccess"
  22. :before-upload="beforeAvatarUpload">
  23. <img v-if="imageUrl" :src="imageUrl" class="avatar">
  24. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  25. </el-upload>
  26. </div>
  27. </body>
  28. <script>
  29. var app=new Vue({
  30. el:"#app",
  31. data:{
  32. imageUrl:"",
  33. },
  34. methods:{
  35. //上传成功后触发的方法
  36. handleAvatarSuccess(res, file) {
  37. this.imageUrl=res.data;
  38. },
  39. //上传前触发的方法
  40. beforeAvatarUpload(file) {
  41. const isJPG = file.type === 'image/jpeg';
  42. const isPNG = file.type === 'image/png';
  43. const isLt2M = file.size / 1024 / 1024 < 2;
  44. if (!isJPG) {
  45. this.$message.error('上传头像图片只能是 JPG 格式!');
  46. }
  47. if (!isLt2M) {
  48. this.$message.error('上传头像图片大小不能超过 2MB!');
  49. }
  50. return isJPG && isLt2M;
  51. }
  52. }
  53. })
  54. </script>
  55. <style>
  56. .avatar-uploader .el-upload {
  57. border: 1px dashed #d9d9d9;
  58. border-radius: 6px;
  59. cursor: pointer;
  60. position: relative;
  61. overflow: hidden;
  62. }
  63. .avatar-uploader .el-upload:hover {
  64. border-color: #409EFF;
  65. }
  66. .avatar-uploader-icon {
  67. font-size: 28px;
  68. color: #8c939d;
  69. width: 178px;
  70. height: 178px;
  71. line-height: 178px;
  72. text-align: center;
  73. }
  74. .avatar {
  75. width: 178px;
  76. height: 178px;
  77. display: block;
  78. }
  79. </style>
  80. </html>
 

(2)后端工具:

  1. package com.xdh.utils;
  2. import com.aliyun.oss.OSS;
  3. import com.aliyun.oss.OSSClientBuilder;
  4. import org.springframework.web.multipart.MultipartFile;
  5. import java.io.InputStream;
  6. import java.util.Calendar;
  7. import java.util.UUID;
  8. public class OSSUtils {
  9. public static String upload(MultipartFile myfile){
  10. // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  11. String endpoint = "oss-cn-hangzhou.aliyuncs.com";
  12. // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  13. String accessKeyId = "xxxid";
  14. String accessKeySecret = "xxxkey";
  15. // 填写Bucket名称,例如examplebucket。
  16. String bucketName = "qy151";
  17. //你上传到oss后的名字 会根据日期帮你创建文件夹。
  18. String objectName =fileName(myfile);
  19. // 创建OSSClient实例。
  20. OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  21. try {
  22. InputStream inputStream =myfile.getInputStream();
  23. // 创建PutObject请求。
  24. ossClient.putObject(bucketName, objectName, inputStream);
  25. } catch (Exception oe) {
  26. } finally {
  27. if (ossClient != null) {
  28. ossClient.shutdown();
  29. }
  30. }
  31. //https://qy151.oss-cn-hangzhou.aliyuncs.com/2022/6/10/20d3d7e6b5bb455cb548675501f7270fgdnj.jpg
  32. String url="https://"+bucketName+"."+endpoint+"/"+objectName;
  33. return url;
  34. }
  35. //获取上传到oss后的名字
  36. private static String fileName(MultipartFile myfile){
  37. Calendar calendar=Calendar.getInstance();
  38. String name=calendar.get(Calendar.YEAR)+"/"+(calendar.get(Calendar.MONTH)+1)+"/"+
  39. calendar.get(Calendar.DATE)+"/"+ UUID.randomUUID().toString().replace("-","")+
  40. myfile.getOriginalFilename();
  41. return name;
  42. }
  43. }

(3) controller接口

  1. @RequestMapping("/upload04")
  2. @ResponseBody
  3. public Map upload04(MultipartFile file) {
  4. try {
  5. String url = OSSUtils.upload(file);
  6. Map map = new HashMap();
  7. map.put("code", 2000);
  8. map.put("msg", "上传成功");
  9. map.put("data", url);
  10. return map;
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. }
  14. HashMap map = new HashMap();
  15. map.put("code", 5000);
  16. map.put("msg", "上传失败");
  17. return map;
  18. }

4. 保存用户信息--头像

(1)前端的布局

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. <!--引入element得css样式-->
  6. <link type="text/css" rel="stylesheet" href="css/index.css"/>
  7. <!--引入vue得js文件 这个必须在element之前引入-->
  8. <script type="text/javascript" src="js/vue.js"></script>
  9. <script type="text/javascript" src="js/qs.min.js"></script>
  10. <script type="text/javascript" src="js/axios.min.js"></script>
  11. <!--element得js文件-->
  12. <script type="text/javascript" src="js/index.js"></script>
  13. </head>
  14. <body>
  15. <div id="app">
  16. <el-form label-width="80px" :model="userForm">
  17. <el-form-item label="头像:">
  18. <el-upload
  19. class="avatar-uploader"
  20. action="/uploadAvatar"
  21. :show-file-list="false"
  22. :on-success="handleAvatarSuccess"
  23. :before-upload="beforeAvatarUpload">
  24. <img v-if="imageUrl" :src="imageUrl" class="avatar">
  25. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  26. </el-upload>
  27. </el-form-item>
  28. <el-form-item label="账号:">
  29. <el-input v-model="userForm.name"></el-input>
  30. </el-form-item>
  31. <el-form-item label="密码:">
  32. <el-input v-model="userForm.pwd"></el-input>
  33. </el-form-item>
  34. <el-form-item label="地址:">
  35. <el-input v-model="userForm.address"></el-input>
  36. </el-form-item>
  37. <el-form-item>
  38. <el-button type="primary" @click="onSubmit">查询</el-button>
  39. </el-form-item>
  40. </el-form>
  41. </div>
  42. </body>
  43. <script>
  44. var app=new Vue({
  45. el:"#app",
  46. data:{
  47. userForm:{},
  48. imageUrl:""
  49. },
  50. methods:{
  51. handleAvatarSuccess(result,file){
  52. this.imageUrl=result.data;
  53. //为表单对象添加头像地址的属性
  54. this.userForm.avatarUrl=this.imageUrl;
  55. },
  56. //提交
  57. onSubmit(){
  58. axios.post("/addUser",this.userForm).then(function(result){
  59. });
  60. },
  61. //上传前触发的方法
  62. beforeAvatarUpload(file) {
  63. const isJPG = file.type === 'image/jpeg';
  64. const isPNG = file.type === 'image/png';
  65. const isLt2M = file.size / 1024 / 1024 < 2;
  66. if (!isJPG) {
  67. this.$message.error('上传头像图片只能是 JPG 格式!');
  68. }
  69. if (!isLt2M) {
  70. this.$message.error('上传头像图片大小不能超过 2MB!');
  71. }
  72. return isJPG && isLt2M;
  73. }
  74. }
  75. })
  76. </script>
  77. <style>
  78. .avatar-uploader .el-upload {
  79. border: 1px dashed #d9d9d9;
  80. border-radius: 6px;
  81. cursor: pointer;
  82. position: relative;
  83. overflow: hidden;
  84. }
  85. .avatar-uploader .el-upload:hover {
  86. border-color: #409EFF;
  87. }
  88. .avatar-uploader-icon {
  89. font-size: 28px;
  90. color: #8c939d;
  91. width: 178px;
  92. height: 178px;
  93. line-height: 178px;
  94. text-align: center;
  95. }
  96. .avatar {
  97. width: 178px;
  98. height: 178px;
  99. display: block;
  100. }
  101. </style>
  102. </html>

(2)后台代码

  1. package com.xdh.controller;
  2. import com.xdh.entity.User;
  3. import com.xdh.utils.CommonResult;
  4. import com.xdh.utils.OSSUtils;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestBody;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.ResponseBody;
  9. import org.springframework.web.multipart.MultipartFile;
  10. @Controller
  11. public class UserController {
  12. @RequestMapping("uploadAvatar")
  13. @ResponseBody
  14. public CommonResult uploadAvatar(MultipartFile file) {
  15. try {
  16. String avatar = OSSUtils.upload(file);
  17. return new CommonResult(2000, "上传成功", avatar);
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. }
  21. return new CommonResult(5000, "失败", null);
  22. }
  23. //@RequestBody:把请求体中json数据转换为java对象
  24. @RequestMapping("/addUser")
  25. @ResponseBody
  26. public CommonResult addUser(@RequestBody User user){
  27. System.out.println(user);
  28. //TODO 调用dao完成保存到数据库--省略
  29. return new CommonResult(2000,"成功",null);
  30. }
  31. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/586220
推荐阅读
  

闽ICP备14008679号