java struts2入门学习拦截器学习.docx

上传人:b****6 文档编号:7580848 上传时间:2023-01-25 格式:DOCX 页数:15 大小:189.18KB
下载 相关 举报
java struts2入门学习拦截器学习.docx_第1页
第1页 / 共15页
java struts2入门学习拦截器学习.docx_第2页
第2页 / 共15页
java struts2入门学习拦截器学习.docx_第3页
第3页 / 共15页
java struts2入门学习拦截器学习.docx_第4页
第4页 / 共15页
java struts2入门学习拦截器学习.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

java struts2入门学习拦截器学习.docx

《java struts2入门学习拦截器学习.docx》由会员分享,可在线阅读,更多相关《java struts2入门学习拦截器学习.docx(15页珍藏版)》请在冰豆网上搜索。

java struts2入门学习拦截器学习.docx

javastruts2入门学习拦截器学习

一、拦截器,拦截器栈

1、拦截器的作用

拦截器本质上和servlet的过滤器是一样的。

在struts2中,拦截器能够对Action前后进行拦截,拦截器是一个可插拨的,你可以选择使用拦截器,也可以卸载拦截器。

2、拦截器执行顺序

在struts.xml文件中,中先引用的先执行,后引用的后执行。

如果某个拦截器出错或不允许通过,那么下一个拦截器是不允许执行的。

需要拦截哪个Action,就在哪个Action对应的标签中配置即可。

在部署web应用时,拦截器的空参构造方法和init()方法各执行一次,每次请求时intercept()方法都会执行一次。

3、自定义拦截器

 1)声明一个拦截器

注意:

这里interceptors与action标签同级。

其中class对应拦截器的全路径。

name对应拦截器的名称,这个可以自己随便定义,建议与类名相同,此名称要唯一。

2)引用一个拦截器:

--引用自定义的拦截器-->

注意:

如何引用一个拦截器?

即在Action中标签下配置即可。

这里name名称与自定义的名称要一致。

 

4、自定义拦截器栈

1)声明一个拦截器栈

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">

Inserttitlehere

formaction="UploadAction"enctype="multipart/form-data"method="POST">

textfieldlabel="上传用户"name="username"/>

filelabel="上传文件"name="upload"/>

filelabel="上传文件"name="upload"/>

<%--

filelabel="上传文件"name="upload"/>--%>

submitvalue="提交"/>

form>

ViewCode

upload_success.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">

Inserttitlehere

formaction="UploadAction"enctype="multipart/form-data"method="POST">

textfieldlabel="上传用户"name="username"/>

filelabel="上传文件"name="upload"/>

filelabel="上传文件"name="upload"/>

<%--

filelabel="上传文件"name="upload"/>--%>

submitvalue="提交"/>

form>

ViewCode

login.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">

login

formaction="LoginAction"method="POST">

textfieldlabel="上传用户"name="username"/>

submitvalue="登录"/>

form>

ViewCode

login_success.jsp

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"

pageEncoding="UTF-8"%>

DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:

//www.w3.org/TR/html4/loose.dtd">

loginsuccess

登录成功

<%--${pageContext.request.contextPath}--%>

返回上传页面

ViewCode

sturts.xml

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEstrutsPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.3//EN"

"http:

//struts.apache.org/dtds/struts-2.3.dtd">

--

-->

--加载其他配置文件-->

ViewCode

upload-sturts.xml

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEstrutsPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.3//EN"

"http:

//struts.apache.org/dtds/struts-2.3.dtd">

method="loginMethod">

/login_success.jsp

/home/amosli/develop/struts2_learn/

/WEB-INF/upload_success.jsp

upload.jsp

login.jsp

--对系统的拦截器进行设置-->

--对单个上传文件的大小进行设置,5M-->

5242880

--对允许的文件扩展名进行设置,这里以英文逗号隔开-->

.txt,.xml

--对允许的文件类型进行设置,这里以英文逗号进行隔开-->

text/plain,text/xml

--引用自定义的拦截器-->

---->

--显示引用默认的拦截器-->

---->

--引用自定义的拦截器栈-->

ViewCode

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

Mapsession=ActionContext.getContext().getSession();

session.put("username",username);

returnSUCCESS;

}

}

ViewCode

LoginInterceptor.java

packageinterceptor;

importjava.util.Map;

importaction.UploadAction;

importcom.opensymphony.xwork2.ActionContext;

importcom.opensymphony.xwork2.ActionInvocation;

importcom.opensymphony.xwork2.interceptor.Interceptor;

/**

*@ClassName:

LoginInterceptor

*@Description:

登录拦截器

*@author:

amosli

*@email:

amosli@

*@dateJan17,201411:

42:

54PM

*/

publicclassLoginInterceptorimplementsInterceptor{

privatestaticfinallongserialVersionUID=8314579656513662711L;

publicLoginInterceptor(){

System.out.println("LoginInterceptor():

"+this.hashCode());

}

publicvoiddestroy(){

System.out.println("destroy()");

}

publicvoidinit(){

System.out.println("init()");

}

publicStringintercept(ActionInvocationinvocation)throwsException{

System.out.println("LoginInterceptor");

////获取此拦截器将要拦截的action

//Objectaction=invocation.getAction();

//System.out.println("action:

"+action);//action:

action.UploadAction@6522cf92

////获取action的返回值

//StringresultValue=invocation.invoke();

//System.out.println("resultValue:

"+resultValue);//resultValue:

success

//如果拦截器将要拦截的action为UploadAction,那么判断用户是否已经登录

if(invocation.getAction()instanceofUploadAction){

Mapsession=ActionContext.getContext().getSession();

if(session.get("username")!

=null){//判断用户是否已经登录

//如果返回值为"success"那么将会匹配到配置文件中为result属性为"success"的内容。

//如果返回值为invocation.invoke(),那么将会执行uploadaction方法

returninvocation.invoke();

}else{

return"toLoginJsp";

}

}

returnnull;

}

}

ViewCode

UploadAction.java

packageaction;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.io.InputStream;

importjava.io.OutputStream;

importcom.opensymphony.xwork2.ActionSupport;

/**

*@ClassName:

UploadAction

*@Description:

文件上传

*@author:

amosli

*@email:

amosli@

*@dateJan14,20141:

50:

28AM

*/

publicclassUploadActionextendsActionSupport{

privatestaticfinallongserialVersionUID=-8920466592471253212L;

privateStringusername;//用户名

privateString[]uploadContentType;//上传文件的类型,(Fileupload拦截器传入的参数)

privateFile[]upload;//上传的文件,(Fileupload拦截器传入的参数)

privateString[]uploadFileName;//上传文件的真实文件名,(Fileupload拦截器传入的参数)

privateStringuploadPath;

publicvoidsetUploadPath(StringuploadPath){

this.uploadPath=uploadPath;

}

publicvoidsetUsername(Stringusername){

this.username=username;

}

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1