📄 html-file.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><html:file></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body bgcolor="white">
<h1><html:file></h1>
<p><html:file>标签用于上传文件。上传文件指的是从客户端将文件上传到服务器上,这一过程和通过表单提交请求到服务器端
并没有本质上的不同。在这一过程中有以下两点需要注意:</p>
<p>1. 文件存储于客户端的机器上,因此在服务器端不能使用获得文件路径的方式来获取文件对象。</p>
<p>2. 由于使用GET方式提交表单时,可提交的串长度受到限制,所以,在上传文件时必须使用POST方式。</p>
<p>文件上传是一项从页面开始的工作,下面首先看一下页面上的代码:</p>
<font class="CodeStyle">
<html:form action="/upload.do" enctype="multipart/form-data"><br>
<html:file property="file" /><br>
<html:submit property="submit" value="submit"/><br>
</html:form><br>
<br>
您上传的文件是:<bean:write name="upload" property="filename"/><br>
它的大小为:<bean:write name="upload" property="size"/><br>
</font>
<p>上面的代码中使用了<html:file>标记来进行文件的上传。前面已经说过,上传过程实际上和通过表单提交请求到服务器没有
不同,因此,该标记也必须存在于一个表单中。这个表单所进行的操作是/upload.do。通过查找struts-config.xml可以知道,该表单
类型应为org.apache.struts.webapp.exercise.UploadBean,以下是它的代码:</p>
<font class="CodeStyle">
public class UploadBean extends ActionForm{<br>
<br>
private FormFile file = null;<br>
private String filename = "";<br>
private String size = "";<br>
<br>
public UploadBean(){<br>
}<br>
<br>
public FormFile getFile() {<br>
return file;<br>
}<br>
<br>
public void setFile(FormFile file) {<br>
this.file = file;<br>
}<br>
<br>
public String getFilename() {<br>
return filename;<br>
}<br>
<br>
public void setFilename(String filename) {<br>
this.filename = filename;<br>
}<br>
<br>
public String getSize() {<br>
return size;<br>
}<br>
<br>
public void setSize(String size) {<br>
this.size = size;<br>
}<br>
}<br>
</font>
<p>在上面的代码中,定义了一个FormFile类型的对象file。这个FormFile类是Struts提供的专门用于文件上传的类。在这个ActionForm
中,FormFile类的对象file的名称与网页上<html:file>标记的property属性相对应,这一点非常重要!</p>
<p>用户点击上传按钮后执行的是upload的操作,这个操作与后台的UploadAction关联。以下是UploadAction的代码:</p>
<font class="CodeStyle">
public class UploadAction extends Action {<br>
<br>
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception {<br>
<br>
UploadBean filebean = (UploadBean) form;<br>
<br>
FormFile file = filebean.getFile();<br>
if (file == null){<br>
return mapping.findForward("input");<br>
}<br>
<br>
String filename = file.getFileName();<br>
filebean.setFilename(filename);<br>
String size = Integer.toString(file.getFileSize()) + "bytes";<br>
filebean.setSize(size);<br>
<br>
InputStream is = file.getInputStream();<br>
String store_path = servlet.getServletContext().getRealPath("/fileupload");<br>
System.out.println(store_path);<br>
OutputStream os = new FileOutputStream(store_path + "/" + filename);<br>
<br>
int bytes = 0;<br>
byte [] buffer = new byte[8192];<br>
while ((bytes = is.read(buffer,0,8192))!=-1){<br>
os.write(buffer,0,bytes);<br>
}<br>
<br>
os.close();<br>
is.close();<br>
file.destroy();<br>
<br>
return mapping.findForward("input");<br>
}<br>
}<br>
</font>
<p>上面的代码首先从表单ActionForm中获取FormFile对象,然后创建输入流读取文件内容,再创建一个输出流,将上传的文件保存到
工程目录下的fileupload目录中。最后关闭输出流和输入流,并将与客户端的文件连接断开。整个过程非常清楚,简单。其中,有
两句代码分别将文件名和文件大小保存到UploadBean中去,这是为了在JSP页面上可以显示出文件名和文件大小。在上面的页面代码中
可以看到这样两句:</p>
<font class="CodeStyle">
您上传的文件是:<bean:write name="upload" property="filename"/><br>
它的大小为:<bean:write name="upload" property="size"/><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 + -