1、实现这样一份功能,列如用户在进行某些操作的时候,如果没有登陆重定向到登陆页面
首先:我们创建一个功能操作页面,用户准备在该页面执行某些操作
在index.jsp中
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>Insert title here 登录 访问受保护的页面
然后点击之后访问mustLogin.action这个action
代码如下
package com.bjpowernode.struts2;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionContext;public class MustLoginAction implements Action { public String execute() throws Exception { if (ActionContext.getContext().getSession().get("user") == null) { //重定向到登录页面 return LOGIN; } return SUCCESS; }}
在该操作中:获得请求的session中存在的user用户名,如果用户名为空,就重定向到登陆页面
ActionContext.getContext().getSession().get("user")
我们来看下struct.xml的配置
/login.jsp
这里可以进行配置 result的type类型配置成redirect类型,表示重定向到/login.jsp
type的默认值为dispatcher,就是type="dispatcher,表示转发"
--> <!-- <result name="login" type="dispatcher">/login.jsp</result> --> <!-- type="redirect",可以重定向到任何一个web资源,如:jsp或Action 如果要重定向到Action,需要写上后缀:xxxx.action type="redirectAction",可以重定向到Action,不需要写后缀,此种方式更通用些 不会因为后缀的改变影响配置上面重定向只是针对mustaction有效,我们要针对所有的action都有效,我们可以配置一个全局的重定向
/login.jsp
总结:
Struts2的Action访问Servlet API
1、可以通过ActionContext访问Servlet API,此种方式没有侵入性
2、在Struts2中默认为转发,也就是<result>标签中的type="dispatcher",type的属性可以修改为重定向
Struts的重定向有两种: type="redirect",可以重定向到任何一个web资源,如:jsp或Action 如果要重定向到Action,需要写上后缀:xxxx.action type="redirectAction",可以重定向到Action,不需要写后缀,此种方式更通用些 不会因为后缀的改变影响配置 3、关于Struts2的type类型,也就是Result类型,他们都实现了共同的接口Result,都实现了execute方法 他们体现了策略模式,具体Result类型参见:struts-default.xml文件: <result-types> <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/> <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/> <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/> <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/> <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/> <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/> <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/> <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/> <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" /> </result-types> 我们完全可以自己根据需求扩展Result类型4、全局Result和局部Result