• idea装载jerbel以及文件上传下载


    一、JRebel

    1.1 Jrebel介绍 

      JRebel是一个Java开发工具,它是一款用于实时代码重载的插件。它的主要功能是在不重新启动应用程序的情况下,将修改后的Java代码实时应用到正在运行的应用程序中,从而加快开发周期,提高开发效率。

    • 实时代码重载:JRebel可以监测开发人员对Java代码的修改,并将这些修改实时应用到正在运行的应用程序中,无需重新启动应用程序。这样,开发人员可以立即看到他们的代码更改的效果,节省了重新编译和部署的时间。
    • 支持多种框架和服务器:JRebel支持多种Java框架和服务器,包括Spring、Hibernate、Java EE、Tomcat、Jetty等。无论是开发Web应用程序还是企业级应用程序,JRebel都可以与常用的开发框架和服务器集成,提供实时代码重载的功能。
    • 高度兼容性:JRebel与大多数Java开发工具和集成开发环境(IDE)兼容,如Eclipse、IntelliJ IDEA、NetBeans等。开发人员可以在他们喜欢的IDE中使用JRebel插件,无需切换到其他工具。
    • 快速部署:JRebel可以加快应用程序的部署速度,因为它只需要将修改后的代码应用到运行中的应用程序,而不需要重新启动整个应用程序。这对于大型应用程序和复杂的部署环境特别有用。
    • 支持多种开发场景:JRebel可以应用于各种开发场景,包括本地开发、远程开发、云开发等。无论是单机开发还是分布式开发,JRebel都可以提供实时代码重载的功能。

            总的来说,JRebel是一个强大的Java开发工具,它通过实时代码重载的功能,使开发人员能够在不重新启动应用程序的情况下,快速应用他们对Java代码的修改。这大大提高了开发效率,减少了开发周期,使开发人员能够更专注于代码的编写和调试。

    1.2 Jrebel插件下载

    首先我们要到idea的插件商店中下载jerbel插件

    然后进入gitup的开源网站,下载jerbel 

    Release v1.4 · ilanyu/ReverseProxy · GitHub

    我用的是windows的就下载windows and64就行

    下载到指定位置以后,双击启动服务

    出现这个就是启动成功了

    然后我们进入idea,激活jerbel

     点击之后,会弹出激活界面

    第一栏填入

    http://localhost:8888/

    后面接上GUID码,这里也提供一个给大家,Create GUID online (guidgen.com)

     第二栏是自己的电子邮箱

     值得注意的是,我在填第一栏的地址的时候,使用127.0.0.1不可以,但是使用localhost就可以了,知道的大佬可以评论区指点指点

     激活成功之后,我们就可以jerbel启动了

    1.3 jerbel离线设置

    因为我们每一次使用erble都需要启动服务太过麻烦,所以此时我们需要设置离线模式

    我这里是因为我已经开启了,没开启只有一个按钮,是off开头的,点击开启就好了

    开启之后我们再次启动jerble就不需要再次启动服务了

    值得注意的是,我们在关闭程序之前,需要先关闭tomcat,再关闭服务,这样离线使用时,我们就不需要再去开启jerbel了

    二、文件的上传和下载操作

    2.1 导入pom依赖

    1. <commons-fileupload.version>1.3.3commons-fileupload.version>
    2. <dependency>
    3. <groupId>commons-fileuploadgroupId>
    4. <artifactId>commons-fileuploadartifactId>
    5. <version>${commons-fileupload.version}version>
    6. dependency>

    2.2 配置文件上传解析器

    在spring-mvc.xml文件中添加文件上传解析器。

    1. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    2. <property name="defaultEncoding" value="UTF-8">property>
    3. <property name="maxUploadSize" value="52428800">property>
    4. <property name="resolveLazily" value="true"/>
    5. bean>

    这段代码配置了一个名为"multipartResolver"的Bean,用于处理文件上传。通过设置"defaultEncoding"属性、"maxUploadSize"属性和"resolveLazily"属性,可以指定文件上传时的字符编码、最大上传大小和延迟文件解析的行为。这样,Spring框架在处理文件上传时会根据这些配置进行相应的解析和限制。 
     

    2.3、指定文件上传的表单

    文件上传的表单指定enctype属性为multipart/form-data

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <html>
    3. <head>
    4. <base href="${pageContext.request.contextPath }">
    5. <title>文件上传title>
    6. head>
    7. <body>
    8. <form action="/file/upload" method="post" enctype="multipart/form-data">
    9. <label>编号:label><input type="text" name="id" readonly="readonly" value="${param.id}"/><br/>
    10. <label>图片:label><input type="file" name="imgFile"/><br/>
    11. <input type="submit" value="上传图片"/>
    12. form>
    13. body>
    14. html>

    2.4、设置项目的映射地址

     
    

     2.5、编写控制器

    1. package com.liwen.web;
    2. import com.liwen.biz.UploadImgBiz;
    3. import com.liwen.model.UploadImg;
    4. import com.liwen.utils.PageBean;
    5. import com.liwen.utils.PropertiesUtil;
    6. import org.apache.commons.io.FileUtils;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.stereotype.Controller;
    9. import org.springframework.web.bind.annotation.PathVariable;
    10. import org.springframework.web.bind.annotation.RequestMapping;
    11. import org.springframework.web.multipart.MultipartFile;
    12. import javax.servlet.http.HttpServletRequest;
    13. import java.io.File;
    14. import java.io.IOException;
    15. import java.util.List;
    16. /**
    17. * @author 云村小威
    18. * @site blog.csdn.net/Justw320
    19. * @create 2023-09-10 16:50
    20. */
    21. @Controller
    22. @RequestMapping("/file")
    23. public class UploadImgController {
    24. @Autowired
    25. private UploadImgBiz uploadImgBiz;
    26. /*新增方法*/
    27. @RequestMapping("/add")
    28. public String save(UploadImg uploadImg, HttpServletRequest request) {
    29. uploadImgBiz.insertSelective(uploadImg);
    30. return "redirect:list";
    31. }
    32. /*删除方法*/
    33. @RequestMapping("/del/{id}")
    34. public String del(@PathVariable("id") Integer id) {
    35. uploadImgBiz.deleteByPrimaryKey(id);
    36. return "redirect:/file/list";
    37. }
    38. /*修改方法*/
    39. @RequestMapping("/edit")
    40. public String edit(UploadImg uploadImg, HttpServletRequest request) {
    41. uploadImgBiz.updateByPrimaryKeySelective(uploadImg);
    42. return "redirect:list";
    43. }
    44. /*查询方法*/
    45. @RequestMapping("/list")
    46. public String list(UploadImg uploadImg, HttpServletRequest request) {
    47. PageBean pageBean = new PageBean();
    48. pageBean.setRequest(request);
    49. List uploadImgs = uploadImgBiz.listPager(uploadImg, pageBean);
    50. // ModelAndView modelAndView = new ModelAndView();
    51. // modelAndView.addObject("UploadImgs", UploadImgs);
    52. // modelAndView.addObject("pageBean", pageBean);
    53. // modelAndView.setViewName("UploadImg/list");
    54. request.setAttribute("uploadImgs", uploadImgs);
    55. request.setAttribute("pageBean", pageBean);
    56. return "file/list";
    57. }
    58. /*数据回显*/
    59. @RequestMapping("/preSave")
    60. public String preSave(UploadImg uploadImg, HttpServletRequest request) {
    61. if (uploadImg != null && uploadImg.getId() != null && uploadImg.getId() != 0) {
    62. UploadImg img = uploadImgBiz.selectByPrimaryKey(uploadImg.getId());
    63. request.setAttribute("img", img);
    64. }
    65. return "file/edit";
    66. }
    67. /*图片上传*/
    68. @RequestMapping("upload")
    69. public String upload(UploadImg img,MultipartFile imgFile) throws IOException {
    70. //读取配置文夹本地路径和服务器路径
    71. String dir = PropertiesUtil.getValue("dir");
    72. String server = PropertiesUtil.getValue("server");
    73. //利用MultipartFile类接受前端传递到后台的文件
    74. System.out.println("文件名:"+imgFile.getOriginalFilename());
    75. System.out.println("文件类型:"+imgFile.getContentType());
    76. //将文件转成流写入到服务器
    77. FileUtils.copyInputStreamToFile(imgFile.getInputStream(),new File(dir+imgFile.getOriginalFilename()));
    78. //通过对象将图片保存到数据库
    79. img.setImg(server+imgFile.getOriginalFilename());
    80. uploadImgBiz.updateByPrimaryKeySelective(img);
    81. return "redirect:list";
    82. }
    83. /*文件下载*/
    84. @RequestMapping("/download")
    85. public ResponseEntity<byte[]> download(UploadImg uploadImg, HttpServletRequest req){
    86. try {
    87. //先根据文件id查询对应图片信息
    88. UploadImg img = this.uploadImgBiz.selectByPrimaryKey(uploadImg.getId());
    89. String diskPath = PropertiesUtil.getValue("dir");
    90. String reqPath = PropertiesUtil.getValue("server");
    91. //上面获取的数据库地址,需要转换才能下载成本地路径
    92. String realPath = img.getImg().replace(reqPath,diskPath);
    93. String fileName = realPath.substring(realPath.lastIndexOf("/")+1);
    94. //下载关键代码
    95. File file=new File(realPath);
    96. HttpHeaders headers = new HttpHeaders();//http头信息
    97. String downloadFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//设置编码
    98. headers.setContentDispositionFormData("attachment", downloadFileName);
    99. headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    100. //MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息
    101. return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK);
    102. }catch (Exception e){
    103. e.printStackTrace();
    104. }
    105. return null;
    106. }
    107. }

    2.6、jsp页面

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3. <%@ taglib prefix="w" uri="http://jsp.veryedu.cn" %>
    4. <html>
    5. <head>
    6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    7. <link
    8. href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"
    9. rel="stylesheet">
    10. <script
    11. src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js">script>
    12. <base href="${pageContext.request.contextPath }">
    13. <title>博客列表title>
    14. <style type="text/css">
    15. .page-item input {
    16. padding: 0;
    17. width: 40px;
    18. height: 100%;
    19. text-align: center;
    20. margin: 0 6px;
    21. }
    22. .page-item input, .page-item b {
    23. line-height: 38px;
    24. float: left;
    25. font-weight: 400;
    26. }
    27. .page-item.go-input {
    28. margin: 0 10px;
    29. }
    30. style>
    31. head>
    32. <body>
    33. <form class="form-inline"
    34. action="/file/list" method="post">
    35. <div class="form-group mb-2">
    36. <input type="text" class="form-control-plaintext" name="name"
    37. placeholder="请输入用户名称">
    38. div>
    39. <button type="submit" class="btn btn-primary mb-2">查询button>
    40. <a class="btn btn-primary mb-2" href="/file/preSave">新增a>
    41. form>
    42. <table class="table table-striped">
    43. <thead>
    44. <tr>
    45. <th scope="col">IDth>
    46. <th scope="col">用户th>
    47. <th scope="col">图片th>
    48. tr>
    49. thead>
    50. <tbody>
    51. <c:forEach var="i" items="${uploadImgs }">
    52. <tr>
    53. <td>${i.id }td>
    54. <td>${i.name }td>
    55. <td>
    56. <img src="${i.img }" style="width: 200px;height: 100px;">
    57. td>
    58. <td>
    59. <a href="/file/preSave?id=${i.id}">修改a>
    60. <a href="/file/del/${i.id}">删除a>
    61. <a href="/page/file/upload?id=${i.id}">图片上传a>
    62. <a href="/file/download?id=${i.id}">图片下载a>
    63. td>
    64. tr>
    65. c:forEach>
    66. tbody>
    67. table>
    68. <w:page pageBean="${pageBean }">w:page>
    69. body>
    70. html>

    三、多文件上传

    3.1、控制层

    1. //多文件上传
    2. @RequestMapping("/uploads")
    3. public String uploads(HttpServletRequest req, Student student, MultipartFile[] files){
    4. try {
    5. StringBuffer sb = new StringBuffer();
    6. for (MultipartFile cfile : files) {
    7. //思路:
    8. //1) 将上传图片保存到服务器中的指定位置
    9. String dir = PropertiesUtil.getValue("dir");
    10. String server = PropertiesUtil.getValue("server");
    11. String filename = cfile.getOriginalFilename();
    12. FileUtils.copyInputStreamToFile(cfile.getInputStream(),new File(dir+filename));
    13. sb.append(filename).append(",");
    14. }
    15. System.out.println(sb.toString());
    16. } catch (Exception e) {
    17. e.printStackTrace();
    18. }
    19. return "redirect:list";
    20. }

    3.2、jsp

    1. <a href="${pageContext.request.contextPath }/page/student/uploads">多文件上传a>
    2. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    3. <html>
    4. <head>
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <form action="${pageContext.request.contextPath }/student/uploads" method="post" enctype="multipart/form-data">
    9. <input type="file" name="files" multiple>
    10. <button type="submit">上传button>
    11. form>
    12. body>
    13. html>

  • 相关阅读:
    ACP敏捷.知识领域学习
    前端新轮子Nue JS,号称要打造全新的Web生态!!!
    Android OpenGL ES 3.0 粒子特效
    Dreamweaver网页设计与制作100例——HTML5期末考核大作业——票务网站整套网页
    数据结构——时间复杂度与空间复杂度
    [MAUI 项目实战] 手势控制音乐播放器(四):圆形进度条
    墨天轮专访星环科技刘熙:“向量热”背后的冷思考,Hippo如何打造“先发”优势?
    卷积神经网络卷积计算,卷积网络计算公式
    MPC入门与Matlab实现
    位运算及其应用
  • 原文地址:https://blog.csdn.net/Ying_hao_kun/article/details/132801948