精华内容
下载资源
问答
  • 实战三种方式部署 MySQL5.7

    千次阅读 2021-02-03 03:54:52
    MySQL数据库实战三种方式部署 MySQL5.7 作者:北京运维常见的 MySQL 安装方式有如下三:RPM 包方式:这种方式安装适合对数据库要求不太高的场合,安装速度快;通用二进制包方式:安装速度相较于源码方式快,可以...

    MySQL

    数据库

    实战三种方式部署 MySQL5.7

    CgpOIF5EAWWAQ0y_AAcB-fDz9P0878.png

    作者:北京运维

    常见的 MySQL 安装方式有如下三种:

    RPM 包方式:这种方式安装适合对数据库要求不太高的场合,安装速度快;

    通用二进制包方式:安装速度相较于源码方式快,可以自定义安装目录。

    源码编译安装:安装过程比较慢,机器性能不好的情况下,大约需要30分钟左右,通常适用于mysql定制化的安装,比如需要加入一些第三方的插件及依赖库等

    环境说明

    OS 版本

    MySQL 版本CentOS 7.5.1804

    5.7.25

    一、RPM 包方式安装

    1.1 获取 RPM 包

    访问 MySQL 官网,下载最新版 mysql5.7 的 rpm 包。

    点击 DOWNLOADS --> 点击 Community 社区版 --> 选择 MySQL Community Server

    416780e75bda40369c14157df0ebaa85.png

    选择 MySQL Community Server 5.7 -> 而后选择对应的软件平台版本

    416780e75bda40369c14157df0ebaa85.png

    选择下载 RPM Bundle 这里包含了所有 MySQL 的 RPM 包。

    416780e75bda40369c14157df0ebaa85.png

    416780e75bda40369c14157df0ebaa85.png

    1.2 安装 MySQL

    下载 Bundle 包解压以后,可以看到包含了所有 MySQL 相关的 RPM 包:

    416780e75bda40369c14157df0ebaa85.png

    其中 client、common、libs、server 四个程序包是必须安装的:

    mysql-community-client-5.7.25-1.el7.x86_64.rpm

    mysql-community-common-5.7.25-1.el7.x86_64.rpm

    mysql-community-libs-5.7.25-1.el7.x86_64.rpm

    mysql-community-server-5.7.25-1.el7.x86_64.rpm

    在执行安装之前,先检查是否已经安装过(CentOS7 以后默认安装的 mariadb)

    $ rpm -qa|egrep "mariadb|mysql"

    mariadb-libs-5.5.60-1.el7_5.x86_64

    # 我这里存在 mariadb-libs 会造成冲突,所以卸载掉

    rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64

    # 卸载之后就可以进行安装使用 yum 或者 rpm -ivh

    $ yum -y install mysql-community-client-5.7.25-1.el7.x86_64.rpm mysql-community-common-5.7.25-1.el7.x86_64.rpm mysql-community-libs-5.7.25-1.el7.x86_64.rpm mysql-community-server-5.7.25-1.el7.x86_64.rpm

    安装完成后 MySQL 的默认配置文件为 /etc/my.cnf 接下来我们就可以启动 MySQL 啦

    $ systemctl start mysqld.service

    $ systemctl enable mysqld.service

    $ systemctl status mysqld.service

    1.3 修改 MySQL 默认密码

    MySQL 5.7 以后,不在允许使用空密码进行登录,默认会初始化一个密码到 MySQL Error 日志中,配置参数 log-error= 指定的文件。

    $ cat /var/log/mysqld.log | grep password

    2019-03-20T02:44:49.359004Z 1 [Note] A temporary password is generated for root@localhost: /qrsXHttL6Mr

    连接实例并修改默认密码

    $ mysql -uroot -p

    mysql: [Warning] Using a password on the command line interface can be insecure.

    Welcome to the MySQL monitor. Commands end with ; or g.

    Your MySQL connection id is 2

    Server version: 5.7.25

    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its

    affiliates. Other names may be trademarks of their respective

    owners.

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

    mysql> set password for 'root'@'localhost'=password('MyNewPass4!');

    Query OK, 0 rows affected, 1 warning (0.00 sec)

    以后通过 update set 语句修改密码:

    mysql> use mysql;

    mysql> update user set authentication_string=PASSWORD('NewPass@2019') where user='root';

    mysql> flush privileges;

    注意:mysql 5.7 默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 错误。查看 MySQL 密码策略

    二、通用二进制包方式安装

    官方文档:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html

    2.1 获取安装包

    选择 Linux - generic 64 位安装包

    416780e75bda40369c14157df0ebaa85.png

    2.2 安装 MySQL

    MySQL 依赖于 libaio 库。 如果未在本地安装此库,则数据目录初始化和后续服务器启动步骤将失败。 如有必要,请使用适当的包管理器进行安装。 例如,在基于Yum 的系统上:

    $ yum -y install libaio

    创建 MySQL 用户和组

    $ groupadd mysql

    $ useradd -r -g mysql -s /bin/false mysql

    解压到指定目录

    $ tar xf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz -C /usr/local/

    $ cd /usr/local/

    $ ln -sv mysql-5.7.25-linux-glibc2.12-x86_64/ mysql

    修改解压目录下所有文件属主及属组

    $ cd /usr/local/mysql

    $ chown -R root.mysql ./*

    创建数据目录,以 /data/mysql/data 为例

    $ mkdir -pv /data/mysql/{data,log}

    $ chown -R mysql.mysql /data/mysql

    准备 MySQL 配置文件,我这里用的是在线工具生成的 my.cnf 文件,工具链接

    $ cat /etc/my.cnf

    [client]

    port = 3306

    socket = /data/mysql/mysql.sock

    [mysqld]

    port = 3306

    socket = /data/mysql/mysql.sock

    pid_file = /var/run/mysql.pid

    datadir = /data/mysql/data

    basedir = /usr/local/mysql

    default_storage_engine = InnoDB

    max_allowed_packet = 128M

    max_connections = 2048

    open_files_limit = 65535

    skip-name-resolve

    lower_case_table_names=1

    character-set-server = utf8mb4

    collation-server = utf8mb4_unicode_ci

    init_connect='SET NAMES utf8mb4'

    innodb_buffer_pool_size = 128M

    innodb_log_file_size = 128M

    innodb_file_per_table = 1

    innodb_flush_log_at_trx_commit = 0

    key_buffer_size = 16M

    log-error = /data/mysql/log/mysql_error.log

    log-bin = /data/mysql/log/mysql_bin.log

    slow_query_log = 1

    slow_query_log_file = /data/mysql/log/mysql_slow_query.log

    long_query_time = 5

    tmp_table_size = 16M

    max_heap_table_size = 16M

    query_cache_type = 0

    query_cache_size = 0

    server-id=1

    复制启动脚本

    $ cp support-files/mysql.server /etc/init.d/mysqld

    $ chmod +x /etc/init.d/mysqld

    $ chkconfig --add mysqld

    初始化数据库

    $ ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data

    此时会生成一个临时密码,可以在 mysql_error.log 文件找到

    $ grep password /data/mysql/log/mysql_error.log

    2019-03-20T05:37:28.267207Z 1 [Note] A temporary password is generated for root@localhost: H_wgkXR&f1=t

    生成 SSL

    $ ./bin/mysql_ssl_rsa_setup --basedir=/usr/local/mysql --datadir=/data/mysql/data/

    启动 MySQL 服务

    $ service mysqld start

    $ ss -tnlp | grep 3306

    配置 MySQL 环境变量

    $ vim /etc/profile.d/mysql.sh

    export PATH=/usr/local/mysql/bin:$PATH

    $ source /etc/profile.d/mysql.sh

    2.3 MySQL 用户初始化

    $ mysql_secure_installation

    Securing the MySQL server deployment.

    Enter password for user root: # 输入初始密码,在错误日志中

    The existing password for the user account root has expired. Please set a new password.

    New password: # 输入新密码

    Re-enter new password: # 输入新密码

    VALIDATE PASSWORD PLUGIN can be used to test passwords

    and improve security. It checks the strength of password

    and allows the users to set only those passwords which are

    secure enough. Would you like to setup VALIDATE PASSWORD plugin?

    Press y|Y for Yes, any other key for No: Y # 是否启用密码安全策略

    There are three levels of password validation policy:

    LOW Length >= 8

    MEDIUM Length >= 8, numeric, mixed case, and special characters

    STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

    Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2 # 设置密码复杂度

    Using existing password for root.

    Estimated strength of the password: 100

    Change the password for root ? ((Press y|Y for Yes, any other key for No) : N # 是否修改 root 密码,刚才已经新设置了,输入 N

    ... skipping.

    By default, a MySQL installation has an anonymous user,

    allowing anyone to log into MySQL without having to have

    a user account created for them. This is intended only for

    testing, and to make the installation go a bit smoother.

    You should remove them before moving into a production

    environment.

    Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y # 是否移除匿名用户

    Success.

    Normally, root should only be allowed to connect from

    'localhost'. This ensures that someone cannot guess at

    the root password from the network.

    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y # 是否禁止 root 用户远程登录

    Success.

    By default, MySQL comes with a database named 'test' that

    anyone can access. This is also intended only for testing,

    and should be removed before moving into a production

    environment.

    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y # 是否删除 test 测试数据库

    - Dropping test database...

    Success.

    - Removing privileges on test database...

    Success.

    Reloading the privilege tables will ensure that all changes

    made so far will take effect immediately.

    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y # 是否刷新权限表

    Success.

    All done!

    验证 MySQL 安装

    mysqladmin version -u root -p

    三、源码编译方式安装

    3.1 安装依赖包

    $ yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bison

    安装 Boost 库,获取程序包请访问 Boost 官网

    $ cd /usr/local/src/

    $ wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

    $ tar xf boost_1_59_0.tar.gz -C /usr/local/

    3.2 获取 MySQL 源代码包

    416780e75bda40369c14157df0ebaa85.png

    $ cd /usr/local/src/

    $ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25.tar.gz

    3.3 创建 MySQL 用户组

    $ groupadd mysql

    $ useradd -r -g mysql -s /bin/false mysql

    3.4 预编译

    $ tar xf mysql-5.7.25.tar.gz

    $ cd mysql-5.7.25

    $ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

    -DMYSQL_DATADIR=/data/mysql/data

    -DENABLED_LOCAL_INFILE=1

    -DWITH_BOOST=/usr/local/boost_1_59_0

    -DDEFAULT_CHARSET=utf8

    -DDEFAULT_COLLATION=utf8_general_ci

    -DEXTRA_CHARSETS=all

    -DWITH_MYISAM_STORAGE_ENGINE=1

    -DWITH_INNOBASE_STORAGE_ENGINE=1

    -DWITH_ARCHIVE_STORAGE_ENGINE=1

    -DWITH_BLACKHOLE_STORAGE_ENGINE=1

    -DWITH_FEDERATED_STORAGE_ENGINE=1

    -DWITH_PARTITION_STORAGE_ENGINE=1

    -DWITH_PERFSCHEMA_STORAGE_ENGINE=1

    -DWITH_CSV_STORAGE_ENGINE=1

    -DWITH_HEAP_STORAGE_ENGINE=1

    -DWITH_MYISAMMRG_STORAGE_ENGINE=1

    -DWITH_ZLIB=system

    -DWITH_EMBEDDED_SERVER=1

    更多 cmake 指令参考官方文档

    3.5 编译安装

    $ make -j `grep processor /proc/cpuinfo | wc -l`

    $ make install

    3.6 配置文件

    准备 MySQL 配置文件,我这里用的是在线工具生成的 my.cnf 文件,工具链接

    $ cat /etc/my.cnf

    [client]

    port = 3306

    socket = /data/mysql/mysql.sock

    [mysqld]

    port = 3306

    socket = /data/mysql/mysql.sock

    pid_file = /var/run/mysql.pid

    datadir = /data/mysql/data

    basedir = /usr/local/mysql

    default_storage_engine = InnoDB

    max_allowed_packet = 128M

    max_connections = 2048

    open_files_limit = 65535

    skip-name-resolve

    lower_case_table_names=1

    character-set-server = utf8mb4

    collation-server = utf8mb4_unicode_ci

    init_connect='SET NAMES utf8mb4'

    innodb_buffer_pool_size = 128M

    innodb_log_file_size = 128M

    innodb_file_per_table = 1

    innodb_flush_log_at_trx_commit = 0

    key_buffer_size = 16M

    log-error = /data/mysql/log/mysql_error.log

    log-bin = /data/mysql/log/mysql_bin.log

    slow_query_log = 1

    slow_query_log_file = /data/mysql/log/mysql_slow_query.log

    long_query_time = 5

    tmp_table_size = 16M

    max_heap_table_size = 16M

    query_cache_type = 0

    query_cache_size = 0

    server-id=1

    创建数据目录

    $ mkdir -pv /data/mysql/{log,data}

    $ chown -R mysql.mysql /data/mysql/

    3.7 初始化

    $ cd /usr/local/mysql/

    $ ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data/

    3.8 设置启动脚本配置环境变量

    $ cp support-files/mysql.server /etc/init.d/mysqld

    $ chmod +x /etc/init.d/mysqld

    $ echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh

    source /etc/profile.d/mysql.sh

    3.9 启动数据库

    $ systemctl enable mysqld

    $ systemctl start mysqld

    $ systemctl status mysqld

    $ ss -tnlp|grep 3306

    $ ps aux|grep mysql

    3.10 初始化用户

    与二进制方式一样,初始密码在错误日志内。

    $ mysql_secure_installation

    3.11 验证 MySQL

    $ mysqladmin version -uroot -p

    以上就是 MySQL 5.7 版本的三种安装方式,欢迎大家多留言交流。

    内容来源于网络,如有侵权请联系客服删除

    展开全文
  • 网络安全攻击方式有很多,其中包括XSS攻击、SQL注入攻击、URL篡改等。那么XSS攻击到底是什么?XSS攻击有哪类型?今天小编为大家讲解一下。 什么是XSS攻击? XSS攻击又称为跨站脚本,XSS的重点不在于跨站点,而是...

    在这里插入图片描述

    前言:

    网络安全攻击方式有很多种,其中包括XSS攻击、SQL注入攻击、URL篡改等。那么XSS攻击到底是什么?XSS攻击有哪几种类型?今天小编为大家讲解一下。

    什么是XSS攻击?

    XSS攻击又称为跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行。XSS是一种经常出现在Web应用程序中的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。

    XSS攻击有哪几种类型?

    常见的XSS攻击有三种:反射型XSS攻击、DOM-based型XSS攻击、存储型XSS攻击。

    第一种:反射型XSS攻击

    反射型XSS攻击一般是攻击者通过特定手法,诱使用户去访问一个包含恶意代码的URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类XSS攻击通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端Cookies或进行钓鱼欺骗

    第二种:DOM-based型XSS攻击

    客户端的脚本程序可以动态地检查和修改页面内容,而不依赖于服务器端的数据。例如客户端如从URL中提取数据并在本地执行,如果用户在客户端输入的数据包含了恶意的JavaScript脚本,而这些脚本没有经过适当的过滤或者消毒,那么应用程序就可能受到DOM-based型XSS攻击。

    需要特别注意以下的用户输入源document.URL、location.hash、location.search、document.referrer等。

    第三种:存储型XSS攻击

    攻击者事先将恶意代码上传或者储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。这意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本,因此存储型XSS攻击的危害会更大。此类攻击一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。

    展开全文
  • 之前我们接触过的form表单元素是在Bootstrap框架里面,这次也将用到Bootstrap框架去布局(见图表1)通过Bootstrap框架布局呈现的一个效果,就直接讲form表单提交的方式了 图表 1 【复习】 在开始讲form表单...

    Form表单

    这篇文章主要讲的是form表单的提交

    之前我们接触过的form表单元素是在Bootstrap框架里面,这次也将用到Bootstrap框架去布局(见图表1)通过Bootstrap框架布局呈现的一个效果,就直接讲form表单提交的方式了  

    图表 1

    【复习】

    在开始讲form表单提交的方式之前会复习一下form表单元素

    Form表单元素

    Text:   文本框

    <select>

       <option> </option>

    </select> : 下拉框

    textarea:文本域

    Button:按钮   

    Checkbox:复选框

    Radio:单选框

    Color:颜色盘

    Number:数字文本框

    这里重点讲button按钮。在form表单中有以下三个不同的按钮效果事件

    Submit:表单提交的一个效果(功能) 通过指定的地址把数据提交到哪里  指定的地址则是通过action=“/”去指定

    Button:普通的按钮

    Reset:整个表单重置(它具有这个功能)

    例:<button type=submit></button>

    1、创建新的视图之后,启动调用浏览器,看到刷新旁边有一组数据,这组数据是什么意思了?(见图表2红色框)

    图表 2

    Localhost:本机

    :54577:断口号(具体见自己浏览器)

    AjaxForm/Index:它下面的某个控制器某个方法

    2、前面是在视图里面启动浏览器,那为什么在控制器里面启动浏览器会报错了,要怎么解决?

    在控制器解决方案资源管理器下面有一个App_Start下面有一个RouteConfig.Css (见图表3)

    图表 3

    里面最下面有一句代码(见图表4)

    图表 4

    Defaults:默认的是项目打开的哪一个控制器。我们项目中没有home控制器,所以则会报错,我们只需要把home改成我们项目中控制器的名称即可,我们回到控制器里面去启动浏览器则不会报错了

     

    之前我们接触的form表单里面是不是没有actionmethod这两个属性,就直接是form表单元素,这里我们将要学actionmethod

    什么是actionmethod

    Action=“/”:用于提交表单数据 指定提交的一个地址

    Method=“ ”:提交的方式。提交的方式有很多种,默认提交的方式是get。我们这次主讲get和post。

    get和post提交完成的功能是一样但是有区别。Get是从服务器获取、拉取数据的意思;post是投递的意思,它主要是把数据投过去,传送过去

    我们现在来看一下form表单的属性action与method

    属性

    描述

    action

    URL(一个。路径)

    规定当提交表单时向何处发送表单数据

    method

    Get/post

    规定用于发送form-data的HTTP方法(提交表单的方式)

    例:<form action=”/ajaxform/getdata” method=”post”></form>

          URL可能的值:

    绝对URL—指向其他站点(比如src=”www.baidu.com”)

    相对URL—指向站点内的文件(比如src=”/form00/getdata”)

     

    我们来看一下URL规定当提交表单时向何处发送表单数据。那我们来试一下,在我们的控制器中去写某个方法,给它一个名字为getData(见图表5)

    图表 5

    这里又要接触一个新的知识点:断点

    断点:代码程序运行到这个地方它就会停到这个地方,然后就可以对代码进行调式

    如何断点?

    在代码行号前面点一下,出现红色圆圈既是断点

    我们定义了这个方法之后,我们则转到视图里面去找到form表单里面action,前面说过action是指定提交的一个地址,

    他这里提交的地址则是你添加控制器的名称下面你新建的那个方法的名称(具体看自己添加的名称)

    我这里控制器的名称是AjacForm,新建方法的名称为getData

    所以我这里的提交地址的写法为:<form action=”/AjaxForm/getData”></form>

    在运行一下项目,提交一下表单,它的代码就会停在我们刚刚断点的那个地方(见图表6)

    想要继续运行则点击一下断点的位置,点继续运行即可,他就会有一个返回值,这里返回的这个值则是我们新建控制器返回的一个内容(数据)

    在form表单里面只要指明了actionmethod这两个属性之后,只要点击Submit这个按钮,他就可以把数据提交到我们新建的方法里面来,这个方法在给它返回一个数据

    3、那我想要点击Button 这个自身没有带任何样式的按钮,那要怎么去实现了?

    这里注意了,action提交的地址,method提交的方式,现在我们页面上提交的方式是get, 通过 get提交的方式,它会把要提交的数据全部暴露在URL地址栏上面;通过post提交,他不会把我们要提交的参数暴露在URL上面,可以在检查===》Network下面则有getData的方法,你点一下就会出现提交的相关数据(见图表6)

    图表 6

    我们来看一下Method的值get /post的一些区别

    注意:Get提交时参数直接暴露在URL上面。

    (W3School上给出的区别:)

    与POST相比,GET更简单也更快,并且在大部分情况下都能用。

    然而,在以下情况中,请使用POST请求:

    1. 无法使用缓存文件(更新服务器上的文件或数据库)
    2. 向服务器发送大量数据(POST没有数据量限制)
    3. 发送包含未知字符的用户输入时,POST比get更稳定也更可靠

    Get/post区别:

    1. get方法是用来向服务器上获取数据,而POST是用来向服务器上传递修改数据
    2. get将表单里的数据添加到actio所指向的URL后面,并且两者之间使用“?”链接,而各个变量之间使用“&”连接;POST是将表单中的数据放在form的数据体(FormData)中。按键值对的方式,传递到所指向的action
    3. get是不安全的,因为在传输过程中,数据库被放在请求的url中这样用户可以直接在浏览器上看到提交的数据;post的所有操作对用户来说都是不可见的,数据都在数据体(FormData)中
    4. get方法向URL添加数据,URL的长度是受限制的(URL的最大长度是2048个字符);post提交无限制
    5. get为form表单的默认提交方式
    6. get方式获取数据后,刷新不会有负面的影响,因为他只是获取数据;post数据会被重新提交可能会产生不良的后果(浏览器应该告知用户数据会被重新提交)
    7. 数据类型的限制:get只允许ASCII字符,post则无限制(如果是提交二进制数据(例如:图片),需要使用post)

     

    控制器中接收表单提交数据的4种方式【获取表单数据的4种方式】:(可以接收post与get提交的数据)

    我们先来看第一种通过形参的方式接收表单提交的数据(见图表7)

    图表 7

    1. 那边提交过来数据有三个,但我这里没有把他提交的数据获取到,那我想获取到她前面传递过来的数据,则要对getdata这个方法进行处理。就像js一样定义了一个方法前面就要调用它,调用它传递参数,我们这里就要用一个形参来接收。(方法里面就叫形参,这个参数则要和form表单里面的name属性一一对应)

    我们这边页面上一共传递过来三个数据分别是姓名、性别、地址。

    姓名、性别、地址是一个字符串类型的变量(见图表8)(String   name,string   sex,string address  形参的类型)

    图表 8

    获取了这个数据,把它重新拼接成一个字符串,把字符串返回(见图表7)

    注意:在js中这里没有指定数据类型,在aikes(埃克森)和seshoop(色夏普)中它是一定要指明接收的类型,也就是一定要指明形参

    注意:这个属性值不能顺便取,必须跟表单里面的属性值一样,才能接收数据

     

    以上是表单自动提交的功能,我们还可以通过手动的去提交数据

    我们先定义两个方法getData()和postData(),把这两个方法分别放在表单里面没有自带样式的按钮上。给它添加一个点击事件οnclick=”getData()/postData()”

    提交表单的功能就是手动的去指定“action=”/AjaxForm/getData” method=”post”这两个属性

    怎么去指定?

    给form表单添加一个id

    先用js的方式去指定:

    先获取form的id元素、给form指定action提交的地址和指定method提交的方式;这里只是指定它的属性,还要进行一个提交操作(见图表9)

    图表 9

    这里需要作一个验证,当我们数据全部选择完了才可以提交?

    (1)、获取对应的数据

    (2)、元素全部获取成功之后,做判断用if.....else

    如果name值不等于空并且sex不等于0并且address不等于空,都不等于的时候才能进行一个提交操作(几个条件要一起成立),如果有一个条件不成立就要提醒用户“表单数据不能为空”(见图表10)

    图表 10

    οnsubmit="return false;禁用表单自动提交的方式。直接在form表单上面填写

    autocomplete=”off”:关闭之前在form表单上面填写过的数据

     

    第二种方式:通过FormCollection来接收表单的数据(只能接收到post提交过来的数据,get提交过来的数据接收不到)(见图表11)

    图表 11

    FormCollection:类类型

    String:字符串类型

    我们前面手动添加的那两个提交方法不变,我们只改动action提交的地址。怎么改动?

    还是和第一种方式的改动一样,控制器的名称下面用第二种方式新建方法的名称【具体看自己添加的名称】(见图表12)

    图表 12

    接收到参数怎么(获取)取出来?

    则是通过form,一个键值对的形式

    定一个变量=form[“name”(键)];这样就可以把数据取出来(见图表13)

    图表 13

     

    这里的名称可以不一样,可以可以自己定义

    这个名称和form表单里面的属性名必须一样,不可更改

     

        
      
       
     

     

     

     

    获取到了数据就进行一个返回(见图表14)

    图表 14

    第三种方式:在接收数据的时候不需要传递任何参数  通过Request.Form[“name的属性值”]获取表单数据(只能接收post提交过来的数据)

    Request.Form[“name的属性值”] 直接从你提交过来的表单里面去取数据

    怎么去取?

    定义一个变量 = Request.Form[“name的属性值”];

    通过Request.Form的方法获取之后在声明一个变量把上面定义变量的名称加起来,然后进行一个返回(见图表15)

    图表 15

    方法下面的返回值

    注意:return  Content(“ ”) ; Content(“ ”) 这个方法他返回的数据(类型)就是一个字符串

    return  Json(“ ”);Json(“ ”) 返回的这个数据它会转换为json类型的字符串,给你返回;如果一个数据他转换为json的数据格式给你

    我们在回到视图里面去改变他提交的地址,这个改变提交的地址和之前提交地址的方法一样,方法不变,只改表控制器的名称下面用第三种方式新建方法的名称【具体看自己添加的名称】(见图表16)

    图表 16

    第四种方式:通过EntityClass实体类接收数据(可以接收post和get提交的数据)

    我们要自己去定义一个类,要定义一个类,就通过class这个关键字去定义一个类  public就是一个修饰符而已

    这个类里面我们要去接收提交过来的三个参数,那我们就去类里面定义三个属性,这个属性怎么去定义的?

    (修饰符  string  name值;)//成员变量        用来存储数据

    修饰符 string  name值{get;set;} //类里面的属性

    类的成员里面可以是一个成员变量、可以是一个成员属性,也可以有一个方法(见图表17)

    图表 17

    定义了一个类就可以去定义一个方法,定义了一个方法之后,我们就可通过刚刚定义的类来接收(与第二种方式:类类型差不多)

    改变提交地址和之前改变地址的方法一样

    获取到值了,还是先定一个变量 name值等于定义的类点属性值(见图表18)

    图表 18

    【知识点回顾】

    这篇文章我们主要说了几个新的知识点

    1. button按钮在form表单中有三个不同的按钮效果事件

    (1)、Submit:表单提交的一个效果(功能) 通过指定的地址把数据提交到哪里  指定的地址则是通过action=“/”去指定

    (2)、Button:普通的按钮

    (3)、Reset:整个表单重置(它具有这个功能)

    2、form表单的属性action与method

    3、断口号

    4、四种表单提交的方式

    展开全文
  • 生产计划排产计划的模式有哪?生产计划排产计划操控中模式:事先操控方式方法、事中操控方式方法和事后操控方式方法。 一、事先控制方式方法 充分利用前馈实践经验实施操控,重中之重放到事先计划与决策。...

    生产计划排产计划的模式有哪几种?生产计划排产计划操控中有三种模式:事先操控方式方法、事中操控方式方法和事后操控方式方法。

    一、事先控制方式方法

    充分利用前馈实践经验实施操控,重中之重放到事先计划与决策。事先操控方式方法规定物料相关部门在收到客户订单后,马上识别是新产品还是旧产品。如果是旧产品便要研究上次客户订单的问题出在何处,而这规定企业要建立产品的档案资料库,以便检测客户订单曾经经常出现过什么问题。此外,事先操控相关部门还规定车间做好尾件检测。客户订单完成后,要运用首件检测的样板与尾件做好相对比较,确定是否经常出现问题;或者做好产量比对,譬如最后一个小时的产销量与正常情况下产销量有何区别。借助尾件检测寻找出存在问题,接着做好改进,确保以后客户订单不出问题。
    生产计划排产计划的模式有哪几种?

    二、事中操控方式方法

    充分利用信息反馈实践经验事实操控,借助安全作业成本核算和实地观测获取信息,及时把生产加工情况做好相对比较分析,做出纠正偏差的控制措施,不断消除由干扰产生的不良后果,确保计划目标的保持。

    事中操控活动是经常性的,每时每刻都在做好之中。
    三、事后操控方式方法

    充分利用信息反馈实践经验实施操控的,操控的重中之重是今后的生产加工活动。即一个客户订单完成后,要做好总结,分析经常出现的异常问题,并且寻找出改善的方法。这种检讨原有制度工作流程、安全作业方法的事后管理模式非常有必要。

    要保持对跨部门生产加工项目进度的掌握,生产计划排产计划和物料操控相关部门要肩负起责任心。根据生产计划排产计划,每一相关部门的采购、品质工程师、生产加工等都会有规定的时间段。倘若经常出现了客户订单的延误,生产计划排产计划与物料操控相关部门便要检查督促职能部门按照规定的时间段促进客户订单的项目进度,规定职能部门没有理由做好相互配合。

    展开全文
  • 单例模式-4种实现方式

    千次阅读 2021-03-28 23:14:29
    单例模式-4种实现方式 故事: 帅哥:“我是一个很专一的人,一生只爱一个。” 美女:“怎么证明?” 伪代码 1.饿汉单例模式 public class MyHeart { private final static MyHeart MY_HEART = new MyHeart(); ...
  • 展开全部常用的几方法:1.工作危害分析法(JHA)工作危害分析法是一定性的风险分析辨识方法,它是基于作e69da5e6ba...2. 安全检查表分析法(SCL)安全检查表法是一定性的风险分析辨识方法,它是将一系列项目...
  • 腾讯安全专家建议所有用户尽快升级到安全版本
  • 4种主流的API架构风格对比

    千次阅读 2021-01-23 15:16:39
    这一系列的 API 架构风格的选项,引发了大量的关于哪种架构风格才是最好的争论。 (不同时间的 API 架构风格,图源:Rob Crowley) 今天,许多 API 的使用者将 REST 称作“消亡的 REST”(REST in peace),并且为 ...
  • 文章目录字段类型1、字段类型作用2、整数类型3、显示宽度4、小数类型(浮点型)5、小数类型(定点型)6、字符串类型(定长型)7、字符串类型(变长型)8、字符串类型(文本字符串)9、字符串类型(枚举)10、字符串...
  • 数据校验的六种方式-转载

    千次阅读 2020-12-22 11:44:16
    一、为什么要进行数据校验数据校验是为保证数据的完整性,用一指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,说明数据是完整的。二、校验方法1、最...
  • Apache Log4j 2是一款非常优秀且流行的开源Java日志记录组件,在各大项目中有着广泛应用。利用该漏洞,攻击者可通过构造恶意请求在目标服务器上执行任意代码,从而实施窃取数据、挖矿、勒索等行为。
  • 参考文章:Redis集群的5使用方式,各自优缺点分析 一、常见使用方式 Redis 的几常见使用方式包括: Redis 单副本 Redis 多副本(主从) Redis Sentinel(哨兵) Redis Cluster Redis 自研 二、各种使用...
  • 二、云计算的 5 个基本特征三、云计算的 4 部署模型(一)私有云(二)社区云(三)公共云(四)混合云四、云计算的3服务(一)基础架构即服务 (IaaS,Infrastructure as a Service)(二)平台即服务 (PaaS,...
  • 云计算技术都是基于3特殊的云计算服务模式,它们都具有流行、有效、灵活、用户友好等特征。因此,云架构的基本模式是:本文引用地址:http://www.eepw.com.cn/article/201710/368624.htm1、基础设施即服务:基础...
  • 详解黑客的攻击方式1---网络欺骗攻击

    千次阅读 热门讨论 2021-03-08 18:37:28
    黑客的攻击方式1、网络欺骗攻击1.1、五常见的网络欺骗方式1.2、网络钓鱼攻击概念1.3、网络钓鱼攻击的常用手段1.4、网络钓鱼攻击的预防 1、网络欺骗攻击     网络信息安全是21世纪各国面临的...
  • 4种删除锁定文件的方法

    千次阅读 2021-07-31 05:20:39
    锁定的文件是受系统保护的文件,当某些用户或进程在访问锁定文件时,计算机会拒绝其他用户访问该文件。简而言之,锁定文件用于在文件使用时限制...如何检查文件是否被锁定某些文件仅在某访问时被锁定。要想知道文...
  • pty.spawn("/bin/bash")' 可以实现简单的tty,但是这种方式有个问题,当我们ctrl+C的时候,所有连接都会断掉,又需要重新来一遍,而且vim虽然可以用,也有点问题,同时没有记录,无法使用上方向键执行上条命令。...
  • windows无法创建快捷方式。请检查磁盘是否百已满是设置错误造成的,解决方法为:1、打开“运行”对话框,可以用快捷键win+R进行弹出“运行”对话框,输入cmd命令,点击确定。2、在命令提示符后面输入chkdsk x: /f,x...
  • 微信dat转码软件使用操作说明在线解码,各位同学下载软件后,如何操作?如何找到dat文件?如何使用?又哪些注意事项呢?这里会为大家一一道来。问题1 :如果下载失败怎么办?...解压后,一定要注意,是不是有安全软件偷...
  • 限制了一个源中加载文本或者脚本与其他源中资源的交互方式,当浏览器执行一个脚本时会检查是否同源,只有同源的脚本才会执行,如果不同源即为跨域。 2、常见处理跨域的几种方式 Jsonp:原理就是利用了script标签不...
  • JAVA设计模式——单例模式八种方式

    千次阅读 多人点赞 2021-10-14 18:01:56
    单例设计模式的八种方式: 1、饿汉式(静态常量) 2、饿汉式(静态代码块) 3、懒汉式(线程不安全4、懒汉式(线程安全,同步方法) 5、懒汉式(线程安全,同步代码块) 6、双重检查(推荐使用) 7、静态...
  • Http请求方式的正确使用场景

    千次阅读 2021-11-28 16:55:38
    我们从大一刚开始学习Java到现在已经写了两三次项目后,我们的编程能力在逐渐提升,但是个很容易忽略的点,虽然说平时对开发没有太大的影响,但是即使是很小的错误,都极可能会对我们未来的开发和工作造成打击性...
  • linux中文件传输的方式有ftp,scp,rsync,rz,sz等,但各个工具的功能又有所区别;FTP : FTP是文件服务器,可实现文件的上传下载,存储等功能,但本文不打算介绍ftp的使用。scp: scp能够将不同主机的文件进行相互...
  • 在不同的怀孕周期,宝宝在女性子宫中的位置不停在改变,而胎位图就是用来表示胎儿的位置,临床上将宝宝的不同位置大致分为4种,有些胎位适合顺产,的只能进行剖腹产,所以孕妇要提前了解自己宝宝究竟处于什么姿势...
  • 2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。 由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊 配置,经阿里...
  • Apache Log4j 远程代码注入漏洞

    千次阅读 2021-12-11 22:11:31
    2021年12月9日,Apache Log4j2 Java 日志模块存在远程命令执行漏洞可直接控制目标服务器问题,攻击者攻击难度极低。由于 Apache Log4j2 某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞...
  • 目录 第1章 L2 RRC层的架构 1.1 RAN的架构 1.2 RLC架构概述 1.3RLC软件系统结构图 第2章 TCP/IP协议提供的三传输服务 ...第4章 RLC三无线链路服务 4.1透明传输TM(Transparent Mode)-- 类RAW S...
  • 线程安全和线程不安全写法,区别就是synchronized关键字。 实现方法一(线程不安全,教科书一般是这样写懒汉式) [1] 必须在该类中,自己先创建出一个对象 [2] 私有化自身的构造器,防止外界通过构造器创建新...
  • 缺少监控集成方案,安全管理方案 运行springboot的三种方式 一、通过IDEA工具运行Application这个类的main方法 我们先写一个HelloController.java类,练练手。 package com.yousian.controller; import org.spring...
  • 软件测试方法可以分为几

    千次阅读 2021-05-27 14:01:26
    (1)白盒测试:又称为结构测试或逻辑驱动测试,是一按照程序内部逻辑结构和编码结构,设计测试数据并完成测试的一测试方法。 (2)黑盒测试:又称为数据驱动测试,把测试对象当做看不见的黑盒,在完全不考虑...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 577,009
精华内容 230,803
关键字:

安全检查方式有哪4种