java struts2入门学习拦截器学习Word下载.docx
《java struts2入门学习拦截器学习Word下载.docx》由会员分享,可在线阅读,更多相关《java struts2入门学习拦截器学习Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
/package>
注意:
这里interceptors与action标签同级。
其中class对应拦截器的全路径。
name对应拦截器的名称,这个可以自己随便定义,建议与类名相同,此名称要唯一。
2)引用一个拦截器:
!
--引用自定义的拦截器-->
interceptor-refname="
/interceptor-ref>
如何引用一个拦截器?
即在Action中<
标签下配置即可。
这里name名称与自定义的名称要一致。
4、自定义拦截器栈
1)声明一个拦截器栈
interceptor-stack标签中进行配置需要引用的拦截器,如下:
<
interceptor-stackname="
amosStack"
defaultStack"
/interceptor-stack>
2)引用一个拦截器栈:
--引用自定义的拦截器栈-->
二、需求分析
如图所示,访问upload.jsp进行上传文件--》LoginInterceptor拦截器进行拦截---》
1、未登录,那么跳转页面到登录页面---》进行登录页面--》登录成功---》可以点击返回到上传文件页面;
2、已登录,登录直接开始上传文件。
三、代码分析:
upload.jsp
%@pagelanguage="
java"
contentType="
text/html;
charset=UTF-8"
pageEncoding="
UTF-8"
%>
%@tagliburi="
/struts-tags"
prefix="
s"
%>
DOCTYPEhtmlPUBLIC"
-//W3C//DTDHTML4.01Transitional//EN"
"
http:
//www.w3.org/TR/html4/loose.dtd"
html>
head>
metahttp-equiv="
Content-Type"
content="
title>
Inserttitlehere<
/title>
/head>
body>
s:
formaction="
UploadAction"
enctype="
multipart/form-data"
method="
POST"
textfieldlabel="
上传用户"
name="
username"
/>
filelabel="
上传文件"
upload"
/>
%--<
--%>
submitvalue="
提交"
/s:
form>
/body>
/html>
ViewCode
upload_success.jsp
login.jsp
login<
LoginAction"
登录"
login_success.jsp
loginsuccess<
登录成功<
br>
%--${pageContext.request.contextPath}--%>
ahref="
upload.jsp"
>
返回上传页面<
/a>
sturts.xml
?
xmlversion="
1.0"
encoding="
?
DOCTYPEstrutsPUBLIC
-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.3//EN"
//struts.apache.org/dtds/struts-2.3.dtd"
struts>
--<
includefile="
config/upload.xml"
/include>
-->
--加载其他配置文件-->
config/upload-interceptor.xml"
/struts>
upload-sturts.xml
packagename="
login"
extends="
struts-default"
actionname="
interceptor.LoginAction"
loginMethod"
result>
/login_success.jsp
/result>
action.UploadAction"
uploadMethod"
paramname="
uploadPath"
/home/amosli/develop/struts2_learn/<
/param>
resultname="
success"
type="
dispatcher"
/WEB-INF/upload_success.jsp
input"
upload.jsp
toLoginJsp"
login.jsp
--对系统的拦截器进行设置-->
fileUpload"
--对单个上传文件的大小进行设置,5M-->
maximumSize"
5242880<
--对允许的文件扩展名进行设置,这里以英文逗号隔开-->
allowedExtensions"
.txt,.xml<
--对允许的文件类型进行设置,这里以英文逗号进行隔开-->
allowedTypes"
text/plain,text/xml<
--显示引用默认的拦截器-->
LoginAction.java
packageinterceptor;
importjava.util.Map;
importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionSupport;
/**
*@ClassName:
LoginAction
*@Description:
用户登录
*@author:
amosli
*@email:
amosli@
*@dateJan17,201412:
11:
35AM
*/
publicclassLoginActionextendsActionSupport{
privatestaticfinallongserialVersionUID=3514444221760688282L;
privateStringusername;
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringloginMethod(){
//取得HTPPSession
Map<
String,Object>
session=ActionContext.getContext().getSession();
session.put("
username);
returnSUCCESS;
}
LoginInterceptor.java
importaction.UploadAction;
importcom.opensymphony.xwork2.ActionInvocation;
importcom.opensymphony.xwork2.interceptor.Interceptor;
LoginInterceptor
登录拦截器
*@dateJan17,201411:
42:
54PM
publicclassLoginInterceptorimplementsInterceptor{
privatestaticfinallongserialVersionUID=8314579656513662711L;
publicLoginInterceptor(){
System.out.println("
LoginInterceptor():
"
+this.hashCode());
publicvoiddestroy(){
destroy()"
);
publicvoidinit(){
init()"
publicStringintercept(ActionInvocationinvocation)throwsException{
////获取此拦截器将要拦截的action
//Objectaction=invocation.getAction();
//System.out.println("
action:
+action);
//action:
action.UploadAction@6522cf92
////获取action的返回值
//StringresultValue=invocation.invoke();
resultValue:
+resultValue);
//resultValue:
success
//如果拦截器将要拦截的action为UploadAction,那么判断用户是否已经登录
if(invocation.getAction()instanceofUploadAction){
if(session.get("
)!
=null){//判断用户是否已经登录
//如果返回值为"
那么将会匹配到配置文件中为result属性为"
的内容。
//如果返回值为invocation.invoke(),那么将会执行uploadaction方法
returninvocation.invoke();
}else{
return"
;
returnnull;
UploadAction.java
packageaction;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.InputStream;
importjava.io.OutputStream;
UploadAction
文件上传
*@dateJan14,20141:
50:
28AM
publicclassUploadActionextendsActionSupport{
privatestaticfinallongserialVersionUID=-8920466592471253212L;
//用户名
privateString[]uploadContentType;
//上传文件的类型,(Fileupload拦截器传入的参数)
privateFile[]upload;
//上传的文件,(Fileupload拦截器传入的参数)
privateString[]uploadFileName;
//上传文件的真实文件名,(Fileupload拦截器传入的参数)
privateStringuploadPath;
publicvoidsetUploadPath(StringuploadPath){
this.uploadPath=uploadPath;
publicString[]getUploadContentType(){
returnuploadContentType;
publicvoidsetUploadContentType(String[]uploadContentType){
this.uploadContentType=uploadContentType;
publicFile[]getUpload(){
returnupload;
publicvoidsetUpload(File[]upload){
this.upload=upload;
publicString[]getUploadFileName(){
returnuploadFileName;
publicvoidsetUploadFileName(String[]uploadFileName){
this.uploadFileName=uploadFileName;
publicStringgetUsername(){
returnusername;
publicStringuploadMethod()throwsException{
//ServletContextcontext=ServletAction