Struts2框架笔记02_API_结果页面配置_数据的封装

2019-04-29  本文已影响0人  itzhouq的笔记
结构图

1. Struts2的Servlet的API的访问

1.1 方式一:完全解耦合的方式

1.1.1 环境搭建

1.1.2 代码

1.1.3 测试

1.1.4 向域对象中存入数据

1.2 方式二:使用Servlet的API的原生方式【掌握】

1.2.1 jsp文件

<h3>方式二:使用Servlet的API的原生方式</h3>
<form action="${pageContext.request.contextPath }/requestDemo2.action" method="post">
    姓名:<input type="text" name="name"/><br/>
    密码:<input type="password" name="password"/><br/>
    <input type="submit" value="提交"/>
</form>

1.2.2 Action类RequestDemo2

public class RequestDemo2 extends ActionSupport {
    @Override
    public String execute() throws Exception {
        // 一、接收数据
        // 直接获得request对象,通过ServletActionContext
        HttpServletRequest request = ServletActionContext.getRequest();
        Map<String, String[]> map = request.getParameterMap();
        for (String key : map.keySet()) {
            String[] values = map.get(key);
            System.out.println(key+"   " +Arrays.toString(values));
        }
        
        // 二:向域对象中保存数据
        // 向request中保存数据
        request.setAttribute("reqName2", "reqValue2");
        // 向session中保存数据
        request.getSession().setAttribute("sessName2", "sessionValue2");
        // 向application中保存数据
        ServletActionContext.getServletContext().setAttribute("appName2", "appvalue2");
        return SUCCESS;
    }
}

1.2.3 配置文件struts_demo.xml

<package name="demo2" extends="struts-default" namespace="/">
    <action name="requestDemo2" class="com.itzhouq.struts.demo1.RequestDemo2">
         <result name="success">/demo1/demo2.jsp</result>
    </action>
</package>

1.2.4 测试

1.3 方式三:接口注入的方式

1.3.1 jsp文件

<h3>方式三:接口注入的方式</h3>
<form action="${pageContext.request.contextPath }/requestDemo3.action" method="post">
    姓名:<input type="text" name="name"/><br/>
    密码:<input type="password" name="password"/><br/>
    <input type="submit" value="提交"/>
</form>

1.3.2 Action类RequestDemo3

package com.itzhouq.struts.demo1;

import java.util.Arrays;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionSupport;

/**
 *  访问ServletAPI的方式三:接口注入的方式
 * @author itzhouq
 *
 */
public class RequestDemo3 extends ActionSupport implements ServletRequestAware,ServletContextAware {
    private HttpServletRequest request;
    private ServletContext context;

    @Override
    public String execute() throws Exception {
        // 一。接收参数
        // 通过接口注入的方式获得request对象--------首实现ServletRequestAware接口
        Map<String, String[]> map = request.getParameterMap();
        for (String key : map.keySet()) {
            String[] values = map.get(key);
            System.out.println(key+"  "+Arrays.toString(values));
        }
        
        // 二、向域对象中保存数据
        // 向request域中保存数据
        request.setAttribute("reqName3", "reqName3");
        // 向session中保存数据
        request.getSession().setAttribute("sessName3", "sessValue3");
        // 向application中保存数据---------实现ServletContextAware接口
        context.setAttribute("appName3", "appValue3");
        return super.execute();
    }

    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
        
    }

    @Override
    public void setServletContext(ServletContext context) {
        this.context = context;
        
    }
}

1.3.配置文件

<package name="demo3" extends="struts-default" namespace="/">
    <action name="requestDemo3" class="com.itzhouq.struts.demo1.RequestDemo3">
      <result name="success">/demo1/demo2.jsp</result>
    </action>
</package>

2. Struts2的结果页面的配置

2.1 全局结果页面

struts>
    <package name="demo1" extends="struts-default" namespace="/">
        <!-- 全局页面结果 -->
        <global-results>
            <result name="success">/demo1/demo2.jsp</result>
        </global-results>
        <action name="requestDemo1" class="com.itzhouq.struts.demo1.RequestDemo1">
        </action>
        <action name="requestDemo2" class="com.itzhouq.struts.demo1.RequestDemo2">
        </action>
        <action name="requestDemo3" class="com.itzhouq.struts.demo1.RequestDemo3">
        </action>
    </package>
</struts>

2.2 局部结果页面

2.3 result标签的配置

3. Struts2的数据的封装

3.1 属性驱动:提供属性set方法的方式【不常用】

3.2 属性驱动:页面中提供表达式方式

3.3 模型驱动:采用模型驱动方式【最常用】

h3>方式三:模型驱动-模型驱动方式</h3>
<form action="${pageContext.request.contextPath }/UserAction3.action" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    年龄:<input type="text" name="age"><br/>
    生日:<input type="text" name="birthday"><br/>
    工资:<input type="text" name="salary"><br/>
    <input type="submit" name="提交"><br/>
    
</form>
package com.itzhouq.struts.demo2;

import com.itzhouq.struts.domain.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

/*
 *  数据封装的方式三:模型驱动-采用模型驱动的方式
 */
public class UserAction3 extends ActionSupport implements ModelDriven<User> {
    // 模型驱动使用的对象:前提是必须是手动实例化对象的实例
    private User user = new User();
    @Override
    // 模型驱动需要使用的方法:
    public User getModel() {
        return user;
    }
    
    @Override
    public String execute() throws Exception {
        System.out.println(user);
        return NONE;
    }
}
<package name="demo2" extends="struts-default" namespace="/">
    <action name="UserAction1" class="com.itzhouq.struts.demo2.UserAction1">
    </action>
    <action name="UserAction2" class="com.itzhouq.struts.demo2.UserAction2">
    </action>
    <action name="UserAction3" class="com.itzhouq.struts.demo2.UserAction3">
    </action>
</package>

3.4 关于INPUT逻辑视图

input逻辑视图

4. Struts2的复杂类型的数据的封装

4.1 封装数据到List集合中

4.2 封装数据到Map集合中

上一篇 下一篇

猜你喜欢

热点阅读