重温经典struts1之文件上传

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

今天来学习下,每个项目都会有的文件上传功能,看看struts是怎么实现的。


步骤

  • 编写三个jsp页面,一个是跳转到文件上传页面,一个是文件上传用,再一个是上传成功页面
     重点1:form的enctype属性,设置成multipart/form-data
    默认的是application/x-www-form-urlencoded

< form action=“upload.do” method=“post” enctype=“multipart/form-data”>

          重点2:文件选择框使用 < input type=“file” >来定义

< input type=“file” name=“myfile” >

跳转到文件上传页面(index.jsp)代码如下(示例):

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body><a href="upload.jsp">test upload tag</a>
</body>
</html>

文件上传页面(upload.jsp)代码如下(示例):

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body><h1>测试Struts上传</h1><hr><p><form action="upload.do" method="post" enctype="multipart/form-data">标题:<input type="text" name="title"><br>文件:<input type="file" name="myfile" ><br><input type="submit" value="提交"><br></form>
</body>
</html>

上传成功页面(upload_success.jsp)代码如下(示例):

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>上传成功!<br>标题=【${uploadForm.title }】<br>文件名称=【${uploadForm.myfile.fileName }】<br></body>
</html>
  • 编写formbean,将jsp页面的两个输入框的属性,定义到formbean中
     重点:文件选择框的类型使用struts为我们提供的FormFile

import org.apache.struts.upload.FormFile;

private FormFile myfile;

public FormFile getMyfile() {
  return myfile;
}
public void setMyfile(FormFile myfile) {
this.myfile = myfile;
}

formbean代码如下(示例):

import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;@SuppressWarnings("serial")
public class UploadForm extends ActionForm {private String title;private FormFile myfile;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public FormFile getMyfile() {return myfile;}public void setMyfile(FormFile myfile) {this.myfile = myfile;}}
  • 编写action,将页面传来的文件流写入指定文件夹
    文件选择框的类型使用struts为我们提供的FormFile
import java.io.FileOutputStream;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;import xxx.xxx.form.UploadForm;public class UploadAction extends Action {@Overridepublic ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception {UploadForm uf = (UploadForm) form;System.err.println("title=" + uf.getTitle());String fileName = uf.getMyfile().getFileName();System.err.println("fileName=" + fileName);try (FileOutputStream fos = new FileOutputStream("C:/test_upload/" + fileName)) {fos.write(uf.getMyfile().getFileData());fos.flush();}return mapping.findForward("success");}
}
  • struts-config.xml的配置
     重点:controller 属性
    设置单次上传文件的size
<struts-config>中间略<controller maxFileSize="10M"></controller> 中间略
</struts-config>

formbean,action的配置

    <form-beans><form-beanname="uploadForm"type="xxx.xxx.form.UploadForm"/></form-beans><action-mappings><actionpath="/login"type="xxx.xxx.action.LoginAction"name="loginForm"scope="request"></action><actionpath="/upload"type="xxx.xxx.action.UploadAction"name="uploadForm"scope="request"><forward name="success" path="/upload_success.jsp"></forward></action></action-mappings>

文件上传运行效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

总结

一个简单的文件上传功能就实现了,大家可以动手试试,欢迎留言交流,下篇见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/278328.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023.12.15 FineBI与kettle

1.结构化就是可以用schema描述的数据,就是结构化数据,能转为二维表格, 如CSV,Excel, 2.半结构化就是部分可以转换为二维表格,如JSON,XML 3.非结构化数据,就是完全无法用二维表格表示的数据,如Word文档,Mp4,图片,等文件. kettle的流程 新建转换-构建流图-配置组件-保存运行 使…

如何用 Cargo 管理 Rust 工程系列 乙

以下内容为本人的学习笔记&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/__nvVZYti-G05QJHIp_f8Q 编译程序 这次我们用 cargo 来启动编译&#xff0c;cargo 提供了 build 指令来调度工具构建并输出软件。cargo build 只…

HTTP 414错误:请求URI过长,如何避免

