⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 html-file.jsp

📁 Spring +Web 的完整 MyEclipse 项目源码,使用者可以作为入门材料可以在此基础上深入学习
💻 JSP
字号:
<%@ page contentType="text/html;charset=GB2312" import="java.util.*"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<html>
<head>
<html:base/>
<title>&lt;html:file&gt;</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body bgcolor="white">

<h1>&lt;html:file&gt;</h1>

<p>&lt;html:file&gt;标签用于上传文件。上传文件指的是从客户端将文件上传到服务器上,这一过程和通过表单提交请求到服务器端
并没有本质上的不同。在这一过程中有以下两点需要注意:</p>

<p>1. 文件存储于客户端的机器上,因此在服务器端不能使用获得文件路径的方式来获取文件对象。</p>
<p>2. 由于使用GET方式提交表单时,可提交的串长度受到限制,所以,在上传文件时必须使用POST方式。</p>

<p>文件上传是一项从页面开始的工作,下面首先看一下页面上的代码:</p>
<font class="CodeStyle">
&lt;html:form action="/upload.do" enctype="multipart/form-data"&gt;<br>
&lt;html:file property="file" /&gt;<br>
&lt;html:submit property="submit" value="submit"/&gt;<br>
&lt;/html:form><br>
<br>
您上传的文件是:&lt;bean:write name="upload" property="filename"/&gt;<br>
它的大小为:&lt;bean:write name="upload" property="size"/&gt;<br>
</font>

<p>上面的代码中使用了&lt;html:file&gt;标记来进行文件的上传。前面已经说过,上传过程实际上和通过表单提交请求到服务器没有
不同,因此,该标记也必须存在于一个表单中。这个表单所进行的操作是/upload.do。通过查找struts-config.xml可以知道,该表单
类型应为org.apache.struts.webapp.exercise.UploadBean,以下是它的代码:</p>
<font class="CodeStyle">
public class UploadBean extends ActionForm{<br>
	<br>
&nbsp;&nbsp;&nbsp;&nbsp;private FormFile file = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;private String filename = "";<br>
&nbsp;&nbsp;&nbsp;&nbsp;private String size = "";<br>
	<br>
&nbsp;&nbsp;&nbsp;&nbsp;public UploadBean(){<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;public FormFile getFile() {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return file;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;public void setFile(FormFile file) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.file = file;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;public String getFilename() {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return filename;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;public void setFilename(String filename) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.filename = filename;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;public String getSize() {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return size;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;public void setSize(String size) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.size = size;<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
}<br>
</font>

<p>在上面的代码中,定义了一个FormFile类型的对象file。这个FormFile类是Struts提供的专门用于文件上传的类。在这个ActionForm
中,FormFile类的对象file的名称与网页上&lt;html:file&gt;标记的property属性相对应,这一点非常重要!</p>

<p>用户点击上传按钮后执行的是upload的操作,这个操作与后台的UploadAction关联。以下是UploadAction的代码:</p>
<font class="CodeStyle">
public class UploadAction extends Action {<br>
<br>
&nbsp;&nbsp;public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception {<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;UploadBean filebean = (UploadBean) form;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;FormFile file = filebean.getFile();<br>
&nbsp;&nbsp;&nbsp;&nbsp;if (file == null){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return mapping.findForward("input");<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
    	<br>
&nbsp;&nbsp;&nbsp;&nbsp;String filename = file.getFileName();<br>
&nbsp;&nbsp;&nbsp;&nbsp;filebean.setFilename(filename);<br>
&nbsp;&nbsp;&nbsp;&nbsp;String size = Integer.toString(file.getFileSize()) + "bytes";<br>
&nbsp;&nbsp;&nbsp;&nbsp;filebean.setSize(size);<br>
    	<br>
&nbsp;&nbsp;&nbsp;&nbsp;InputStream is = file.getInputStream();<br>

&nbsp;&nbsp;&nbsp;&nbsp;String store_path = servlet.getServletContext().getRealPath("/fileupload");<br>
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(store_path);<br>
&nbsp;&nbsp;&nbsp;&nbsp;OutputStream os = new FileOutputStream(store_path + "/" + filename);<br>
    	<br>
&nbsp;&nbsp;&nbsp;&nbsp;int bytes = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;byte [] buffer = new byte[8192];<br>
&nbsp;&nbsp;&nbsp;&nbsp;while ((bytes = is.read(buffer,0,8192))!=-1){<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.write(buffer,0,bytes);<br>
&nbsp;&nbsp;&nbsp;&nbsp;}<br>
    	<br>
&nbsp;&nbsp;&nbsp;&nbsp;os.close();<br>
&nbsp;&nbsp;&nbsp;&nbsp;is.close();<br>
&nbsp;&nbsp;&nbsp;&nbsp;file.destroy();<br>
    	<br>
&nbsp;&nbsp;&nbsp;&nbsp;return mapping.findForward("input");<br>
&nbsp;&nbsp;}<br>
}<br>
</font>

<p>上面的代码首先从表单ActionForm中获取FormFile对象,然后创建输入流读取文件内容,再创建一个输出流,将上传的文件保存到
工程目录下的fileupload目录中。最后关闭输出流和输入流,并将与客户端的文件连接断开。整个过程非常清楚,简单。其中,有
两句代码分别将文件名和文件大小保存到UploadBean中去,这是为了在JSP页面上可以显示出文件名和文件大小。在上面的页面代码中
可以看到这样两句:</p>
<font class="CodeStyle">
您上传的文件是:&lt;bean:write name="upload" property="filename"/&gt;<br>
它的大小为:&lt;bean:write name="upload" property="size"/&gt;<br>
</font>

<p>这里使用了Struts Bean标记库的标签来显示与页面相关的ActionForm的变量值。</p>
<p>以下是程序的运行效果,用户可以在/tablig/fileupload目录下看到上传的文件。</p>

<html:form action="/upload.do" enctype="multipart/form-data">
<html:file property="file" />
<html:submit property="submit" value="submit"/>
</html:form>

您上传的文件是:<bean:write name="upload" property="filename"/>
它的大小为:<bean:write name="upload" property="size"/>
<p>

<a href="index.jsp">返回主页面</a>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -