struts2(类和ServletApi)

访问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;
	}

	
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mc19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值