后台数据操作

引入

1 之前web阶段,提交表单到servlet里面,在servlet里面使用request对象里面的方法获取,getParameter,getParameterMap
2 提交表单到action,但是action没有request对象,不能直接使用request对象

一 在action获取表单提交数据

1 使用ActionContext类获取
Map<String,Object> getParameters() 返回一个包含所有HttpServletRequest参数
(1)因为方法不是静态的方法,需要创建ActionContext类对象
(2)这个ActionContext类对象不是new出来的
static ActionContext getContext() 获取当前线程的ActionContext对象
(3)演示

  • 创建表单,提交表单到action里面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/form1" method="post">
    username:<input type="text" name="username"><br>
    password:<input type="text" name="password"><br>
    address: <input type="text" name="address"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>
  • 写action方法
package Form;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

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

public class Form1DemoAction extends ActionSupport {
    @Override
    public String execute() throws Exception {
        //第一种方式
        //1 使用ActionContext类对象
        ActionContext context = ActionContext.getContext();
        //2 调用方法得到表单数据
         // key 是表单输入项name属性值,value是输入的值
        Map<String,Object> map= context.getParameters();

        Set<String> keys = map.keySet();
        for (String key : keys){
            //根据key得到value
            //数组形式:因为输入项里面可能有复选框
            Object[
] objects= (Object[]) map.get(key);
            System.out.println(Arrays.toString(objects));
        }
        return NONE;
    }
}
  • 配置核心文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="dmeo2" extends="struts-default" namespace="/">
        <action name="form1" class="Form.Form1DemoAction">
        </action>
    </package>
</struts>
运行结果

2 使用ServletActionContext类获取
(1)static HttpServletRequest getRequest()获取Web应用的HttpServletRequest对象
(2)static HttpServletResponse getResponse()获取Web应用的HttpServletResponse对象
(3)static ServletContext getServletContext()获取Web应用的ServletContext对象
(4)static PageContext getPageContext()获取Web应用的PageContext对象
(5)演示

  • 创建表单,提交表单到action里面
<%--
  Created by IntelliJ IDEA.
  User: pc
  Date: 2017/10/9
  Time: 21:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/form2" method="post">
    username:<input type="text" name="username"><br>
    password:<input type="text" name="password"><br>
    address: <input type="text" name="address"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

  • 写action方法
package Form;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletRequest;

public class Form2DemoAction extends ActionSupport {
    @Override
    public String execute() throws Exception {
    //第二种方式 使用ServletAction类获取
        //1 使用ServletActionContext获取request对象
        HttpServletRequest request= ServletActionContext.getRequest();
        //2 调用request里面的方法得到结果
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String address= request.getParameter("address");

        System.out.println(username+" "+password+" "+address);
        return NONE;
    }
}

  • 配置核心文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
    <package name="dmeo2" extends="struts-default" namespace="/">
        <action name="form1" class="Form.Form1DemoAction"></action>
        <action name="form2" class="Form.Form2DemoAction"></action>
    </package>
</struts>
结果显示

3 使用接口注入方式获取(了解)

package Form;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;

import javax.servlet.http.HttpServletRequest;

public class Form3DemoAction extends ActionSupport implements ServletRequestAware {
    private HttpServletRequest request =null;
    public void setServletRequest(HttpServletRequest httpServletRequest) {
    this.request = request;
    }

    @Override
    public String execute() throws Exception {
        String username= request.getParameter("username");
        System.out.println(username);
        return NONE;
    }
}

4 操作action域对象
(1)request

         //1 request域
        HttpServletRequest request1 = ServletActionContext.getRequest();
        request1.setAttribute("req","reqValue");

(2)session

        //2 session域
        HttpSession session= request1.getSession();
        session.setAttribute("sess","sessValue");

(3)ServletContext

        //3 ServletContext域
        ServletContext context = ServletActionContext.getServletContext();
        context.setAttribute("contextname","contextValue");

二 Struts2提供获取表单数据方式

1 原始方式获取表单封装到实体类对象

package Form;

import com.opensymphony.xwork2.ActionSupport;
import entity.User;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletRequest;

