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

struts2第十讲学习笔记,获取Servlet.api的两种方式

2017-05-31 22:23 423 查看
获取Servlet.api的两种方式

解耦使得使用struts2来进行测试的时候,不需要启动服务器。一定程度上提高了开发效率.

使用解耦的方式来获取Servlet.api,通过ActionContext对象获取
ActionContext获取的session,request,application并不是真正的HttpServletRequest,HttpServletResponse,ServletContext对象,

而是将这三个对象里面的值重新包装成了map对象.
这样的封装,可以让我们及时获取到值,并且避免和web容器直接打交道,实现了完全的解耦。

获取Servlet中的requset的两种方式
1.解耦方式获取requset

//获取session
ActionContext ac = ActionContext.getContext().

Map<String,Object> session = as.getSession();//看,这里是put,这是Map集合哦
session.put("user",name);

//获取request---HttpServletRequest对象的attributes(一些键值对)

Map<String,Object> requset = ac.get("requset");

Map<String,Object> requset = Map<String,Object>ActionContext.getContext().get("request");

这拿到了request的相当于attributes的键值对

1.什么是ActionContext?
ActionContext是map结构的容器,ActionContext是Action上下文,存放Action执行过程中的数据信息,如requset,session,application的数据。

每次请求都都会为当前线程创建一个新的ActionContext.因此ActionContext是线程安全的。

2.ActionContext的获取方式
ActionContext可以通过ActionContext类的静态方法getContext获取到,ActionContext as = ActionContext.getContext();

由于ActionContext是线程安全的,并且是通过静态方getContext()获取到的,所以在本线程中的非Action类中也可以访问

注意:ActionContext是基于请求创建的,所以在非请求的线程中是不能使用ActionContext对象的,如filter的init()方法。

完整action代码

public class Login {
private String username;
private String pwd;
public String execute(){
return login();
}
public String login(){
if("siggy".equals(username)&&"1111".equals(pwd)){
//获取session
ActionContext as = ActionContext.getContext();
Map<String,Object> session = as.getSession();
session.put("user", username);


//获取requset的HttpServletRequest的attributes对象

                       //Map<String,Object> request = (Map<String,Object>)ActionContext.getContext().get("request");
 Map request = (Map) as.get("request");request.put("password",pwd);

System.out.println(request.get("password"));

return Action.SUCCESS;

}else

{

return Action.LOGIN;

}

}

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}

}

jsp页面上请求${user } 打印出来的是username的值

在服务器端,也能接收到密码,它是通过requset拿到的

耦合
2.通过获取ServletActionContext工具类获取HttpServletRequset对象
HttpServletRequset requset = ServletActionContext.getRequset();//这里的requset是服务器创建的请求,所以跟web服务器有耦合的地方。

package cn.sxt.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;

public class Login {
private String username;
private String pwd;
public String execute(){
return login();
}
public String login(){
if("siggy".equals(username)&&"1111".equals(pwd)){
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
session.setAttribute("user", username);
request.setAttribute("password", pwd);
System.out.println(request.getAttribute("password"));
return Action.SUCCESS;
}else{
return Action.LOGIN;
}


public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}

}

JSP代码:    ${user },欢迎你 this is success.jsp

页面显示 : siggy,欢迎你 this is success.jsp 

控制台显示  1111
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