池州网站seo图表设计网站
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:32
当前位置: 首页 > news >正文
池州网站seo,图表设计网站,wordpress微商城模板下载地址,国内优秀包装设计作品赏析目录 前言 一. SpringMVC文件上传
- 配置多功能视图解析器
- 前端代码中#xff0c;将表单标记为多功能表单
- 后端利用MultipartFile 接口#xff0c;接收前端传递到后台的文件
- 文件上传示例
- 相关依赖#xff1a; 2. 逆向生成对应的类
- 后端代码#xf…目录 前言 一. SpringMVC文件上传
- 配置多功能视图解析器
- 前端代码中将表单标记为多功能表单
- 后端利用MultipartFile 接口接收前端传递到后台的文件
- 文件上传示例
- 相关依赖 2. 逆向生成对应的类
- 后端代码
- 前端代码
- 多文件上传 二. SpringMVC文件下载 三. jrebel的使用
- jrebel是什么
- jrebel的安装 3.jrebel的使用 前言 在实际的项目开发中文件的上传和下载可以说是最常用的功能之一例如图片的上传与下载、邮件附件的上传和下载等。本篇我们将对 Spring MVC 中的文件上传和文件下载功能进行分享。 一. SpringMVC文件上传 在 Spring MVC 中想要实现文件上传工作需要的步骤如下
- 配置多功能视图解析器 Spring MVC 提供了一个名为 MultipartResolver 的文件解析器来实现文件上传功能。MultipartResolver 本身是一个接口我们需要通过它的实现类来完成对它的实例化工作。 MultipartResolver 接口共有两个实现类如下表 实现类说明依赖支持的 Servlet 版本StandardServletMultipartResolver它是 Servlet 内置的上传功能。不需要第三方 JAR 包的支持。 仅支持 Servlet 3.0 及以上版本CommonsMultipartResolver借助 Apache 的 commons-fileupload 来完成具体的上传操作。需要 Apache 的 commons-fileupload 等 JAR 包的支持。不仅支持 Servlet 3.0 及以上版本还可以在比较旧的 Servlet 版本中使用。 以上这两个 MultipartResolver 的实现类无论使用哪一个都可以实现 Spring MVC 的文件上传功能。这里我以 CommonsMultipartResolver 为例。 导入pom相关依赖 dependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion1.3.3/version /dependency 想要在 Spring MVC 中使用 CommonsMultipartResolver 对象实现文件上传我们需要在 Spring MVC 的配置文件中对其进行以下配置 !– 处理文件上传与下载–bean idmultipartResolver classorg.springframework.web.multipart.commons.CommonsMultipartResolver!– 必须和用户JSP 的pageEncoding属性一致以便正确解析表单的内容 –property namedefaultEncoding valueUTF-8/property!– 文件最大大小(字节) 1024*1024*5050M–property namemaxUploadSize value52428800/property!–resolveLazily属性启用是为了推迟文件解析以便捕获文件大小异常–property nameresolveLazily valuetrue//bean 通过 property 可以对 CommonsMultipartResolver 的多个属性进行配置其中常用的属性如下表。 属性说明defaultEncoding上传文件的默认编码格式。maxUploadSize上传文件的最大长度单位为字节。maxInMemorySize读取文件到内存中的最大字节数。resolveLazily判断是否要延迟解析文件。 注意当我们在 Spring MVC 的配置文件中对 CommonsMultipartResolver 的 Bean 进行定义时必须指定这个 Bean 的 id 为 multipartResolver否则就无法完成文件的解析和上传工作。 2. 前端代码中将表单标记为多功能表单 在 Spring MVC 项目中大多数的文件上传功能都是通过 form 表单提交到后台服务器的。 form 表单想要具有文件上传功能其必须满足以下 3 个条件。 form 表单的 method 属性必须设置为 post。form 表单的 enctype 属性设置为 multipart/form-data。至少提供一个 type 属性为 file 的 input 输入框。 示例代码如下 % page contentTypetext/html;charsetUTF-8 languagejava % html headtitle图片上传/title /head body form action\({pageContext.request.contextPath }/clazz/upload methodpost enctypemultipart/form-datalabel班级编号/labelinput typetext namecid readonlyreadonly value\){param.cid}/br/label班级图片/labelinput typefile namexxx/br/input typesubmit value上传图片/ /form /body /html 当 form 表单的 enctype 属性为 multipart/form-data 时浏览器会以二进制流的方式对表单数据进行处理由服务端对文件上传的请求进行解析和处理。
- 后端利用MultipartFile 接口接收前端传递到后台的文件 controller层 // 文件上传RequestMapping(/upload)public String upload(clazz clazz,MultipartFile xxx){try { // 上传的图片真实存放地址String dir PropertiesUtil.getValue(dir); // 网络访问地址String server PropertiesUtil.getValue(server);String filename xxx.getOriginalFilename();System.out.println(文件名filename);String contentType xxx.getContentType();System.out.println(文件类别contentType);FileUtils.copyInputStreamToFile(xxx.getInputStream(),new File(dirfilename)); // 更新数据库表t_struts_class图片记录clazz.setPic(serverfilename);clazzBiz.updateByPrimaryKeySelective(clazz);} catch (IOException e) {e.printStackTrace();}return redirect:clzlist;} 在该控制器方法中包含一个 org.springframework.web.multipart.MultipartFile 接口类型的形参该参数用来封装被上传文件的信息。MultipartFile 接口是 InputStreamSource 的子接口该接口中提供了多个不同的方法如下表。 名称作用byte[] getBytes()以字节数组的形式返回文件的内容。String getContentType()返回文件的内容类型。InputStream getInputStream()返回一个 input 流从中读取文件的内容。String getName()返回请求参数的名称。String getOriginalFillename()返回客户端提交的原始文件名称。long getSize()返回文件的大小单位为字节。boolean isEmpty()判断被上传文件是否为空。void transferTo(File destination)将上传文件保存到目标目录下。
- 文件上传示例
- 相关依赖 web配置如下 ?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsdversion3.1display-nameArchetype Created Web Application/display-name!– Spring和web项目集成start –!– spring上下文配置文件 –context-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:spring-context.xml/param-value/context-param!– 读取Spring上下文的监听器 –listenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listener!– Spring和web项目集成end –!– 中文乱码处理 –filterfilter-nameencodingFilter/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classasync-supportedtrue/async-supportedinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-param/filterfilter-mappingfilter-nameencodingFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping!– Spring MVC servlet –servletservlet-nameSpringMVC/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class!–此参数可以不配置默认值为/WEB-INF/springmvc-servlet.xml–init-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:spring-mvc.xml/param-value/init-paramload-on-startup1/load-on-startup!–web.xml 3.0的新特性是否支持异步–async-supportedtrue/async-supported/servletservlet-mappingservlet-nameSpringMVC/servlet-nameurl-pattern//url-pattern/servlet-mapping /web-appspring-mvc.xml配置文件如下 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:aophttp://www.springframework.org/schema/aopxmlns:mvchttp://www.springframework.org/schema/mvcxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd!–1) 扫描com.xissl及子子孙孙包下的控制器(扫描范围过大耗时)–context:component-scan base-packagecom.xissl/!–2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter –mvc:annotation-driven /!–3) 创建ViewResolver视图解析器 –bean classorg.springframework.web.servlet.view.InternalResourceViewResolver!– viewClass需要在pom中引入两个包standard.jar and jstl.jar –property nameviewClassvalueorg.springframework.web.servlet.view.JstlView/propertyproperty nameprefix value/WEB-INF/jsp//property namesuffix value.jsp//bean!–4) 单独处理图片、样式、js等资源 –!– mvc:resources location/css/ mapping/css//mvc:resources location/js/ mapping/js//mvc:resources locationWEB-INF/images/ mapping/images/**/–!– 处理文件上传与下载–bean idmultipartResolver classorg.springframework.web.multipart.commons.CommonsMultipartResolver!– 必须和用户JSP 的pageEncoding属性一致以便正确解析表单的内容 –property namedefaultEncoding valueUTF-8/property!– 文件最大大小(字节) 1024*1024*5050M–property namemaxUploadSize value52428800/property!–resolveLazily属性启用是为了推迟文件解析以便捕获文件大小异常–property nameresolveLazily valuetrue//bean!– 处理controller层发送请求到biz会经过切面的拦截处理–aop:aspectj-autoproxy/ /beans 数据库配置文件jdbc.properties jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost/mybatis_ssm?useUnicodetruecharacterEncodingUTF-8 jdbc.usernameroot jdbc.password123456 generatorConfig.xml: ?xml version1.0 encodingUTF-8 ? !DOCTYPE generatorConfiguration PUBLIC -//mybatis.org//DTD MyBatis Generator Configuration 1.0//ENhttp://mybatis.org/dtd/mybatis-generator-config_1_0.dtd generatorConfiguration!– 引入配置文件 –properties resourcejdbc.properties/!–指定数据库jdbc驱动jar包的位置–classPathEntry locationD:\maven\mvn_repository\mysql\mysql-connector-java\5.1.44\mysql-connector-java-5.1.44.jar/!– 一个数据库一个context –context idinfoGuardian!– 注释 –commentGeneratorproperty namesuppressAllComments valuetrue/!– 是否取消注释 –property namesuppressDate valuetrue/ !– 是否生成注释代时间戳 –/commentGenerator!– jdbc连接 –jdbcConnection driverClass\({jdbc.driver}connectionURL\){jdbc.url} userId\({jdbc.username} password\){jdbc.password}/!– 类型转换 –javaTypeResolver!– 是否使用bigDecimal false可自动转化以下类型Long, Integer, Short, etc. –property nameforceBigDecimals valuefalse//javaTypeResolver!– 01 指定javaBean生成的位置 –!– targetPackage指定生成的model生成所在的包名 –!– targetProject指定在该项目下所在的路径 –javaModelGenerator targetPackagecom.xissl.modeltargetProjectsrc/main/java!– 是否允许子包即targetPackage.schemaName.tableName –property nameenableSubPackages valuefalse/!– 是否对model添加构造函数 –property nameconstructorBased valuetrue/!– 是否针对string类型的字段在set的时候进行trim调用 –property nametrimStrings valuefalse/!– 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法只有构造方法 –property nameimmutable valuefalse//javaModelGenerator!– 02 指定sql映射文件生成的位置 –sqlMapGenerator targetPackagecom.xissl.mappertargetProjectsrc/main/java!– 是否允许子包即targetPackage.schemaName.tableName –property nameenableSubPackages valuefalse//sqlMapGenerator!– 03 生成XxxMapper接口 –!– typeANNOTATEDMAPPER,生成Java Model 和基于注解的Mapper对象 –!– typeMIXEDMAPPER,生成基于注解的Java Model 和相应的Mapper对象 –!– typeXMLMAPPER,生成SQLMap XML文件和独立的Mapper接口 –javaClientGenerator targetPackagecom.xissl.mappertargetProjectsrc/main/java typeXMLMAPPER!– 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model true:com.oop.eksp.user.model.[schemaName] –property nameenableSubPackages valuefalse//javaClientGenerator!– 配置表信息 –!– schema即为数据库名 –!– tableName为对应的数据库表 –!– domainObjectName是要生成的实体类 –!– enable*ByExample是否生成 example类 –!–table schema tableNamet_book domainObjectNameBook–!–enableCountByExamplefalse enableDeleteByExamplefalse–!–enableSelectByExamplefalse enableUpdateByExamplefalse–!–lt;!ndash; 忽略列不生成bean 字段 ndash;gt;–!–lt;!ndash; ignoreColumn columnFRED / ndash;gt;–!–lt;!ndash; 指定列的java数据类型 ndash;gt;–!–lt;!ndash; columnOverride columnLONG_VARCHAR_FIELD jdbcTypeVARCHAR / ndash;gt;–!–/table–table schema tableNamet_struts_class domainObjectNameclazzenableCountByExamplefalse enableDeleteByExamplefalseenableSelectByExamplefalse enableUpdateByExamplefalse/table/context /generatorConfiguration 2. 逆向生成对应的类 班级实体类clazz package com.xissl.model;import lombok.ToString;ToString public class clazz {private Integer cid;private String cname;private String cteacher;private String pic;public clazz(Integer cid, String cname, String cteacher, String pic) {this.cid cid;this.cname cname;this.cteacher cteacher;this.pic pic;}public clazz() {super();}public Integer getCid() {return cid;}public void setCid(Integer cid) {this.cid cid;}public String getCname() {return cname;}public void setCname(String cname) {this.cname cname;}public String getCteacher() {return cteacher;}public void setCteacher(String cteacher) {this.cteacher cteacher;}public String getPic() {return pic;}public void setPic(String pic) {this.pic pic;} } mapper接口 package com.xissl.mapper;import com.xissl.model.clazz; import org.springframework.stereotype.Repository;import java.util.List;Repository public interface clazzMapper {int deleteByPrimaryKey(Integer cid);int insert(clazz record);int insertSelective(clazz record);clazz selectByPrimaryKey(Integer cid);int updateByPrimaryKeySelective(clazz record);int updateByPrimaryKey(clazz record);Listclazz listPager(clazz clazz); } sql映射文件 ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.xissl.mapper.clazzMapper resultMap idBaseResultMap typecom.xissl.model.clazz constructor idArg columncid jdbcTypeINTEGER javaTypejava.lang.Integer /arg columncname jdbcTypeVARCHAR javaTypejava.lang.String /arg columncteacher jdbcTypeVARCHAR javaTypejava.lang.String /arg columnpic jdbcTypeVARCHAR javaTypejava.lang.String //constructor/resultMapsql idBase_Column_List cid, cname, cteacher, pic/sqlselect idlistPager resultTypecom.xissl.model.clazz parameterTypecom.xissl.model.clazz selectinclude refidBase_Column_List /from t_struts_classwhereif testcname ! nulland cname like concat(%,#{cname},%)/if/where/selectselect idselectByPrimaryKey resultMapBaseResultMap parameterTypejava.lang.Integer select include refidBase_Column_List /from t_struts_classwhere cid #{cid,jdbcTypeINTEGER}/selectdelete iddeleteByPrimaryKey parameterTypejava.lang.Integer delete from t_struts_classwhere cid #{cid,jdbcTypeINTEGER}/deleteinsert idinsert parameterTypecom.xissl.model.clazz insert into t_struts_class (cid, cname, cteacher, pic)values (#{cid,jdbcTypeINTEGER}, #{cname,jdbcTypeVARCHAR}, #{cteacher,jdbcTypeVARCHAR}, #{pic,jdbcTypeVARCHAR})/insertinsert idinsertSelective parameterTypecom.xissl.model.clazz insert into t_struts_classtrim prefix( suffix) suffixOverrides, if testcid ! null cid,/ifif testcname ! null cname,/ifif testcteacher ! null cteacher,/ifif testpic ! null pic,/if/trimtrim prefixvalues ( suffix) suffixOverrides, if testcid ! null #{cid,jdbcTypeINTEGER},/ifif testcname ! null #{cname,jdbcTypeVARCHAR},/ifif testcteacher ! null #{cteacher,jdbcTypeVARCHAR},/ifif testpic ! null #{pic,jdbcTypeVARCHAR},/if/trim/insertupdate idupdateByPrimaryKeySelective parameterTypecom.xissl.model.clazz update t_struts_classset if testcname ! null cname #{cname,jdbcTypeVARCHAR},/ifif testcteacher ! null cteacher #{cteacher,jdbcTypeVARCHAR},/ifif testpic ! null pic #{pic,jdbcTypeVARCHAR},/if/setwhere cid #{cid,jdbcTypeINTEGER}/updateupdate idupdateByPrimaryKey parameterTypecom.xissl.model.clazz update t_struts_classset cname #{cname,jdbcTypeVARCHAR},cteacher #{cteacher,jdbcTypeVARCHAR},pic #{pic,jdbcTypeVARCHAR}where cid #{cid,jdbcTypeINTEGER}/update /mapper
- 后端代码 业务逻辑层 package com.xissl.biz;import com.xissl.model.clazz; import com.xissl.utils.PageBean; import org.springframework.stereotype.Repository;import java.util.List;Repository public interface clazzBiz {int deleteByPrimaryKey(Integer cid);int insert(clazz record);int insertSelective(clazz record);clazz selectByPrimaryKey(Integer cid);int updateByPrimaryKeySelective(clazz record);int updateByPrimaryKey(clazz record);Listclazz listPager(clazz clazz, PageBean pageBean); } package com.xissl.biz.impl;import com.xissl.biz.clazzBiz; import com.xissl.mapper.clazzMapper; import com.xissl.model.clazz; import com.xissl.utils.PageBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;/*** author xissl* create 2023-09-11 8:26*/ Service public class clazzBizImpl implements clazzBiz {Autowiredprivate clazzMapper clazzMapper;Overridepublic int deleteByPrimaryKey(Integer cid) {return clazzMapper.deleteByPrimaryKey(cid);}Overridepublic int insert(clazz record) {return clazzMapper.insert(record);}Overridepublic int insertSelective(clazz record) {return clazzMapper.insertSelective(record);}Overridepublic clazz selectByPrimaryKey(Integer cid) {return clazzMapper.selectByPrimaryKey(cid);}Overridepublic int updateByPrimaryKeySelective(clazz record) {return clazzMapper.updateByPrimaryKeySelective(record);}Overridepublic int updateByPrimaryKey(clazz record) {return clazzMapper.updateByPrimaryKey(record);}Overridepublic Listclazz listPager(clazz clazz, PageBean pageBean) {return clazzMapper.listPager(clazz);}}controller层 package com.xissl.web;import com.xissl.biz.clazzBiz; import com.xissl.model.clazz; import com.xissl.utils.PageBean; import com.xissl.utils.PropertiesUtil; import org.apache.commons.io.FileUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.util.List;Controller RequestMapping(clazz) public class clazzController {Autowiredprivate clazzBiz clazzBiz;// 增RequestMapping(/add)public String add(clazz clazz){int i clazzBiz.insertSelective(clazz);return redirect:clzlist;}// 删RequestMapping(/del/{cid})public String del(PathVariable(cid) Integer cid){clazzBiz.deleteByPrimaryKey(cid);return redirect:/clz/clzlist;}// 改RequestMapping(/edit)public String edit(clazz clazz){clazzBiz.updateByPrimaryKey(clazz);return redirect:clzlist;}// 查RequestMapping(/clzlist)public String list(clazz clazz, HttpServletRequest request){ // clazz clazz是前台用来给后台传递参数的PageBean pageBean new PageBean();pageBean.setRequest(request);Listclazz clzs clazzBiz.listPager(clazz,pageBean);request.setAttribute(list,clzs);request.setAttribute(pageBean,pageBean);return clz/clzlist;}// 数据回显RequestMapping(/preSave)public String preSave(clazz clazz, Model model){if(clazz ! null clazz.getCid()!null clazz.getCid()!0){clazz c clazzBiz.selectByPrimaryKey(clazz.getCid());model.addAttribute(c,c);}return clz/clzedit;}// 文件上传RequestMapping(/upload)public String upload(clazz clazz,MultipartFile xxx){try { // 上传的图片真实存放地址String dir PropertiesUtil.getValue(dir); // 网络访问地址String server PropertiesUtil.getValue(server);String filename xxx.getOriginalFilename();System.out.println(文件名filename);String contentType xxx.getContentType();System.out.println(文件类别contentType);FileUtils.copyInputStreamToFile(xxx.getInputStream(),new File(dirfilename)); // 更新数据库表t_struts_class图片记录clazz.setPic(serverfilename);clazzBiz.updateByPrimaryKeySelective(clazz);} catch (IOException e) {e.printStackTrace();}return redirect:clzlist;} }工具类PropertiesUtil package com.xissl.utils;import java.io.IOException; import java.io.InputStream; import java.util.Properties;public class PropertiesUtil {public static String getValue(String key) throws IOException {Properties p new Properties();InputStream in PropertiesUtil.class.getResourceAsStream(/resource.properties);p.load(in);return p.getProperty(key);}}配置文件 resource.properties: dirD:/temp/upload/ server/upload/ PageController处理页面跳转 package com.xissl.web;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping;// 处理页面跳转 Controller public class PageController {RequestMapping(/page/{page})public String toPage(PathVariable(page) String page){return page;}RequestMapping(/page/{dir}/{page})public String toRePage(PathVariable(dir) String dir,PathVariable(page) String page){return dir / page;} }4. 前端代码 clzlist.jsp: %–Created by IntelliJ IDEA.User: xisslDate: 2023/9/9Time: 14:46To change this template use File | Settings | File Templates. –% % page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8% % taglib urihttp://jsp.veryedu.cn prefixz% % taglib urihttp://java.sun.com/jsp/jstl/core prefixc% !DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd html headmeta http-equivContent-Type contenttext/html; charsetUTF-8linkhrefhttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.cssrelstylesheetscriptsrchttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js/scripttitle班级列表/titlestyle typetext/css.page-item input {padding: 0;width: 40px;height: 100%;text-align: center;margin: 0 6px;}.page-item input, .page-item b {line-height: 38px;float: left;font-weight: 400;}.page-item.go-input {margin: 0 10px;}/style /head body form classform-inlineaction\({pageContext.request.contextPath }/clazz/clzlist methodpostdiv classform-group mb-2input typetext classform-control-plaintext namesnameplaceholder请输入班级名称!-- input namerows value20 typehidden --!-- 不想分页 --%-- input namepagination valuefalse typehidden--%/divbutton typesubmit classbtn btn-primary mb-2查询/buttona classbtn btn-primary mb-2 href\){pageContext.request.contextPath }/clazz/preSave新增/a /formtable classtable table-stripedtheadtrth scopecol班级编号/thth scopecol班级名称/thth scopecol带班教员/thth scopecol班级logo/thth scopecol操作/th/tr/theadtbodyc:forEach varb items\({list }trtd\){b.cid }/tdtd\({b.cname }/tdtd\){b.cteacher }/tdtdimg src\({b.pic } styleheight: 50px;width: 40px;/tdtda href\){pageContext.request.contextPath }/clazz/preSave?cid\({b.cid}修改/aa href\){pageContext.request.contextPath }/clazz/del/\({b.cid}删除/aa href\){pageContext.request.contextPath }/page/clz/upload?cid\({b.cid}图片上传/aa href\){pageContext.request.contextPath }/clazz/download?cid\({b.cid}图片下载/a/td/tr/c:forEach/tbody /table !-- 这一行代码就相当于前面分页需求前端的几十行了 -- z:page pageBean\){pageBean }/z:page/body /htmlclzedit.jsp: % page contentTypetext/html;charsetUTF-8 languagejava % html headtitle编辑界面/title /head body form action\({pageContext.request.contextPath }/\){empty c ? clazz/add : clazz/edit} methodpost班级编号:input typetext namecid value\({s.cid }br班级名称:input typetext namecname value\){s.cname }br带班教员:input typetext namecteacher value\({s.cteacher }br班级logo:input typetext namepic value\){s.pic }brinput typesubmit /form /body /html upload.jsp: % page contentTypetext/html;charsetUTF-8 languagejava % html headtitle图片上传/title /head body form action\({pageContext.request.contextPath }/clazz/upload methodpost enctypemultipart/form-datalabel班级编号/labelinput typetext namecid readonlyreadonly value\){param.cid}/br/label班级图片/labelinput typefile namexxx/br/input typesubmit value上传图片/ /form /body /html
- 多文件上传 在input 标签中增加一个 multiple 属性。该属性可以让我们同时选择对多个文件进行上传即实现多文件上传功能。 //多文件上传RequestMapping(/uploads)public String uploads(HttpServletRequest req, clazz clazz, MultipartFile[] files){try {StringBuffer sb new StringBuffer();for (MultipartFile cfile : files) {//思路//1) 将上传图片保存到服务器中的指定位置String dir PropertiesUtil.getValue(dir);String server PropertiesUtil.getValue(server);String filename cfile.getOriginalFilename();FileUtils.copyInputStreamToFile(cfile.getInputStream(),new File(dirfilename));sb.append(filename).append(,);}System.out.println(sb.toString());} catch (Exception e) {e.printStackTrace();}return redirect:list;} 二. SpringMVC文件下载 文件下载的含义十分简单它指的就是将服务器中的文件下载到本机上。 controller层 RequestMapping(value/download)public ResponseEntitybyte[] download(clazz clazz, HttpServletRequest req){try {//先根据文件id查询对应图片信息clazz clz this.clazzBiz.selectByPrimaryKey(clazz.getCid());String diskPath PropertiesUtil.getValue(dir);String reqPath PropertiesUtil.getValue(server);String realPath clz.getPic().replace(reqPath,diskPath);String fileName realPath.substring(realPath.lastIndexOf(/)1);//下载关键代码File filenew File(realPath);HttpHeaders headers new HttpHeaders();//http头信息String downloadFileName new String(fileName.getBytes(UTF-8),iso-8859-1);//设置编码headers.setContentDispositionFormData(attachment, downloadFileName);headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);//MediaType:互联网媒介类型 contentType具体请求中的媒体类型信息return new ResponseEntitybyte;}catch (Exception e){e.printStackTrace();}return null;} 三. jrebel的使用
- jrebel是什么 JRebel 是国外团队开发的一款收费工具JRebel 允许开发团队在有限的时间内完成更多的任务修正更多的问题发布更高质量的软件产品JRebel 可快速实现热部署节省了大量重启时间提高了个人开发效率。 JRebel 是一款 JAVA 虚拟机插件它使得 Java 程序员能在不进行重部署的情况下即时看到代码的改变对一个应用程序带来的影响。
- jrebel的安装 打开IDEA选择File—Settings—Plugins—在右侧选择Marketplace在搜索框输入jrebel—选择搜索结果—点击Install安装如下图。 3.jrebel的使用 下载激活软件github github地址 1.下载后双击运行该程序ReverseProxy_windows_amd64.exewindow 64位系统
- jrebel启动项目 注意一定要先打开代理ReverseProxy_windows_amd64.exe再启动jrebel 启动就jrebel后会弹出一个提示框让你进行激活点击激活即可。 激活地址填写http://127.0.0.1:8888 后面再拼接一个GUID 在线GUID地址 然后点击Activate JRebel就可以激活了 激活成功后点击Work online切换到离线状态
- 上一篇: 澄迈网站制作申请企业邮箱步骤是什么?
- 下一篇: 池州网站建设价格免费软件网站下载
相关文章
-
澄迈网站制作申请企业邮箱步骤是什么?
澄迈网站制作申请企业邮箱步骤是什么?
- 技术栈
- 2026年03月21日
-
澄迈网站制作软件开发和程序员哪个工资高
澄迈网站制作软件开发和程序员哪个工资高
- 技术栈
- 2026年03月21日
-
程序源代码下载网站果洛wap网站建设
程序源代码下载网站果洛wap网站建设
- 技术栈
- 2026年03月21日
-
池州网站建设价格免费软件网站下载
池州网站建设价格免费软件网站下载
- 技术栈
- 2026年03月21日
-
池州网站建设哪家好建设网站的必要性
池州网站建设哪家好建设网站的必要性
- 技术栈
- 2026年03月21日
-
池州网站设计哪个视频网站有潮汕做爰视频
池州网站设计哪个视频网站有潮汕做爰视频
- 技术栈
- 2026年03月21日