在Web开发中&#xff0c;HTTP状态码是用于表示Web服务器响应的各种状态。其中&#xff0c;HTTP 414错误表示请求URI过长&#xff0c;这意味着客户端发送的请求URL超过了服务器所能处理的长度限制。 当请求的URI过长时&#xff0c;服务器可能无法正确处理请求&#xff0c;从而导…

一些好用的VSCode扩展

可以在扩展这里直接搜索需要的扩展&#xff0c;点击安装即可。 1.Chinese 中文扩展&#xff0c;就是说虽然咱们懂点英语&#xff0c;但还是中文看着方便 2.Auto Rename Tag 当你重命名一个HTML 标签时&#xff0c;会自动重命名与他配对的HTML 标签 当你选择h4这个标签时&…

ControlNet Adding Conditional Control to Text-to-Image Diffusion Models

ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models TL; DR&#xff1a;ControlNet 使得我们能通过输入额外的条件图&#xff08;如 Canny 边缘、人体姿态、深度图等&#xff09;&#xff0c;对 SD 生成结果的空间位置有更准确的控制。它拷贝 SD 部分…

Vue用<br>自定义换行,用v-html渲染,hover的时候title也需要使用自定义换行或者显示一行用省略号展示,hover展示全部

哈喽 大家好啊,最近遇到一个需求&#xff1a; 需求一&#xff1a;用<br>自定义换行&#xff0c;hover的时候title也需要使用自定义换行 然后我便想到了用<br>自定义换行&#xff0c;然后用v-html渲染&#xff0c;则就正常显示了 但是title只能用文本&#xff0c…

TCP服务器的编写(上)

tcp服务器的初始化&#xff0c;第一件事情就是创建套接字 目前来说我们的tcp套接和udp套接是没有任何区别的&#xff01;&#xff01;&#xff01; 那么接下来&#xff0c;如果是udp创建好套接字在进行绑定&#xff0c;那么基本上就完成我们udp服务器的初始化 而我们tcp创建好…

node.js学习(简单聊天室)

在掘金查看该文章 1. TCP服务搭建 1.1 socket 先来粗略了解下socket 套接字&#xff08;socket&#xff09;是一个抽象层&#xff0c;应用程序可以通过它发送或接收数据&#xff0c;可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中&am…

对BIOS进行简单快速的设置更改,就能启用安全引导来安装Windows 11

本文介绍如何在UEFI/BIOS中启用安全引导&#xff0c;以便继续安装Windows 11。 如何启用安全引导 启用安全引导最简单的方法是通过UEFI/BIOS进行。它通常被列为BIOS中的众多选项之一&#xff0c;因此你只需打开它即可启用它。 1、启动&#xff0c;或重新启动你的电脑或笔记本…

华为配置VRRP负载分担示例

组网需求 如图1所示&#xff0c;HostA和HostC通过Switch双归属到SwitchA和SwitchB。为减轻SwitchA上数据流量的承载压力&#xff0c;HostA以SwitchA为默认网关接入Internet&#xff0c;SwitchB作为备份网关&#xff1b;HostC以SwitchB为默认网关接入Internet&#xff0c;Switc…

基于C/C++的libcurl多协议文件传输库dll二次封装开发使用

libcurl 可能是最便携、最强大和最常用的 这个星球上的网络传输库。官方提供的示例&#xff0c;需要在项目中引用到libcurl-imp.lib才能使用。 这里我改造了下工程&#xff0c;将常用的接口导出到了libcurl.dll中方便直接在后续的工程代码中应用&#xff0c;下面可以看到dll常用…

掌握 RPC 接口测试:一篇详尽的接口测试手册

RPC 是什么&#xff1f; 远程过程调用协议&#xff08;RPC&#xff09;是一种技术&#xff0c;它允许在不同的机器上执行函数&#xff0c;就好像这些函数是本地调用一样。简单地说&#xff0c;客户端系统透明地从网络上的远程服务器软件请求服务&#xff0c;而无需理解复杂的网…