public class Form4DemoAction extends ActionSupport {
    @Override
    public String execute() throws Exception {
        //1 获取表单数据
        HttpServletRequest request = ServletActionContext.getRequest();
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String address = request.getParameter("address");
        //2 封装到实体类
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setAddress(address);

        System.out.println(user);
        return NONE;
    }
}

2 属性封装

  • 特点:直接把表单提交属性封装到action的属性里面
  • 实现步骤
定义表单
核心配置

(1)在action成员变量位置定义变量

  • 变量名称和表单输入项的name属性值一样
定义变量

(2)生成变量的set方法(set和get方法都写出来)


生成get和set方法部分代码
  • 不足:使用属性封装获取表单数据到属性里面,不能把数据直接封装到实体类对象类里面
执行

3 模型驱动封装(重点)

  • 使用模型驱动方式,可以直接把表单数据封装到实体类对象里面
  • 实现步骤
    (1)action实现接口 ModelDriver
    (2)实现接口里面的方法 getModel方法
  • 把创建对象返回
    (3)在action里面创建实体类对象
package Date;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import entity.User;
//使用模型驱动获取表单数据
public class DateDemo2Action extends ActionSupport implements ModelDriven<User>{
    //创建对象
    //前提要求:表单输入项name属性值和实体类属性名称一样
    private User user = new User();
    public User getModel() {
        //返回创建user对象
        return user;
    }
    @Override
    public String execute() throws Exception {
        System.out.println(user.toString());
        return NONE;
    }
}
  • 前提要求:表单输入项name属性值和实体类属性名称一样

4 使用模型驱动和属性封装注意问题

  • 在一个action中,获取表单数据可以使用属性封装,或者模型驱动封装,但是不能同时使用属性封装和模型驱动封装同时获取一个表单。如果同时使用,只会执行模型驱动。

5 表达式封装(会用)

  • 使用表达式封装可以把表单数据封装到实体类对象里面
  • 实现过程

(1)在action里面声明实体类

声明实体类

(2)生成实体类变量的set和get方法

生成get和set方法

(3)在表单输入项的name属性值里面写表达式形式

表达式形式
执行

三 比较表达式封装和模型驱动封装

1 使用表达式封装和模型驱动封装都可以把数据封装到实体类对象里面

2 不同点
(1)使用模型驱动只能把数据封装到一个实体类对象里面

  • 在一个action里面不能使用模型驱动把数据封装到不同的实体类对象里面

(2)使用表达式封装可以把数据封装到不同的实体类对象里面

package Date;

import com.opensymphony.xwork2.ActionSupport;
import entity.Book;
import entity.User;

//使用表达式形式获取表单数据
public class DateDemo3Action extends ActionSupport{
    //1 声明实体类
    private User user;
    private Book book;
    //2 生成实体类变量的set和get方法

    public Book getBook() {
        return book;
    }

    public void setBook(Book book) {
        this.book = book;
    }

    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public String execute() throws Exception {
        System.out.println(user.toString());
        System.out.println(book.getBname());
        return NONE;
    }
}
表达式

四 Struts2获取数据封装到集合中(会用)

1 封装到list集合
第一步 在action声明List

声明

第二步 生成list变量的set和get方法

get和set方法

第三步 在表单输入项里面写表达式

表达式书写
测试结果

2 封装到map集合
第一步 声明map集合

声明

第二步 生成get和set方法

get和set方法

第三步 在表单输入项的name属性值里面写表达式

表达式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,836评论 6 13
  • 标签 如果要配置的标签,那么必须要先配置标签,代表的包的概念。 包含的属性 name包的名称,要求是唯一的,管理a...
    偷偷得路过阅读 1,278评论 0 0
  • “没有人比我更爱你,”亚亚说,“唐风对我说着句话时,我感动的唏哩哗啦,一塌糊涂。” 什么是爱情?我说。看着对面正襟...
    花好月圆妞儿阅读 376评论 0 0
  • 谢谢公子世无双, 无数姑娘思断肠。 才华横溢无穷尽, 信手拈来如平常!
    天涯书单阅读 110评论 9 8