访问ServletApi |
使用Struts2之后,我们使用Action来处理请求,没有再使用到Servlet了.
--------------------------------------------
Action访问ServletAPI: (servlet-api.jar).
在Action类中操作Servlet中相关的对象.
request,repsonse,session,cookie等.
获取请求参数:request.getParameter(String ..)
设置/获取共享数据:作用域对象.setAttribute(Stringname,Object val);
(request,session,servletContext/application)
操作Cookie: response.addCookie(...);
------------------------------------------------------------------------
Action访问ServletAPI,有三种方式:
1.通过让Action类去实现感知接口.
2.使用ServletActionContext类,该类提供很多静态方法可以返回ServeletAPI对象(比如需要操作Cookie).
3.使用ActionContext类,本身是Struts2对ServletAPI的封装.(建议和优先选用)
1.通过让Action类去实现感知接口. |
方式1:通过让Action类去实现感知接口.
此时项目依赖:servlet-api.jar.
ServletRequestAware:感知HttpServletRequest对象;
ServletResponseAware:感知HttpServletResponse对象;
ServletSessionAware:感知HttpSession对象;
问题,和ServletAPI藕合严重;
一般的,我们不要,留给框架自己使用的.
2.使用ServletActionContext类, |
方式2.使用ServletActionContext类,该类提供很多静态方法可以返回ServeletAPI对象.
可以这样来理解,ServletActionContext就是ServletAPI的工具类.
使用的非常频繁,因为简单易用.
static HttpServletRequest getRequest() :返回HttpServletRequest对象
static HttpServletResponse getResponse() :返回HttpServletResponse对象
static ServletContext getServletContext() :返回ServletContext对象.
3.通过ActionContext工具类 |
方式3.使用ActionContext类,本身是Struts2对ServletAPI的封装.
什么是ActionContext:Action的环境对象,每一次请求都是一个新的Action对象,一个ActionContext对象封装了这一次请求的相关数据.
ActionContext使用了ThreadLocal模式,所以说是线程安全的.
创建ActionContext对象:
ActionContext ctx = ActionContext.getContext();
---------------------------------------------------------------------------------
ActionContext的常用方法:此时把作用域对象全部使用Map来表示.
获取请求参数:
以前: String request.getParameter(String name);
String[] request.getParameterValues(String name);
现在:
Map<String,String[]>getParameters();
操作request作用域对象:
以前:
设置共享数据:request.setAttribute(String name,Object value);
获取共享数据:Object value = request.getAttribute(String name);
现在: ActionContext本身就是对一次请求的封装.
设置共享数据:ActionContext.getContext().put(Stringname,Object value);
获取共享数据:Objectvale = ActionContext.getContext().get(String name)
操作session作用域对象:
以前:
设置共享数据:request.getSession().setAttribute(String name,Object value);
获取共享数据:Object value = request.getSession().getAttribute(Stringname);
现在: 只需要得到Session的Map对象即可.
Map<String,Object>sessionMap = ActionContext.getContext().getSession();
设置共享数据:sessionMap.put(String name,Object value)
获取共享数据:Objectvalue = sessionMap .get(String name)
操作application作用域对象:
以前:
设置共享数据:request.getServletContext().setAttribute(String name,Objectvalue);
获取共享数据:Object value =request.getgetServletContext().getAttribute(String name);
现在: 只需要得到application的Map对象即可.
Map<String,Object>applicationMap = ActionContext.getContext().getApplication();
接下来的操作就是操作Map.
Action获取请求参数两种种方式 |
J2EE的最佳实践:按照功能职责,分层开发:
表现层:
职责:
1.接受请求数据
2.把数据封装Model对象
3.调用业务逻辑方法处理请求
4.控制界面跳转
-------------------------------------------------
MVC思想:
M:数据对象(JavaBean/DAO)
V:JSP
C:StrutsPrepareAndExecuteFilter(前端控制器.)
问题:Action到底充当什么角色?
-------------------------------------------------
Action获取请求参数两种方式:
第一种:Action本身作为Model对象,通过setter方法封装(属性注入)
第二种:创建独立Model对象,页面通过ognl表达式封装(属性注入)
package clu.mochunrong.action2;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array;
public class StudentAction extends ActionSupport implements ServletRequestAware {
private static final long serialVersionUID = 1L;
private User user; //通过setter来创建对象
@Override
public String execute() throws Exception {
System.out.println("-----------execute11--------");
System.out.println(user.getName());
return "SUCCESS";
}
public void setUser(User user) {
this.user = user;
}
/*setUser是用来创建对象的,原理:设置值的时候发现没有User对象的时候,sturts2就会为他自动new对象,
不然报空指针错误,另外解决办法可以自己new一个对象*/
public void setServletRequest(HttpServletRequest request) {
System.out.println("setServletRequest");
}
public User getUser() {
return user;
}
}
访问ServletApi |
使用Struts2之后,我们使用Action来处理请求,没有再使用到Servlet了.
--------------------------------------------
Action访问ServletAPI: (servlet-api.jar).
在Action类中操作Servlet中相关的对象.
request,repsonse,session,cookie等.
获取请求参数:request.getParameter(String ..)
设置/获取共享数据:作用域对象.setAttribute(Stringname,Object val);
(request,session,servletContext/application)
操作Cookie: response.addCookie(...);
------------------------------------------------------------------------
Action访问ServletAPI,有三种方式:
1.通过让Action类去实现感知接口.
2.使用ServletActionContext类,该类提供很多静态方法可以返回ServeletAPI对象(比如需要操作Cookie).
3.使用ActionContext类,本身是Struts2对ServletAPI的封装.(建议和优先选用)
1.通过让Action类去实现感知接口. |
方式1:通过让Action类去实现感知接口.
此时项目依赖:servlet-api.jar.
ServletRequestAware:感知HttpServletRequest对象;
ServletResponseAware:感知HttpServletResponse对象;
ServletSessionAware:感知HttpSession对象;
问题,和ServletAPI藕合严重;
一般的,我们不要,留给框架自己使用的.
2.使用ServletActionContext类, |
方式2.使用ServletActionContext类,该类提供很多静态方法可以返回ServeletAPI对象.
可以这样来理解,ServletActionContext就是ServletAPI的工具类.
使用的非常频繁,因为简单易用.
static HttpServletRequest getRequest() :返回HttpServletRequest对象
static HttpServletResponse getResponse() :返回HttpServletResponse对象
static ServletContext getServletContext() :返回ServletContext对象.
3.通过ActionContext工具类 |
方式3.使用ActionContext类,本身是Struts2对ServletAPI的封装.
什么是ActionContext:Action的环境对象,每一次请求都是一个新的Action对象,一个ActionContext对象封装了这一次请求的相关数据.
ActionContext使用了ThreadLocal模式,所以说是线程安全的.
创建ActionContext对象:
ActionContext ctx = ActionContext.getContext();
---------------------------------------------------------------------------------
ActionContext的常用方法:此时把作用域对象全部使用Map来表示.
获取请求参数:
以前: String request.getParameter(String name);
String[] request.getParameterValues(String name);
现在:
Map<String,String[]>getParameters();
操作request作用域对象:
以前:
设置共享数据:request.setAttribute(String name,Object value);
获取共享数据:Object value = request.getAttribute(String name);
现在: ActionContext本身就是对一次请求的封装.
设置共享数据:ActionContext.getContext().put(Stringname,Object value);
获取共享数据:Objectvale = ActionContext.getContext().get(String name)
操作session作用域对象:
以前:
设置共享数据:request.getSession().setAttribute(String name,Object value);
获取共享数据:Object value = request.getSession().getAttribute(Stringname);
现在: 只需要得到Session的Map对象即可.
Map<String,Object>sessionMap = ActionContext.getContext().getSession();
设置共享数据:sessionMap.put(String name,Object value)
获取共享数据:Objectvalue = sessionMap .get(String name)
操作application作用域对象:
以前:
设置共享数据:request.getServletContext().setAttribute(String name,Objectvalue);
获取共享数据:Object value =request.getgetServletContext().getAttribute(String name);
现在: 只需要得到application的Map对象即可.
Map<String,Object>applicationMap = ActionContext.getContext().getApplication();
接下来的操作就是操作Map.
Action获取请求参数两种种方式 |
J2EE的最佳实践:按照功能职责,分层开发:
表现层:
职责:
1.接受请求数据
2.把数据封装Model对象
3.调用业务逻辑方法处理请求
4.控制界面跳转
-------------------------------------------------
MVC思想:
M:数据对象(JavaBean/DAO)
V:JSP
C:StrutsPrepareAndExecuteFilter(前端控制器.)
问题:Action到底充当什么角色?
-------------------------------------------------
Action获取请求参数两种方式:
第一种:Action本身作为Model对象,通过setter方法封装(属性注入)
第二种:创建独立Model对象,页面通过ognl表达式封装(属性注入)
package clu.mochunrong.action2;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array;
public class StudentAction extends ActionSupport implements ServletRequestAware {
private static final long serialVersionUID = 1L;
private User user; //通过setter来创建对象
@Override
public String execute() throws Exception {
System.out.println("-----------execute11--------");
System.out.println(user.getName());
return "SUCCESS";
}
public void setUser(User user) {
this.user = user;
}
/*setUser是用来创建对象的,原理:设置值的时候发现没有User对象的时候,sturts2就会为他自动new对象,
不然报空指针错误,另外解决办法可以自己new一个对象*/
public void setServletRequest(HttpServletRequest request) {
System.out.println("setServletRequest");
}
public User getUser() {
return user;
}
}