您的位置:首页 > 编程语言 > Java开发

Struts2--访问web元素

2016-02-20 09:47 351 查看
后台action不能通过request等获取前台数据,如果有人登陆了,会往session设定值,怎么实现呢?

action如何往session里设定值?

所以action访问request,session,application等web元素的方法?

总结:

1.jsp调用action

2.action里用map的IoC方法给session赋值

  publicclassLoginAction2extendsActionSupportimplementsRequestAware,SessionAware,ApplicationAware

  session.put("s1","name");

3.在jsp显示里用<s:propertyvalue="#request.变量名"/>调用变量

也可以通过<s:propertyvalue="#parameters.name"/>


只介绍一种最常用的:

1.jsp页面显示:4个按钮分别提交同一个form的方法:

<formname="f"action=""method="post">
用户名:<inputtype="text"name="name"/>
密码:<inputtype="text"name="password"/>
<br/>
<inputtype="button"value="submit1"onclick="javascript:document.f.action='login/login1';document.f.submit();"/>
<inputtype="button"value="submit2"onclick="javascript:document.f.action='login/login2';document.f.submit();"/>
<inputtype="button"value="submit3"onclick="javascript:document.f.action='login/login3';document.f.submit();"/>
<inputtype="button"value="submit4"onclick="javascript:document.f.action='login/login4';document.f.submit();"/>
</form>


 

2.struts.xml配置:

<packagename="login"extends="struts-default"namespace="/login">
<actionname="login*"class="com.bjsxt.struts2.user.action.LoginAction{1}">
<result>/user_login_success.jsp</result>
</action>
</package>


3.action的4种处理方法:

loginAction1.java:取得Map类型的方法

packagecom.bjsxt.struts2.user.action;

importjava.util.Map;

importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionSupport;

publicclassLoginAction1extendsActionSupport{

privateMaprequest;
privateMapsession;
privateMapapplication;

publicLoginAction1(){
request=(Map)ActionContext.getContext().get("request");
session=ActionContext.getContext().getSession();
application=ActionContext.getContext().getApplication();
}

publicStringexecute(){
request.put("r1","r1");
session.put("s1","s1");
application.put("a1","a1");
returnSUCCESS;
}
}


loginAction2.java:取得Map类型的IoC方法:最常用

packagecom.bjsxt.struts2.user.action;

importjava.util.Map;

importorg.apache.struts2.interceptor.ApplicationAware;
importorg.apache.struts2.interceptor.RequestAware;
importorg.apache.struts2.interceptor.SessionAware;

importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionSupport;

publicclassLoginAction2extendsActionSupportimplementsRequestAware,SessionAware,ApplicationAware{

privateMap<String,Object>request;
privateMap<String,Object>session;
privateMap<String,Object>application;

//DIdependencyinjection
//IoCinverseofcontrol
publicStringexecute(){
request.put("r1","r1");
session.put("s1","s1");
application.put("a1","a1");
returnSUCCESS;
}

@Override
publicvoidsetRequest(Map<String,Object>request){
this.request=request;
}

@Override
publicvoidsetSession(Map<String,Object>session){
this.session=session;
}

@Override
publicvoidsetApplication(Map<String,Object>application){
this.application=application;
}
}


loginAction3.java:取得真实类型的方法:  

packagecom.bjsxt.struts2.user.action;

importjavax.servlet.ServletContext;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpSession;

importorg.apache.struts2.ServletActionContext;

importcom.opensymphony.xwork2.ActionSupport;

publicclassLoginAction3extendsActionSupport{

privateHttpServletRequestrequest;
privateHttpSessionsession;
privateServletContextapplication;

publicLoginAction3(){
request=ServletActionContext.getRequest();
session=request.getSession();
application=session.getServletContext();
}

publicStringexecute(){
request.setAttribute("r1","r1");
session.setAttribute("s1","s1");
application.setAttribute("a1","a1");
returnSUCCESS;
}

}


loginAction4.java:取得真实类型的IoC方法:

packagecom.bjsxt.struts2.user.action;

importjavax.servlet.ServletContext;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpSession;

importorg.apache.struts2.interceptor.ServletRequestAware;

importcom.opensymphony.xwork2.ActionSupport;

publicclassLoginAction4extendsActionSupportimplementsServletRequestAware{

privateHttpServletRequestrequest;
privateHttpSessionsession;
privateServletContextapplication;

publicStringexecute(){
request.setAttribute("r1","r1");
session.setAttribute("s1","s1");
application.setAttribute("a1","a1");
returnSUCCESS;
}

@Override
publicvoidsetServletRequest(HttpServletRequestrequest){
this.request=request;
this.session=request.getSession();
this.application=session.getServletContext();
}
}


  

最后如何在jsp中拿到request等值:<s:propertyvalue="#request.变量名"/>

#代表提取的不是valuestack里的内容,而是context里的值

<body>
UserLoginSuccess!
<br/>
<s:propertyvalue="#request.r1"/>|<%=request.getAttribute("r1")%><br/>
<s:propertyvalue="#session.s1"/>|<%=session.getAttribute("s1")%><br/>
<s:propertyvalue="#application.a1"/>|<%=application.getAttribute("a1")%><br/>
<s:propertyvalue="#parameters.name"/><br/>
<s:propertyvalue="#parameters.password"/><br/>
<s:propertyvalue="#attr.a1"/><br/>
<s:propertyvalue="#attr.s1"/><br/>
<s:propertyvalue="#attr.r1"/><br/>
<s:debug></s:debug>
<br/>
</body>


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: