Struts学习笔记(2)

三、Struts2部分标签

1)<package>:用来组织模块的。比如用户模块,订单模块等。通常它的extends属性要继承struts-default(struts-default.xml)。必须要有一个name属性,可以让其它包应用它。

2)<action>:一个Struts2的请求就是一个action。其name属性  对应一个struts请求的名字。

3)一个<action>标签中可以有一个或多个<result>子节点。这些子节点通过<result>的name属性来区分,name的属性值和action的返回值对应。<result>还有个type的属性,表示结果的类型,默认是dispatcher(转发)。

四、Action概述

1.action和Action类

1)action:一个Struts2请求就是一个action。

2)Action类:能够处理Struts2的请求的类。

注:a.Action类的属性的名字必须遵循与javabean属性名相同的命名规则,属性类型可以是任意的。

b.必须带有一个空的构造器(反射创建实例)

c.至少有一个struts执行时action调用的方法

d.可以包含多个action方法

2.通过ActionContext获取WEB资源

1)WEB资源:HttpServletRequest、HttpSession、SessionContext等原生Servlet API。在B/S中的Controller必定访问WEB资源。

2)访问WEB资源的方式

      a.和Servlet API解耦的方式

      只能访问到有限个Servlet API对象也只能访问有限的方法。

      >使用ActionContext(Action的上下文对象)

开始页面:

      <a href="actionContextTest.action?name=yaorange">actionContext测试</a>

Action类:

      publicString execute(){

           ActionContextactionContext=ActionContext.getContext();

           //actioncontext  通过ActionContext对象中的getApplication()方法来获取application对象的Map对象。

           Map<String,Object> applicationMap = actionContext.getApplication();

            //设置属性值。

   applicationMap.put("application","application value");

            //session

           Map<String,Object> sessionMap = actionContext.getSession();

 //设置属性值。

           sessionMap.put("session","sessionvalue");

           //request actionContext中没有直接获取request对应的Map的方法,需要有get()方法手动调用。

           Map<String,Object>requestMap= (Map<String,Object>)actionContext.get("request");

           //下面的值 获取不到。

           requestMap.put("request","request value");

           //parameter 

           Map<String,Object> parameters = actionContext.getParameters();

            System.out.println(((String[])parameters.get("name"))[0]);

         

          

          

            return"success";

       }

测试页面:

  <h4>actionContext测试</h4>

  <br>

  actionContext:${applicationScope.application}

  <br>

  session:${sessionScope.session}

  <br>

  request:${requestScope.request}

  <br>

  parameters:${parameters.name}

 

       >实现XxxAware接口(Action类分别实现ApplicationAware,SessionAware,RequestAware,ParameterAware接口)

首页:

<a href="awareTest.action?name=yaorange">aware测试</a>

Action类:

private Map<String, Object> applicationMap;
private Map<String, Object> sessionMap;
private Map<String, Object> requestMap;
private Map<String, String[]> parametersMap;
public String execute(){
//application
applicationMap.put("application","application value");
//session
sessionMap.put("session","session value");
//request
requestMap.put("request", "request value");
//paremeter
String name=((String[])parametersMap.get("name"))[0];
System.out.println(name);
return "success";
}


@Override
public void setApplication(Map<String, Object> applicationMap) {
this.applicationMap=applicationMap;
}


@Override
public void setSession(Map<String, Object> sessionMap) {
this.sessionMap=sessionMap;

}


@Override
public void setRequest(Map<String, Object> requestMap) {
this.requestMap=requestMap;

}


@Override
public void setParameters(Map<String, String[]> parametersMap) {
this.parametersMap=parametersMap;
}

测试页面:

<h3>aware测试</h3>
application:${applicationScope.application}
<br>
session:${sessionScope.session}
<br>
request:${requestScope.request}

注:若一个Action类中,多个action方法需要调用域对象的map或parameters,一般实现XxxAware接口

b.和Servlet API耦合的方式

可以访问更多的Servlet API对象,可以调用原生的方法。

>使用ServletActionContext

首页:

      <ahref="servletActionContextTest.action">servletActionContext测试</a>

Action类

public String execute(){

            //获取application->ServletActionContext.getServletContext()。

           ServletContextservletContext = ServletActionContext.getServletContext();

     

          

           //获取session -> 先获取request再获取session ServletActionContext.getRequest().getSession()。

           HttpSessionsession = ServletActionContext.getRequest().getSession();

           //获取request-> ServletActionContext.getRequest()。

           HttpServletRequestrequest = ServletActionContext.getRequest();

            System.out.println("成功获取");

           return"success";

       }

-------->打印“成功获取则表明获取成功”

>实现ServletXxxAware接口(ServletRequestAware,ServletContextAware)

首页:

<ahref="servletAwareTest.action">servletAwaretext测试</a>

Action类:

private ServletContext servletContext;

      privateHttpServletRequest request;

     

      publicString execute(){

           //application

          System.out.println("application:"+servletContext);

           //session

           System.out.println("session:"+request.getSession());

           //request

           System.out.println("request:"+request);

           return"success";

      }

      @Override

      public voidsetServletContext(ServletContext servletContext) {

           this.servletContext=servletContext;

      }

 

      @Override

      public voidsetServletRequest(HttpServletRequest request) {

           this.request=request;

      }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值