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
解耦使得使用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
相关文章推荐
- Struts2第九讲学习笔记Action的三种实现方式,两种驱动方式
- struts2学习笔记--总结获取servletAPI的几种方式
- struts2学习笔记之六(Action访问servlet的API以及复制项目小技巧)
- struts2学习之访问Servlet对象的两种实现方式
- 【深入Struts2】获取ServletAPI的三种方式
- Struts2--获取ServletAPI的方式
- Struts2中访问Servlet中的API(ActionContext,ServletActionContext)两种方式
- MFC学习笔记--静态编辑框内容获取和输出两种方式
- 【Struts2学习笔记(8)】访问或添加request/session/application属性获取HttpServletRequest / HttpSession / ServletContex
- [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)
- ios学习笔记(四)收回软键盘的两种方式
- 微软企业库5.0学习笔记(三十四)数据访问模块 各种获取数据的方式
- iOS学习笔记14—设置顶部状态栏(State)的两种方式
- struts2——学习笔记1——struts2封装表单数据方式(三种)
- Java开发学习笔记之五:Servlet编程API
- struts2学习笔记---获得HttpServletResponse或HttpServletRequest对象的几种方法
- duilib学习笔记03:Duilib中的事件响应的两种方式
- struts2——学习笔记2 通过form表单方式或者js的方式提交请求,封装boolean值的问题
- Apache ActiveMQ学习笔记【mq的方式有两种:点到点和发布/订阅】
- struts2学习(一)--表单验证的两种方式