Struts2保存登陆信息和注销功能例子(转)

来源:互联网 发布:淘宝肖像权投诉 编辑:程序博客网 时间:2024/06/04 19:00

无论是开发WEB应用还是信息系统,总要遇到需要登录的问题。即使是开放度很高的网站,也需要有这个功能,除非是一些完全静态的网站,没有一点交互的内容。

这个是学习笔记,直奔主题。

LoginAction类是已经写好了,要记录用户登录的信息,只需要在return SUCCESS;前面加上以下这段代码就OK了。

Map<String, String> attibutes = ActionContext.getContext().getSession();//记录用户登录信息 
            attibutes.put("username", username); 
            attibutes.put("password", password);

还需要导入包:

import java.util.Map;  
       import com.opensymphony.xwork2.ActionContext; 
       import com.opensymphony.xwork2.ActionSupport;

这样就可以保存登录的信息了,而注销功能的代码更简单。可以在LoginAction里面写然后在struts.xml那里配置,也可以新建一个LogoutActoin的类如下:

 

import java.util.Map;

import com.opensymphony.xwork2.ActionContext; 
       import com.opensymphony.xwork2.ActionSupport;

public class LogoutAction extends ActionSupport {

 
    private static final long serialVersionUID = 1L;

@SuppressWarnings("unchecked") 
    @Override 
    public String execute() throws Exception { 
        Map<String, String> attibutes = ActionContext.getContext().getSession(); 
        attibutes.remove("username"); 
        return SUCCESS; 
    } 
}

至于struts.xml里面的配置转向,自己写上就可以了,然后是页面的问题。一般的系统在登录之前,登录板块显示的是登陆的一个form,而登录成功之后是显示用户的信息,用户注销之后显示的又是登录的form。用struts2实现起来也是非常的简单。用struts2的<s:set>、<s:if>、<s:else>标签就可以实现。这里是它的官方网站上的介绍,它的基本逻辑是这样的。

<s:if test="%{false}">

<div>Will Not Be Executed</div>

</s:if>

<s:elseif test="%{true}">

<div>Will Be Executed</div>

</s:elseif>

<s:else>

<div>Will Not Be Executed</div>

</s:else>

其中test属性是必须的,作为判断显示哪个div的依据。一个实际的例子是:

<!– 这是在session中取得的值 –>

<s:set name="username" value="#session.username"></s:set> 
        <s:set name="password" value="#session.password"></s:set> 
                    <s:if test="#username != null"> 
                            <div > 
                                欢迎你: 
                                <s:property value="#session.username" /> 
                            <ul> 
                                <li> 
                                    <a href="#">修改资料</a> 
                                     <a href="/logout.action">安全退出</a> 
                                </li> 
                            </ul> 
                            </div> 
                    </s:if> 
                    <s:else> 
                        <div> 
                            <table> 
                                <tr> 
                                    <s:form action="login" theme="ajax"> 
                                        <s:textfield label="用户名" name="username"></s:textfield> 
                                        <s:password label="密码" name="password"></s:password> 
                                        <s:submit value="登录"></s:submit>

                                    </s:form> 
                                </tr> 
                                <tr> 
                                    <td> 
                                        <a href="/niubonline/nodecorate/register.jsp">注册新用户</a> 
                                    </td> 
                                    <td> 
                                        <a href="#">忘记密码</a> 
                                    </td> 
                                </tr> 
                            </table> 
                        </div> 
                    </s:else>

在自己的机子上顺利测试通过,手头上没有书本,很多东西遇到了才上网查找资料,太麻烦了,如果手上有本书可以查就好了,网上的信息很多都重复的,COPY来COPY去的,很久才能解决一个问题。

 

----------------------------------------------------------------------------------------------------------------------------------

 

 

二.解决这个问题关键在以下两个方面: 1.在action中如何保存值>> 1.1使用ActoinContext类 Map<String> session = ActionContext.getContext().getSession(); 1.2实现ServletRequestAware接口,并实现其中的setServletRequest方法 private HttpSession session; @Override public void setServletRequest(HttpServletRequest arg0) { this.session = arg0.getSession(); } 1.3实现SessionAware接口,实现其中的setSession方法 private Map<String> session; @Override public void setSession(Map<String, Object> arg0) { this.Session = arg0; } ====> ok, 下面你可以从session取值或存值了 2.在jsp中页面中如何取出已保存的值>>> 2.1 使用ognl表达式得到相应的值 name:<s:property value="#session.name"/> 2.2 使用jsp表达式 name:<%=session.getAttribute("name") %><br> -------------------------------------------------------------------------------------------------------------

