后台数据操作

作者: 常威爆打来福 | 来源:发表于2017-10-11 12:55 被阅读0次

引入

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属性值里面写表达式

表达式

相关文章

  • 【产品】toB/后台产品经理

    后台产品特点 后台产品更关心: 操作流程、逻辑 数据展现全面性 数据安全 规范(可复用性) 后台产品注重数据的全面...

  • 后台数据操作

    引入 1 之前web阶段,提交表单到servlet里面,在servlet里面使用request对象里面的方法获取,...

  • PINCache中的后台任务

    PINCache中的后台任务 在PINCache磁盘缓存策略中,针对数据写入,删除等磁盘操作,作者用了后台任务操作...

  • Service

    Service的引入 有的操作比较耗时(如:文件IO操作,大量数据的数据库操作,访问网络等),我们希望它们在后台运...

  • django 的使用

    使用django创建项目 模型-数据库 迁移 运行项目 shell 操作数据库模型 后台管理添加后台管理账号: a...

  • Angular4开发简易blog系统(二)创建内存数据库

    大部分的前端人员对数据库的操作还是有些感冒的,毕竟数据库的操作还是属于后台人员负责的,我们都是通过调用后台人员提供...

  • 数据库概念介绍及入门SQL

    数据库作用 储存数据,数据的仓库,带有访问权限限制不同人可以有不同的操作 为什么学习数据库?-操作的都是后台数据,...

  • antd表格组件数字转文字的处理

    在处理后台返回的数据的时候,为了操作方便,后台会把类似于状态和性别定义为数字形式,前端拿到后台返回的数据之后需要对...

  • 微信开发遇到问题及解决总结(一)

    1、wx.request请求后台数据在回调函数中处理数据 请求后台数据之后一般需要存入data或者其他操作,suc...

  • Android网络请求获取不到session , 或者sessi

    做项目有需求给后台传递的json数据 , 这个数据在后续操作中还会使用, 所以我们后台选择了使用session进行...

网友评论

    本文标题:后台数据操作

    本文链接:https://www.haomeiwen.com/subject/zzmeyxtx.html