后臺數(shù)據(jù)操作

引入

1 之前web階段,提交表單到servlet里面,在servlet里面使用request對象里面的方法獲取,getParameter,getParameterMap
2 提交表單到action,但是action沒有request對象,不能直接使用request對象

一 在action獲取表單提交數(shù)據(jù)

1 使用ActionContext類獲取
Map<String,Object> getParameters() 返回一個(gè)包含所有HttpServletRequest參數(shù)
(1)因?yàn)榉椒ú皇庆o態(tài)的方法,需要創(chuàng)建ActionContext類對象
(2)這個(gè)ActionContext類對象不是new出來的
static ActionContext getContext() 獲取當(dāng)前線程的ActionContext對象
(3)演示

  • 創(chuàng)建表單,提交表單到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 調(diào)用方法得到表單數(shù)據(jù)
         // key 是表單輸入項(xiàng)name屬性值,value是輸入的值
        Map<String,Object> map= context.getParameters();

        Set<String> keys = map.keySet();
        for (String key : keys){
            //根據(jù)key得到value
            //數(shù)組形式:因?yàn)檩斎腠?xiàng)里面可能有復(fù)選框
            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>
運(yùn)行結(jié)果

2 使用ServletActionContext類獲取
(1)static HttpServletRequest getRequest()獲取Web應(yīng)用的HttpServletRequest對象
(2)static HttpServletResponse getResponse()獲取Web應(yīng)用的HttpServletResponse對象
(3)static ServletContext getServletContext()獲取Web應(yīng)用的ServletContext對象
(4)static PageContext getPageContext()獲取Web應(yīng)用的PageContext對象
(5)演示

  • 創(chuàng)建表單,提交表單到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 調(diào)用request里面的方法得到結(jié)果
        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>
結(jié)果顯示

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域?qū)ο?br> (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提供獲取表單數(shù)據(jù)方式

1 原始方式獲取表單封裝到實(shí)體類對象

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 獲取表單數(shù)據(jù)
        HttpServletRequest request = ServletActionContext.getRequest();
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String address = request.getParameter("address");
        //2 封裝到實(shí)體類
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setAddress(address);

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

2 屬性封裝

  • 特點(diǎn):直接把表單提交屬性封裝到action的屬性里面
  • 實(shí)現(xiàn)步驟
定義表單
核心配置

(1)在action成員變量位置定義變量

  • 變量名稱和表單輸入項(xiàng)的name屬性值一樣
定義變量

(2)生成變量的set方法(set和get方法都寫出來)


生成get和set方法部分代碼
  • 不足:使用屬性封裝獲取表單數(shù)據(jù)到屬性里面,不能把數(shù)據(jù)直接封裝到實(shí)體類對象類里面
執(zhí)行

3 模型驅(qū)動封裝(重點(diǎn))

  • 使用模型驅(qū)動方式,可以直接把表單數(shù)據(jù)封裝到實(shí)體類對象里面
  • 實(shí)現(xiàn)步驟
    (1)action實(shí)現(xiàn)接口 ModelDriver
    (2)實(shí)現(xiàn)接口里面的方法 getModel方法
  • 把創(chuàng)建對象返回
    (3)在action里面創(chuàng)建實(shí)體類對象
package Date;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import entity.User;
//使用模型驅(qū)動獲取表單數(shù)據(jù)
public class DateDemo2Action extends ActionSupport implements ModelDriven<User>{
    //創(chuàng)建對象
    //前提要求:表單輸入項(xiàng)name屬性值和實(shí)體類屬性名稱一樣
    private User user = new User();
    public User getModel() {
        //返回創(chuàng)建user對象
        return user;
    }
    @Override
    public String execute() throws Exception {
        System.out.println(user.toString());
        return NONE;
    }
}
  • 前提要求:表單輸入項(xiàng)name屬性值和實(shí)體類屬性名稱一樣

4 使用模型驅(qū)動和屬性封裝注意問題

  • 在一個(gè)action中,獲取表單數(shù)據(jù)可以使用屬性封裝,或者模型驅(qū)動封裝,但是不能同時(shí)使用屬性封裝和模型驅(qū)動封裝同時(shí)獲取一個(gè)表單。如果同時(shí)使用,只會執(zhí)行模型驅(qū)動。

5 表達(dá)式封裝(會用)

  • 使用表達(dá)式封裝可以把表單數(shù)據(jù)封裝到實(shí)體類對象里面
  • 實(shí)現(xiàn)過程

(1)在action里面聲明實(shí)體類

聲明實(shí)體類

(2)生成實(shí)體類變量的set和get方法

生成get和set方法

(3)在表單輸入項(xiàng)的name屬性值里面寫表達(dá)式形式

表達(dá)式形式
執(zhí)行

三 比較表達(dá)式封裝和模型驅(qū)動封裝

1 使用表達(dá)式封裝和模型驅(qū)動封裝都可以把數(shù)據(jù)封裝到實(shí)體類對象里面

2 不同點(diǎn)
(1)使用模型驅(qū)動只能把數(shù)據(jù)封裝到一個(gè)實(shí)體類對象里面

  • 在一個(gè)action里面不能使用模型驅(qū)動把數(shù)據(jù)封裝到不同的實(shí)體類對象里面

(2)使用表達(dá)式封裝可以把數(shù)據(jù)封裝到不同的實(shí)體類對象里面

package Date;

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

//使用表達(dá)式形式獲取表單數(shù)據(jù)
public class DateDemo3Action extends ActionSupport{
    //1 聲明實(shí)體類
    private User user;
    private Book book;
    //2 生成實(shí)體類變量的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;
    }
}
表達(dá)式

四 Struts2獲取數(shù)據(jù)封裝到集合中(會用)

1 封裝到list集合
第一步 在action聲明List

聲明

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

get和set方法

第三步 在表單輸入項(xiàng)里面寫表達(dá)式

表達(dá)式書寫
測試結(jié)果

2 封裝到map集合
第一步 聲明map集合

聲明

第二步 生成get和set方法

get和set方法

第三步 在表單輸入項(xiàng)的name屬性值里面寫表達(dá)式

表達(dá)式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 11,145評論 6 13
  • 標(biāo)簽 如果要配置的標(biāo)簽,那么必須要先配置標(biāo)簽,代表的包的概念。 包含的屬性 name包的名稱,要求是唯一的,管理a...
    偷偷得路過閱讀 1,395評論 0 0
  • “沒有人比我更愛你,”亞亞說,“唐風(fēng)對我說著句話時(shí),我感動的唏哩嘩啦,一塌糊涂。” 什么是愛情?我說。看著對面正襟...
    花好月圓妞兒閱讀 403評論 0 0
  • 謝謝公子世無雙, 無數(shù)姑娘思斷腸。 才華橫溢無窮盡, 信手拈來如平常!
    天涯書單閱讀 150評論 9 8