struts控制组件

Struts2的控制组件:

核心控制器:过滤器(struts2提供的一个过滤器,由web.xml的filter和filter-mapping设置)。

控制组件类型:业务逻辑控制器Action。

 

核心控制器的配置

<!--定义struts2的核心Filter-->

<filter>

<filter-name>struts2</filter-name>

<!--Struts2.1.3版本起使用的核心过滤器-->

<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

<!--让Struts2的核心Filter拦截所有请求-->

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

如果只拦截.action文件,则设置为:<url-pattern>*.action</url-pattern>

 

业务逻辑控制器Action

步骤:

  1. 创建Action类
  2. 创建struts.xml配置包、动作等

 

1.Action处理请求参数方法

1.1属性驱动

使用属性作为贯穿MVC流程的信息携带者,依附于Action实例,Action实例封装请求参数和处理结果。属性驱动有三种:普通POJO类、实现Action接口、继承ActionSupport

 

这是Action接口的声明常量,扩展ActionSupport类后可以直接拿来用

 

Action接口中的常量返回值含义:

–ERROR:表示动作类执行失败。

–SUCCESS:表示动作类执行成功,并将由相关的视图页面显示结果 。

–LOGIN:表示需要先登录才可以执行动作 。

–INPUT:表示需要输入全部数据才能执行动作或数据输入无效需重新输入 。

–NONE:表示动作类执行成功,但不显示任何页面。

 

语法要求:

–请求参数为基本数据类型。

–Action类中声明和请求参数名及类型一致的变量。

–在Action类中定义与请求参数名一致的基本数据类型的属性的setter和getter方法

 

案例:

<form action=”login.action” method=”post”>

    用户名:<input type=”text” name=”username” />

密  码:<input type=”password” name=”password” />

<input type=”submit” value=”登录” />

</form>

 

在Action中声明成员变量,成员变量名与表单项name属性一致;

//1. 继承ActionSupport类

public class LoginAction extends ActionSupport {

    //2. 声明成员变量(与表单项name一致,这里最好是私有化一个实体类对象,参见后面的)

    private String username;

    private String password;

//3. 封装,省略getter/setter方法

//struts2的拦截器机制,getter/setter方法负责解析用户请求参数,并且将请求参数值赋给action对应的属性

 

    public String execute() throws Exception {

        if("test".equals(getUsername()) && "123".equals(getPassword())){

            return SUCCESS;

        }else{

            return ERROR;

        }

    }

}

 

 

1.2模型驱动(对象)

就是使用单独的JavaBean实例来贯穿整个MVC流程,JavaBean实例封装请求参数和处理结果。模型驱动有一种:ModelDriven

 

语法要求:

–创建域对象类,其中属性和参数名一致。

–请求参数格式为:域对象.基本数据类型属性。

–Action类中声明和域对象名字和类型一致的变量。

–在Action类中定义与域对象一致类型和名字的属性的setter和getter方法。

 

案例:

<form action=”login.action” method=”post”>

    用户名:<input type=”text” name=”user.username” />

密  码:<input type=”password” name=”user.password” />

<input type=”submit” value=”登录” />

</form>

 

创建表单实体类:

public class User{

private String username;

private String password;

    --省略setter/getter--

}

 

Action:

//1. 实现ModelDriven接口

public class LoginAction implements ModelDriven<User> {

    //定义用于封装请求参数和处理结果的Model

private User user = new User();

    //2. 实现接口的getModel()方法,并把创建对象返回

    @Override

    public User getModel() {

        return user;

}

 

    //4. 在execute()中使用对象

    public String execute() throws Exception {

        if("test".equals(user.getUsername()) && "123".equals(user.getPassword())){

            return SUCCESS;

        }else{

            return ERROR;

        }

    }

}

 

 

2在struts.xml中配置包和动作

2.1<package>

包,可以包含多个动作。

常用属性:

案例:

<action name="login" class="com.zking.action.LoginAction" method="isVerificationUser">

……

</action>

 

2.2<result>

定义动作结果,对Action的结果进行映射。

常用属性:

案例:

<action name="login" class="com.zking.action.LoginAction" method="isVerificationUser">

<result name="error">/input.jsp</result>

<result name="success" type="redirect">/welcome.jsp</reslut>

</action>

 

2.3Action访问servlet api

Struts2提供了一个ActionContext(com.opensymphony.xwork.ActionContext),它是Action执行时的上下文,上下文可以看作是一个容器(其实我们这里的容器就是一个Map而已),它存放的是Action在执行时需要用到的对象。可以通过下面方法访问Servlet API:

Object      get(key)

类似于HttpServletRequest的getAttribute(String)

Map         getApplication()

返回一个Map对象

static ActionContext       getContext()

返回静态的ActionContext实例,相当于HttpServletRequest对象

Map         getParameters()

获取所有的请求参数,返回Map对象

Map          getSession()

返回一个Map对象

void          setApplication(Map)

向application传入一个Map对象

void          setSession(Map)

向session传入一个Map对象

void          put(key, value)

添加对象

 

 

如何获得地址栏参数、表单参数:(struts版本不一样使用也不一样)

ActionContext context = ActionContext.getContext();

 

// 得到HttpServletRequest对象的attribute(解耦)

Map<String, Parameter> paramsMap = context.getParameters();

String type = paramsMap.get("type").toString();

 

Map<String, Parameter> paramMap = ActionContext.getContext().getParameters();

Parameter s = paramMap.get("type");

System.out.println(s.toString());

 

// 得到request对象

HttpServletRequest request = (HttpServletRequest) context.get(StrutsStatics.HTTP_REQUEST);

String type2 = request2.getParameter("type");

 

 

获得servlet对象:

ActionContext ac = ActionContext.getContext();

// map的key就是表单项的各name

Map<String, Object> map = ac.getParameters();

//查看Map中的数据

Set<String> keys = map.keyset();

for(String key : keys){

    Object[] obj = (Object[])map.get(key);

System.out.println(Arrays.toString(obj));

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

银色亡灵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值