在Struts2 中获取session 的方式

在struts2 中request,response,session 都被隐藏起来了,所以不能在像JSP中那样的方式来设置和获取session的值了

可以通过IoC(控制反转)的方式来获取request,response,session,这里以session为列

以登录用户和密码存储在session中为列

首先index.jsp 页面

	<div align="center">
		<form action="" method="post" name="loginForm">
			username:<input type="text" name="username"/> <br>
			password:<input type="password" name="password"/> <br>
			<input type="button" name="btn" value="提交" οnclick="javascript:document.loginForm.action='login/Login';document.loginForm.submit();">			
		</form>
	</div>


web.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>struts_session</display-name>
  <filter>
       <filter-name>struts2</filter-name>
       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
   </filter>

   <filter-mapping>
       <filter-name>struts2</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping>
    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

接下来根据struts.xml中寻找action  


<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
   
    <package name="example" namespace="/login" extends="struts-default">
    	<action name="Login" class="com.session.LoginAction">
    		<result >/success.jsp</result>
    	</action>        
    </package>
    <!-- Add packages here -->
</struts>

然后是创建对应的action对象,然后会根据询问时候实了SessionAware, ServletRequestAware,

ServletResponseAware接口,反射之后得知实现了这些借口,则调用相对应的set方法。之后访问LoginAction的execute()的方法

之所以叫做控制反转,是因为action对象的session变量不是自己设置的,而是依赖于外部注入的

Java代码如下

package com.session;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport implements SessionAware,ServletRequestAware,ServletResponseAware{
	private static final long serialVersionUID = 111;
	private String username;
	private String password;
	
	private HttpServletResponse Response;
	private HttpServletRequest Request;
	private Map<String,Object> Session;
	
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String psw) {
		this.password = password;
	}
	@Override
	public void setServletResponse(HttpServletResponse Response) {
		this.Response = Response;
	}
	@Override
	public void setServletRequest(HttpServletRequest Request) {
		this.Request = Request;
	}
	@Override
	public void setSession(Map<String, Object> Session) {
		this.Session = Session;
	}	
	public String execute() {
		this.Session.put("username", username);
		this.Session.put("password", password);
		return SUCCESS;
	}
}

成功之后跳转到success.jsp页面,在此页面通过session获取username的值

<body>
	<div align="center">
		<%=session.getAttribute("username")%> <br>
		<s:property value="#session.username"/>	<br>
		<s:debug></s:debug>
	</div>
</body>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值