小黑J2EE學習ing
我很會努力
BlogJava
首頁
新隨筆
聯系
聚合
管理
隨筆-21 評論-29 文章-0 trackbacks-0
struts2實現文件上傳和下載
前言:
好久沒有發新隨筆了,不是沒有在學習,而是這個月BRAS用得太猛了,后面幾天都沒網上了!好了,言歸正傳,用一個小工程總結一下最近學習Struts2的心得體會。
開發環境:
jdk1.6 + tomcat6.0.14 + Myeclipse6.0 + Struts2.0.14 +
commons-fileupload-1.2.1
+
commons-io-1.4
學習教程:
風中葉
浪曦_Struts2應用開發系列
小項目需求分析或實現的功能:
(1).用戶只有輸入正確的邀請碼之后才能進行注冊,否則填寫注冊信息之后提交沒有反應,還會停留在注冊頁面。
(2).用戶注冊之后可以上傳文件,也可以下載其中的文件。
分析
:struts2并沒有實現文件的上傳和下載,我們需要到apache網站去下載
commons-fileupload-1.2.1
和
commons-io-1.4
,并把其中的核心jar包導入到工程。我們可以使用攔截器來實現功能(1)。
具體步驟:
1.新建web項目 命名為struts2demo
2.向工程中導入所需要的jar包 必要的jar包有七個
3.
在web.xml文件中注冊struts2
<?
xml version="1.0" encoding="UTF-8"
?>
<
web-app
version
="2.4"
xmlns
="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
<
filter
>
<
filter-name
>
struts2
</
filter-name
>
<
filter-class
>
org.apache.struts2.dispatcher.FilterDispatcher
</
filter-class
>
</
filter
>
<
filter-mapping
>
<
filter-name
>
struts2
</
filter-name
>
<
url-pattern
>
/*
</
url-pattern
>
</
filter-mapping
>
</
web-app
>
4.編寫輸入邀請碼的JSP頁面invite.jsp
<%
@ page language
=
"
java
"
contentType
=
"
text/html; charset=GBK
"
pageEncoding
=
"
GBK
"
%>
<%
@ taglib prefix
=
"
s
"
uri
=
"
/struts-tags
"
%>
<!
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
>
<
html
>
<
head
><
title
>
驗證碼校驗
</
title
></
head
>
<
body
>
<
table
align
="center"
width
="60%"
><
tr
><
td
style
="color:red"
><
s:fielderror
/></
td
></
tr
></
table
>
<
form
action
="invite.action"
method
="post"
>
請輸入您的驗證碼:
<
br
>
<
input
type
="text"
name
="invitedcode"
><
br
>
<
input
type
="submit"
value
="提交驗證碼"
>
<
input
type
="reset"
value
="重新輸入"
>
</
form
>
</
body
>
</
html
>
5.
在Tomcat的server.xml中加入工程
6.啟動Tomcat服務器 測試當前所做是否有錯誤
以上表明當前設置沒有錯誤!
7.在src下新建com.demo.action包,并在其中新建InviteAction類,此類要繼承ActionSupport類
package
com.demo.action;
import
java.util.Map;
import
com.opensymphony.xwork2.ActionContext;
import
com.opensymphony.xwork2.ActionSupport;
public
class
InviteAction
extends
ActionSupport
{
private
String invitedcode;
public
String getInvitedcode()
{
return
invitedcode;
}
public
void
setInvitedcode(String invitedcode)
{
this
.invitedcode
=
invitedcode;
}
@Override
public
String execute()
throws
Exception
{
if
(
"
220081078
"
.equals(
this
.getInvitedcode()))
{
return
SUCCESS;
}
else
{
this
.addFieldError(
"
invitedcode
"
,
"
輸入的邀請碼不正確!請再次輸入!
"
);
return
INPUT;
}
}
}
類中規定只有輸入的驗證碼為220081078,才能進入到注冊頁面,否則會出現錯誤的提示信息并回到原頁面繼續輸入。
8.
在src下新建struts.xml文件,
在struts.xml文件中對InviteAction進行注冊
<?
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"
>
<
struts
>
<
package
name
="struts2demo"
extends
="struts-default"
>
<
action
name
="invite"
class
="com.demo.action.InviteAction"
>
<
result
name
="input"
>
/invite.jsp
</
result
>
<
result
name
="success"
>
/register.jsp
</
result
>
</
action
>
</
package
>
</
struts
>
9.新建
register.jsp頁面,并加入如下代碼
<%
@ page language
=
"
java
"
import
=
"
java.util.*
"
pageEncoding
=
"
GBK
"
%>
<%
@ taglib prefix
=
"
s
"
uri
=
"
/struts-tags
"
%>
<%
String
path
=
request.getContextPath();
String
basePath
=
request.getScheme()
+
"
://
"
+
request.getServerName()
+
"
:
"
+
request.getServerPort()
+
path
+
"
/
"
;
%>
<!
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
>
<
html
>
<
head
>
<
title
>
注冊頁面
</
title
>
<
script
type
="text/javascript"
>
function
validate()
{
var
usernameValue
=
document.getElementById(
"
usernameId
"
).value;
var
passwordValue
=
document.getElementById(
"
passwordId
"
).value;
var
repasswordValue
=
document.getElementById(
"
repasswordId
"
).value;
if
(usernameValue.length
==
0
)
{
alert(
"
用戶名不能為空!
"
);
return
false
;
}
else
if
(usernameValue.length
<
6
||
usernameValue.length
>
16
)
{
alert(
"
用戶名只能由6-16位字母和數字組成!
"
);
return
false
;
}
if
(passwordValue.length
==
0
)
{
alert(
"
密碼不能為空!
"
);
return
false
;
}
else
if
(passwordValue.length
<
6
||
passwordValue.length
>
16
)
{
alert(
"
用戶名只能由6-16位字母和數字組成!
"
);
return
false
;
}
if
(passwordValue
!=
repasswordValue)
{
alert(
"
兩次輸入的密碼不一致!
"
);
return
false
;
}
return
true
;
}
</
script
>
</
head
>
<
body
>
<
table
align
="center"
width
="60%"
><
tr
><
td
style
="color:green"
><
s:fielderror
/></
td
></
tr
></
table
>
<
s:form
action
="register"
theme
="simple"
method
="post"
>
<
table
align
="center"
width
="40%"
border
="2"
>
<
tr
><
td
>
*用戶名:
</
td
><
td
>
<
s:textfield
name
="username"
id
="usernameId"
></
s:textfield
>
</
td
></
tr
>
<
tr
><
td
>
*密碼:
</
td
><
td
>
<
s:password
name
="password"
id
="passwordId"
></
s:password
>
</
td
></
tr
>
<
tr
><
td
>
*重復密碼:
</
td
><
td
>
<
s:password
name
="repassword"
id
="repasswordId"
></
s:password
>
</
td
></
tr
>
<
tr
><
td
>
年齡:
</
td
><
td
>
<
s:textfield
name
="age"
></
s:textfield
>
</
td
></
tr
>
<
tr
><
td
>
生日:
</
td
><
td
>
<
s:textfield
name
="birthday"
></
s:textfield
>
</
td
></
tr
>
<
tr
><
td
>
<
s:submit
value
="注冊"
onclick
="validate()"
></
s:submit
></
td
><
td
><
s:reset
value
="重填"
></
s:reset
>
</
td
></
tr
>
</
table
>
</
s:form
>
</
body
>
</
html
>
其中腳本validate()方法對輸入進行客戶端的驗證,如果沒有輸入必填項(用戶名和密碼)或輸入的長度超過限制,都會提示相應的錯誤信息。
10.對以上所做工作進行測試
如果輸入錯誤的邀請碼 如2200810888 則顯示結果如下
如果輸入正確的邀請碼 如220081078 則轉入到注冊頁面 測試成功!
11.在action包中創建RegisterAction類 并編寫如下代碼
package
com.demo.action;
import
java.util.Calendar;
import
java.util.Date;
import
com.opensymphony.xwork2.ActionSupport;
public
class
RegisterAction
extends
ActionSupport
{
private
String username;
private
String password;
private
String repassword;
private
int
age;
private
Date birthday;
public
String getUsername()
{
return
username;
}
public
void
setUsername(String username)
{
this
.username
=
username;
}
public
String getPassword()
{
return
password;
}
public
void
setPassword(String password)
{
this
.password
=
password;
}
public
String getRepassword()
{
return
repassword;
}
public
void
setRepassword(String repassword)
{
this
.repassword
=
repassword;
}
public
int
getAge()
{
return
age;
}
public
void
setAge(
int
age)
{
this
.age
=
age;
}
public
Date getBirthday()
{
return
birthday;
}
public
void
setBirthday(Date birthday)
{
this
.birthday
=
birthday;
}
@Override
public
String execute()
throws
Exception
{
return
SUCCESS;
}
@Override
public
void
validate()
{
if
(
null
==
username
||
username.length()
<
6
||
username.length()
>
16
)
{
this
.addActionError(
"
用戶名應該由6-10位字母和數字組成
"
);
}
if
(
null
==
password
||
password.length()
<
6
||
password.length()
>
16
)
{
this
.addActionError(
"
密碼應該由6-10位字母和數字組成
"
);
}
else
if
(
!
(repassword.equals(password)))
{
this
.addActionError(
"
兩次輸入密碼不一致!
"
);
}
if
(age
<
0
||
age
>
150
)
{
this
.addActionError(
"
年齡應該在0-150之間!
"
);
}
}
}
其中validate()方法對輸入進行服務器端的驗證,以提高安全性。
12.在struts.xml文件中對RegisterAction進行注冊 在package下加入如下代碼
<
action
name
="register"
class
="com.demo.action.RegisterAction"
>
<
result
name
="input"
>
/register.jsp
</
result
>
<
result
name
="success"
>
/registersuccess.jsp
</
result
>
</
action
>
13.
編寫registersuccess.jsp頁面
<%
@ page language
=
"
java
"
contentType
=
"
text/html; charset=GBK
"
pageEncoding
=
"
GBK
"
%>
<!
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
>
<
html
>
<
head
>
<
title
>
注冊成功
</
title
>
</
head
>
<
body
>
恭喜您已經注冊成功!
<
br
>
一下是您的注冊信息:
<
br
>
用戶名:${requestScope.username}
<
br
>
密碼:${requestScope.password}
<
br
>
年齡:${requestScope.age}
<
br
>
生日:${requestScope.birthday}
<
br
>
<
a
href
="upload.jsp"
>
開始上傳文件
</
a
>
</
body
>
</
html
>
14.對上述工作進行測試
如果進行不合法的注冊 如沒有填入必填項或者輸入長度不合法 會出現相關錯誤提示信息
如果輸入合法注冊信息,將轉到注冊成功頁面。
15.
編寫文件上傳頁面upload.jsp代碼
<%
@ page language
=
"
java
"
contentType
=
"
text/html; charset=GBK
"
pageEncoding
=
"
GBK
"
%>
<%
@ taglib prefix
=
"
s
"
uri
=
"
/struts-tags
"
%>
<!
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
>
<
html
>
<
head
>
<
meta
http-equiv
="Content-Type"
content
="text/html; charset=ISO-8859-1"
>
<
title
>
上傳文件頁面
</
title
>
<
script
type
="text/javascript"
>
function
addMore()
{
var
td
=
document.getElementById(
"
more
"
);
var
br
=
document.createElement(
"
br
"
);
var
input
=
document.createElement(
"
input
"
);
var
button
=
document.createElement(
"
input
"
);
input.type
=
"
file
"
;
input.name
=
"
file
"
;
button.type
=
"
button
"
;
button.value
=
"
Remove
"
;
button.onclick
=
function
()
{
td.removeChild(br);
td.removeChild(input);
td.removeChild(button);
}
td.appendChild(br);
td.appendChild(input);
td.appendChild(button);
}
</
script
>
</
head
>
<
body
>
<
table
align
="center"
width
="60%"
><
tr
><
td
style
="color:green"
><
s:fielderror
/></
td
></
tr
></
table
>
<
s:form
action
="upload"
theme
="simple"
enctype
="multipart/form-data"
method
="post"
>
<
table
align
="center"
width
="50%"
border
="2"
>
<
tr
><
td
>
用戶名:
</
td
><
td
>
<
s:textfield
name
="username"
></
s:textfield
>
</
td
></
tr
>
<
tr
><
td
>
密碼:
</
td
><
td
>
<
s:password
name
="password"
></
s:password
>
</
td
></
tr
>
<
tr
><
td
>
選擇文件:
</
td
>
<
td
id
="more"
><
s:file
name
="file"
></
s:file
><
input
type
="button"
value
="上傳更多
"
onclick
="addMore()"
></
td
>
</
tr
>
<
tr
><
td
><
s:submit
value
=" 全部上傳 "
></
s:submit
></
td
></
tr
>
</
table
>
</
s:form
>
</
body
>
</
html
>
該頁面允許用戶上傳足夠多的文件。點擊“上傳更多...”按鈕一次會添加一個上傳文件textfield,點擊‘Remove’按鈕可以消去該行。
16.
編寫UploadAction類代碼 將文件上傳到upload文件夾
package
com.demo.action;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileOutputStream;
import
java.io.InputStream;
import
java.io.OutputStream;
import
java.util.List;
import
org.apache.struts2.ServletActionContext;
import
com.opensymphony.xwork2.ActionSupport;
public
class
UploadAction
extends
ActionSupport
{
private
String username;
private
String password;
private
List
<
File
>
file;
private
List
<
String
>
fileFileName;
private
List
<
String
>
fileContentType;
public
String getUsername()
{
return
username;
}
public
void
setUsername(String username)
{
this
.username
=
username;
}
public
String getPassword()
{
return
password;
}
public
void
setPassword(String password)
{
this
.password
=
password;
}
public
List
<
File
>
getFile()
{
return
file;
}
public
void
setFile(List
<
File
>
file)
{
this
.file
=
file;
}
public
List
<
String
>
getFileFileName()
{
return
fileFileName;
}
public
void
setFileFileName(List
<
String
>
fileFileName)
{
this
.fileFileName
=
fileFileName;
}
public
List
<
String
>
getFileContentType()
{
return
fileContentType;
}
public
void
setFileContentType(List
<
String
>
fileContentType)
{
this
.fileContentType
=
fileContentType;
}
@Override
public
String execute()
throws
Exception
{
for
(
int
i
=
0
;i
<
file.size();i
++
)
{
InputStream is
=
new
FileInputStream(file.get(i));
String root
=
ServletActionContext.getRequest().getRealPath(
"
/upload
"
);
File destFile
=
new
File(root,
this
.getFileFileName().get(i));
OutputStream os
=
new
FileOutputStream(destFile);
byte
[] buffer
=
new
byte
[
400
];
int
length
=
0
;
while
((length
=
is.read(buffer))
>
0
)
{
os.write(buffer,
0
, length);
}
is.close();
os.close();
}
return
SUCCESS;
}
}
17.
在struts.xml文件中對UploadAction進行注冊
<
action
name
="upload"
class
="com.demo.action.UploadAction"
>
<
result
name
="success"
>
/uploadsuccess.jsp
</
result
>
<
result
name
="input"
>
/upload.jsp
</
result
>
<
interceptor-ref
name
="fileUpload"
>
<
param
name
="maximumSize"
>
4096000
</
param
>
<
param
name
="allowedTypes"
>
application/vnd.ms-powerpoint
</
param
>
</
interceptor-ref
>
<
interceptor-ref
name
="defaultStack"
></
interceptor-ref
>
</
action
>
上傳文件時會用到內部的fileUpload攔截器 其中對上傳文件的大小和類型進行了限制 如上也許上傳最大文件為4000K,文件類型只能為ppt類型。
18.對上傳文件是的錯誤信息進行改進,系統提供的錯誤信息(如文件大小或類型不合法)可讀性很差。
在struts.xml中加入如下語句
<
constant
name
="struts.custom.i18n.resources"
value
="message"
></
constant
>
<
constant
name
="struts.i18n.encoding"
value
="gbk"
></
constant
>
第一句是配置錯誤信息message.properties,第二句是對上傳文件過程中的中文亂碼進行更正。
在src目錄下新建文件message.properties ,文件內容為
struts.messages.error.content.type.not.allowed=\u4e0a\u4f20\u7684\u6587\u4ef6\u7c7b\u578b\u4e0d\u5141\u8bb8 \u8bf7\u91cd\u8bd5
struts.messages.error.file.too.large=\u4e0a\u4f20\u6587\u4ef6\u7684\u5927\u5c0f\u8d85\u8fc7\u9650\u5236
右邊的編碼可以通過Java提供的native2ascii進行轉換。
19.
編寫download.jsp頁面
<%
@ page language
=
"
java
"
contentType
=
"
text/html; charset=GBK
"
pageEncoding
=
"
GBK
"
%>
<%
@ taglib prefix
=
"
s
"
uri
=
"
/struts-tags
"
%>
<!
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
>
<
html
>
<
head
>
<
title
>
文件下載
</
title
>
</
head
>
<
body
>
歡迎來到下載頁面!
<
br
>
<
s:a
href
="/struts2/download.action"
>
點擊下載
</
s:a
>
</
body
>
</
html
>
20.
編寫DownloadAction
類代碼 假設我們要下載的是upload文件夾下的Struts2.ppt文件
package
com.demo.action;
import
java.io.InputStream;
import
org.apache.struts2.ServletActionContext;
import
com.opensymphony.xwork2.ActionSupport;
public
class
DownloadAction
extends
ActionSupport
{
public
InputStream getDownloadFile()
{
return
ServletActionContext.getServletContext().getResourceAsStream(
"
/upload/Struts2.ppt
"
);
}
@Override
public
String execute()
throws
Exception
{
return
SUCCESS;
}
}
21.
在struts.xml文件中對DownloadAction進行注冊 要注意其中的參數名稱
<
action
name
="download"
class
="com.demo.action.DownloadAction"
>
<
result
name
="success"
type
="stream"
>
<
param
name
="contentType"
>
application/vnd.ms-powerpoint
</
param
>
<
param
name
="contentDisposition"
>
filename="Struts2.ppt"
</
param
>
<
param
name
="inputName"
>
downloadFile
</
param
>
</
result
>
</
action
>
22.對以上步驟進行測試
上傳文件類型不合法
上傳合法內容,如我們上傳三個ppt文件 則能成功
點擊到下載頁面下載文件
23.實現邀請碼功能 以上并沒有實現邀請碼的功能,即用戶可以直接進入到注冊頁面進行注冊。我們需要編寫一個攔截器實現該功能。
(1)
編寫InviteInterceptor攔截器代碼
package
com.demo.interceptor;
import
java.util.Map;
import
com.opensymphony.xwork2.Action;
import
com.opensymphony.xwork2.ActionInvocation;
import
com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public
class
InviteInterceptor
extends
AbstractInterceptor
{
@Override
public
String intercept(ActionInvocation invocation)
throws
Exception
{
Map map
=
invocation.getInvocationContext().getSession();
if
(map.get(
"
invitedcode
"
)
==
null
)
{
return
Action.INPUT;
}
else
{
return
invocation.invoke();
}
}
}
(2)
改寫InviteAction的execute()方法
加入如下語句
(3)
在struts.xml中注冊攔截器 并在register的action中加入攔截器
最終struts.xml的代碼
<?
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"
>
<
struts
>
<
constant
name
="struts.custom.i18n.resources"
value
="message"
></
constant
>
<
constant
name
="struts.i18n.encoding"
value
="gbk"
></
constant
>
<
constant
name
="struts.multipart.saveDir"
value
="/upload"
></
constant
>
<
package
name
="struts2demo"
extends
="struts-default"
>
<
interceptors
>
<
interceptor
name
="invite"
class
="com.demo.interceptor.InviteInterceptor"
></
interceptor
>
</
interceptors
>
<
action
name
="invite"
class
="com.demo.action.InviteAction"
>
<
result
name
="input"
>
/invite.jsp
</
result
>
<
result
name
="success"
>
/register.jsp
</
result
>
</
action
>
<
action
name
="register"
class
="com.demo.action.RegisterAction"
>
<
result
name
="input"
>
/register.jsp
</
result
>
<
result
name
="success"
>
/registersuccess.jsp
</
result
>
<
interceptor-ref
name
="invite"
></
interceptor-ref
>
<
interceptor-ref
name
="defaultStack"
></
interceptor-ref
>
</
action
>
<
action
name
="upload"
class
="com.demo.action.UploadAction"
>
<
result
name
="success"
>
/uploadsuccess.jsp
</
result
>
<
result
name
="input"
>
/upload.jsp
</
result
>
<
interceptor-ref
name
="fileUpload"
>
<
param
name
="maximumSize"
>
4096000
</
param
>
<
param
name
="allowedTypes"
>
application/vnd.ms-powerpoint
</
param
>
</
interceptor-ref
>
<
interceptor-ref
name
="defaultStack"
></
interceptor-ref
>
</
action
>
<
action
name
="download"
class
="com.demo.action.DownloadAction"
>
<
result
name
="success"
type
="stream"
>
<
param
name
="contentType"
>
application/vnd.ms-powerpoint
</
param
>
<
param
name
="contentDisposition"
>
filename="Struts2.ppt"
</
param
>
<
param
name
="inputName"
>
downloadFile
</
param
>
</
result
>
</
action
>
</
package
>
</
struts
>
24.最后的測試
如果沒有進行邀請碼的驗證 直接進入到注冊頁面進行注冊 將不成功。達到項目需求。
總結:
這是最近三天學習的結果,很喜歡風中葉老師的講解。他沒有給我們代碼,卻每一步都講得很仔細,還帶著我們一步步地看相關的幫助文檔,會繼續支持風中葉老師的!開發還是要自己多看看各種文檔,這樣才能學習到正宗的知識!
由于隨筆附件大小有限制 上傳的代碼中刪除了struts2的5個jar包 可自行加入
本隨筆代碼
代碼
posted on 2009-05-26 21:49
特立獨行
閱讀(17518)
評論(27)
編輯
收藏
所屬分類:
Struts框架
評論:
#
re: struts2實現文件上傳的下載 2009-05-27 16:49 |
代號zzy
兄弟,贊一個。
回復
更多評論
#
re: struts2實現文件上傳的下載[未登錄] 2009-05-27 17:06 |
EricFan
大哥,什么叫做文件上傳的下載?
回復
更多評論
#
re: struts2實現文件上傳的下載 2009-05-30 00:16 |
事發當時
就一個上傳下載文件,竟然讓你搞了這么一大堆垃圾代碼,攔截器都是現成的,一個action ,5,6行代碼足以,洋洋撒薩!
回復
更多評論
#
re: struts2實現文件上傳的下載 2009-05-30 08:50 |
特立獨行
@事發當時
本人菜鳥而已 只是把最近的學習內容串聯在一起 復習一下 沒有別的
回復
更多評論
#
re: struts2實現文件上傳的下載 2009-05-30 18:20 |
gyl868
謝謝樓主分享,很詳細適合我這種初學者,希望多多發此類帖子喲,我會常來看的,有個問題,使用攔截器后還是可以不通過驗證頁面直接進入register.jsp頁可提交成功,不知道為何
回復
更多評論
#
re: struts2實現文件上傳的下載 2009-06-01 17:07 |
特立獨行
@gyl868
可能我配置的時候錯誤了 我有空再看看
回復
更多評論
#
re: struts2實現文件上傳的下載[未登錄] 2009-07-19 11:14 |
skyman
這些截圖真的是由這些代碼產生的嗎?有些地方是錯的,如RegisterAction里面的validate方法中addActionError,但在相應的jsp中卻用的是fielderror...
回復
更多評論
#
re: struts2實現文件上傳的下載[未登錄] 2009-08-17 14:16 |
小強
撒旦法撒旦法
回復
更多評論
#
re: struts2實現文件上傳的下載 2009-12-17 22:50 |
晨
NB的人都滾一邊去,人家分享個東西,看把TM你給牛的!
腦殘!
看不懂什么意思還不如去。。。
真2.。。
回復
更多評論
#
re: struts2實現文件上傳的下載 2009-12-17 22:51 |
晨
NB的人都滾一邊去,人家分享個東西,看把TM你給牛的!
腦殘!
看不懂什么意思還不如去死!。。。
回復
更多評論
#
re: struts2實現文件上傳的下載 2010-05-07 14:16 |
一個人
寫的不錯,基本上跟著樓主做出來了,謝謝
回復
更多評論
#
re: struts2實現文件上傳和下載 2010-07-25 01:16 |
黃文龍
謝謝樓主 學習了
回復
更多評論
#
re: struts2實現文件上傳和下載[未登錄] 2010-09-26 13:22 |
花
很好!
回復
更多評論
#
re: struts2實現文件上傳和下載[未登錄] 2010-09-26 15:49 |
陳
我是菜鳥,按你的步驟走 由錯誤 提示我找不到系統指定的路徑
回復
更多評論
#
re: struts2實現文件上傳和下載 2011-01-20 10:28 |
weiythi
不錯 學習了
回復
更多評論
#
re: struts2實現文件上傳和下載 2011-01-27 09:51 |
chenwei
fsdfdsfdsfs
回復
更多評論
#
re: struts2實現文件上傳和下載 2011-06-14 09:52 |
游仞
下載功能不行
回復
更多評論
#
re: struts2實現文件上傳和下載[未登錄] 2011-07-14 16:34 |
鄭少文
@事發當時
可以把你說的方法給我看看么??
javajacob@163.com先謝過。
回復
更多評論
#
re: struts2實現文件上傳和下載 2012-03-26 19:32 |
方式
你是北京圣思園的吧,一點新意沒有
回復
更多評論
#
re: struts2實現文件上傳和下載 2012-04-09 15:42 |
ry
步驟不全啊~uploadsuccess.jsp就沒有說怎么建啊
回復
更多評論
#
re: struts2實現文件上傳和下載 2012-04-25 14:04 |
fdsf
dssf
回復
更多評論
#
re: struts2實現文件上傳和下載[未登錄] 2012-05-25 18:01 |
hh
我運行下載頁面時出錯啊!怎么改?
回復
更多評論
#
re: struts2實現文件上傳和下載 2012-05-25 23:37 |
pppppppppp
大俠 ……怎么實現點一個文件下載一個文件,而不是固定的文件?
回復
更多評論
#
re: struts2實現文件上傳和下載 2012-09-06 11:27 |
采用
配置的文件 有關鍵字, 把action 中的name 換下就可以了 @陳
回復
更多評論
#
re: struts2實現文件上傳和下載 2012-12-04 18:54 |
邊城
怎么將上傳的東西在頁面上顯示出來啊
回復
更多評論
#
re: struts2實現文件上傳和下載 2012-12-07 16:32 |
你這代碼量有點多
你這代碼量有點多,STRUTS2封裝好了,頂多15行搞定
回復
更多評論
#
re: struts2實現文件上傳和下載[未登錄]
2012-12-20 21:25 |
小菜
下載做來直接就在頁面把文件打開了。。
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
JFreeChart的中文亂碼問題 知道的幫忙解決一下
struts2實現文件上傳和下載
小黑struts學習(五) Action Mapping、ActionForward和ActionForm組件學習
小黑Struts學習(四)
小黑Struts學習(三)
小黑struts學習(二) 第一個實例的原理分析和Struts工作原理分析
小黑Struts學習(一)
小黑J2EE學習之路 歡迎大家觀臨! 希望大家能多指教哦!
<
2025年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆分類
Hibernate框架(6)
J2EE核心技術(1)
Java 技術
Java面試題
Spring框架(5)
Struts框架(7)
數據庫
隨筆檔案
2010年6月 (2)
2009年6月 (1)
2009年5月 (17)
2009年4月 (1)
搜索
最新評論
1.?re: struts2實現文件上傳和下載[未登錄]
下載做來直接就在頁面把文件打開了。。
--小菜
2.?re: struts2實現文件上傳和下載
你這代碼量有點多,STRUTS2封裝好了,頂多15行搞定
--你這代碼量有點多
3.?re: struts2實現文件上傳和下載
怎么將上傳的東西在頁面上顯示出來啊
--邊城
4.?re: struts2實現文件上傳和下載
配置的文件 有關鍵字, 把action 中的name 換下就可以了 @陳
--采用
5.?re: struts2實現文件上傳和下載
大俠 ……怎么實現點一個文件下載一個文件,而不是固定的文件?
--pppppppppp
閱讀排行榜
1.?struts2實現文件上傳和下載(17518)
2.?小黑struts學習(五) Action Mapping、ActionForward和ActionForm組件學習(1626)
3.?小黑Hibernate學習(三) Session接口及get、load、persist方法(1005)
4.?ASSH框架的技術基礎和設計(761)
5.?Spring 框架的設計理念與設計模式分析(654)
評論排行榜
1.?struts2實現文件上傳和下載(27)
2.?Spring 框架的設計理念與設計模式分析(1)
3.?很開心加入BlogJava 就像找到了組織一樣(1)
4.?Spring 框架的設計理念與設計模式分析(2)(0)
5.?JFreeChart的中文亂碼問題 知道的幫忙解決一下(0)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 特立獨行
主站蜘蛛池模板:
在线观看免费黄网站
|
免费一级毛suv好看的国产网站
|
亚洲中文字幕久久无码
|
亚洲人成网亚洲欧洲无码
|
国产亚洲Av综合人人澡精品
|
本免费AV无码专区一区
|
久久国产色AV免费观看
|
毛片a级毛片免费观看品善网
|
免费很黄很色裸乳在线观看
|
亚洲第一极品精品无码久久
|
亚洲导航深夜福利
|
国产精品久久亚洲一区二区
|
两个人www免费高清视频
|
国产精品色拉拉免费看
|
国产精品免费综合一区视频
|
亚洲人成网77777亚洲色
|
亚洲国产激情在线一区
|
人妻免费久久久久久久了
|
日韩av无码久久精品免费
|
黑人粗长大战亚洲女2021国产精品成人免费视频
|
免费国产不卡午夜福在线
|
亚洲色精品88色婷婷七月丁香
|
91精品国产亚洲爽啪在线影院
|
亚洲日韩亚洲另类激情文学
|
h片在线观看免费
|
国产男女爽爽爽爽爽免费视频
|
免费a级毛片永久免费
|
亚洲AV无码乱码国产麻豆
|
亚洲精品第一综合99久久
|
fc2免费人成为视频
|
免费国产成人高清在线观看网站
|
免费a级毛片在线观看
|
精品亚洲成a人片在线观看
|
男男黄GAY片免费网站WWW
|
一级特黄aa毛片免费观看
|
国产高清在线免费
|
久久精品国产亚洲av日韩
|
免费国产污网站在线观看不要卡
|
24小时在线免费视频
|
国产精品xxxx国产喷水亚洲国产精品无码久久一区
|
国产在线观看免费视频播放器
|