开发网站时,经常有这样的问题,登陆成功页面需要知道登陆页面登陆的用户信息,才能根据不同的用户不同的权限控制他们可以访问哪些页面。 为了解决这个问题,就需要把登陆信息保存在服务器的内存中,供多个页面共享。这片服务器的内存在JSP和Servlet里就是Session对象。我们只要在用户登陆成功后把用户信息保存在Session对象中就可以了。那么怎么在Action中访问Session对象呢?

在Struts1.x中,Action中execute的方法的参数包含代表当前请求的Request对象,可以从Requset对象中取得Session对象。

在Struts2中,Action已经不包含Request等信息,Action完全可以不继承任何类,虽然说这样做肯定有它的好处,但确实给我们带来了麻烦,怎么办呢?
其实很简单,查找一下Struts2的帮助我们就可以找到答案(struts-2.0.6\docs\docs\how-do-we-get-access-to-the-session.html)。

有两种方法,我们才用比较简单的,通过ActionContext类的静态方法getContext().getSession();取得Session对象。

和ActionSupport一样,我们需要先导入com.opensymphony.xwork2包下的ActionContext类: 在Login.java的import com.opensymphony.xwork2.ActionSupport;上面添加: import com.opensymphony.xwork2.ActionContext;导入包。 
然后在execute()方法的return SUCCESS;代码前加入如下代码:

Java代码 
  1. Map attibutes = ActionContext.getContext().getSession();  
  2.      
  3. attibutes.put("username", username);  
  4. attibutes.put("password", password);   
  5.     

这样我们就把登陆的用户名和密码保存在了Session对象中。 
为了测试,可以在Success.jsp中添加如下代码:

Html代码  登陆密 码: " quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
  1. <br>登陆用户名:<s:property value="#session.username"/>  
  2. <br>登陆密  码:<s:property value="#session.password"/>   

 

 

或者

${sessionScope.username }

${sessionScope.对象.username}

 

 

部署项目,启动Tomcat,然后在浏览器中输入:

http://localhost:8080/xxx/Login!input.action 分别输入用户名和密码为scott和tiger,单击Submit提交网页,如果在Success.jsp中显示如下信息: 
登录成功.....................  登陆用户名:scott  登陆密 码:tiger 
则说明成功了^_^

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 35岁有眼袋怎么办 晚上睡觉时间短怎么办 小孩说爸爸死了怎么办 扫地机器人坏了怎么办 孩子思维逻辑差怎么办 喜欢动手打别人怎么办 小孩写作文困难怎么办 2岁儿子打人怎么办 三岁宝宝爱咬人怎么办 幼儿园小孩咬人怎么办 孩子不会动手打人怎么办 小孩子隔奶奶涨怎么办 小孩子戒奶奶涨怎么办 孩子总打别人怎么办 儿童在学校打人怎么办 两岁儿童打人怎么办 孩子哭闹要东西怎么办 高中孩子爱打架怎么办 宝宝性格太弱怎么办 宝宝太老实了怎么办 一岁多宝宝爱打人怎么办 一岁半宝宝爱打人怎么办 两岁半宝宝喜欢打人怎么办 孩子总是挨欺负怎么办 一年级孩子爱打架怎么办 孩子没规矩家长怎么办 小朋友在幼儿园打人怎么办 幼儿园小朋友喜欢打人怎么办 三周岁宝宝爱哭怎么办 2周岁宝宝爱哭怎么办 一个月宝宝爱哭怎么办 2岁宝宝爱哭怎么办 三岁小朋友打人怎么办 一岁半小朋友喜欢打人怎么办 爷爷偏心我该怎么办 冲动型学生老师怎么办 两个宝宝争东西怎么办 2周岁宝宝打人怎么办 小孩幼儿园被打怎么办 小孩喝了润滑油怎么办 孩子被打了怎么办