文章目录
开始前的准备工作
1、安装Xshell和Xftp
2、购买/试用/学生免费领取 阿里云服务器
3、服务器初始配置
开始部署服务器
1、MySQL的安装和配置 + Nginx的安装
(1) MySQL的安装(rpm安装)和配置
1、rpm安装MySQL并修改MySQL密码
2、在服务器的MySQL里执行如下sql语句:
(2) Nginx的安装(yum安装)
2、开启 阿里云安全组 和 服务器防火墙 的端口
下面使用4种语言实现从MySQL数据库中读取数据到浏览器中显示。
1、Java
1、压缩包安装Tomcat
2、rpm安装java1.8
3、在本地(Windows电脑上)用IDEA开发一个能实现从MySQL读取内容并显示在浏览器上的项目
4、把本地(Windows电脑上)可以访问的SpringBoot项目部署到服务器的Tomcat上
5、配置Nginx
遇到的问题和解决方法
2、PHP
1、PHP 的 安装、配置、启动
2、配置Nginx,测试访问PHP
3、用PHP语言,实现从MySQL读取内容并显示在浏览器上
遇到的问题和解决方法
小知识:php命令:启动、停止、重启。
3、Go
1、Golang的安装,第一个Go程序
2、用Go语言搭建简单的web服务器,即实现在浏览器上显示内容
3、用Go语言,实现从MySQL读取内容并显示在浏览器上
4、配置Nginx
4、Nodejs
1、安装Nodejs
2、Nodejs访问数据库
3、用Nodejs语言,实现从MySQL读取内容并显示在浏览器上
4、配置Nginx
其他
1、系统架构图
2、系统相关信息
3、软件和语言的版本信息
4、其他的 遇到的问题和解决方法
5、总结
6、参考
开始前的准备工作
1、安装Xshell和Xftp
2、购买/试用/学生免费领取 阿里云服务器
服务器购买:云服务器ECS_云主机_服务器托管_弹性计算-阿里云 云产品试用:阿里云试用中心_云服务器试用_企业试用场景_开发者云产品试用 学生的学习与优惠:开发者成长计划
3、服务器初始配置
点击右上角的控制台
->点击云服务器 ECS
->点击实例ID
。 1、创建快照 点击快照
->点击创建快照
。
2、修改实例名称 可改可不改。实例名称改为wu2
,那么远程连接时有[root@wu2 ~]#
。
3、重置服务器密码,然后用Xshell远程连接服务器 点击重置实例密码
来设置服务器密码->在Xshell中通过账号(root)密码(你刚刚重置的实例密码)进行远程登录服务器。
因为阿里云上重置实例密码,它对密码的格式有要求,你重置的密码你可能记不住,那么可以在用重置的密码通过Xshell远程登录服务器后,通过passwd
命令重置密码,此时对密码没有格式要求,可以写你能记住的密码,之后通过账号(root)密码(你刚刚用passwd
重置的密码)进行远程登录服务器。
[root@wu2 ~]# passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
Xshell中可以通过 文件->属性->外观
来设置XShell中显示的字号,我设置为14。
开始部署服务器
1、MySQL的安装和配置 + Nginx的安装
(1) MySQL的安装(rpm安装)和配置
1、rpm安装MySQL并修改MySQL密码
下载MySQL的rpm包:MySQL :: Download MySQL Yum Repository
点击No thanks, just start my download.
,将mysql80-community-release-el7-3.noarch.rpm
下载到本地电脑上。
下载后,用Xftp将其上传到服务器的/opt/school_linux_final_test/java
下。
[root@wu2 ~]# yum install -y /opt/school_linux_final_test/java/mysql80-community-release-el7-3.noarch.rpm
[root@wu2 ~]# yum list mysql*
[root@wu2 ~]# yum install -y mysql-community-server.x86_64
[root@wu2 ~]# systemctl start mysqld
[root@wu2 ~]# systemctl status mysqld # 确保mysql已经启动
[root@wu2 ~]# mysql -V # 查看mysql版本
mysql Ver 8.0.25 for Linux on x86_64 (MySQL Community Server - GPL)
[root@wu2 ~]# grep 'password' /var/log/mysqld.log # 查看mysql初始密码
2021-05-31T07:49:15.049572Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: h9fif6176K>!
[root@wu2 ~]# mysql -u root -p
Enter password: # 密码是前面grep命令查出的密码:h9fif6176K>!
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.25
。。。
mysql> alter user root@localhost identified by 'a1b2c3'; # 修改密码。密码太简单,会报错,如下。
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> alter user root@localhost identified by 'Nowcoder_123'; # 修改密码,这里密码必须有大写字母,有数字,有特殊符号。
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye
[root@wu2 ~]# mysql -u root -pNowcoder_123
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 9
Server version: 8.0.25 MySQL Community Server - GPL
。。。
2、在服务器的MySQL里执行如下sql语句:
CREATE DATABASE ` linux_test` CHARACTER SET utf8 COLLATE utf8_general_ci;
USE ` linux_test` ;
CREATE TABLE ` linux_test` . ` student` ( ` id` INT ( 11 ) NOT NULL AUTO_INCREMENT , ` student_id` VARCHAR ( 50 ) , ` student_name` VARCHAR ( 50 ) , PRIMARY KEY ( ` id` ) ) ENGINE = INNODB CHARSET = utf8 COLLATE = utf8_general_ci;
INSERT INTO ` linux_test` . ` student` ( ` id` , ` student_id` , ` student_name` ) VALUES ( NULL , '2018xxxxxxxx' , 'xxx' ) ;
INSERT INTO ` linux_test` . ` student` ( ` student_id` , ` student_name` ) VALUES ( '1111' , '其他学生' ) ;
(2) Nginx的安装(yum安装)
1、yum安装Nginx
[root@wu2 ~]# yum list nginx*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Packages
nginx.x86_64 1:1.16.1-3.el7 epel
。。。
[root@wu2 ~]# yum install -y nginx.x86_64
[root@wu2 ~]# vim /etc/nginx/nginx.conf # `/etc/nginx/nginx.conf`是nginx的配置文件
2、配置Nginx
[root@wu2 ~]# vim /etc/nginx/nginx.conf
location /index.java {
proxy_pass http://127.0.0.1:8080/;
}
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000; #php-fpm默认的端口是9000
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ \.go$ {
proxy_pass http://127.0.0.1:8000;
}
location ~ \.js$ {
proxy_pass http://127.0.0.1:8001;
}
[root@wu2 ~]# service nginx restart
这里先列一下nginx的配置,在用四种语言:Java、PHP、Go、Nodejs,实现对应语言的程序后,可以通过下方网址来访问对应的程序。
语言
标准网址
其他网址
Java
http://120.79.212.4/index.java
http://120.79.212.4:8080/
PHP
http://120.79.212.4/index.php
Go
http://120.79.212.4/index.go
http://120.79.212.4:8000/ 。 http://120.79.212.4/xxx.go
Nodejs
http://120.79.212.4/index.js
http://120.79.212.4:8001/ 。 http://120.79.212.4/xxx.js
2、开启 阿里云安全组 和 服务器防火墙 的端口
要开启的端口有:
端口
描述
80
HTTP、Nginx。
8000
我的测试端口,测试Go。
8001
我的测试端口,测试Nodejs。
8080
Tocmat。测试Java。
9000
没有用到。php-fpm,PHP。
开启阿里云安全组的端口,可视化界面开启,举例如下: 开启服务器防火墙的端口:
[root@wu2 ~]# systemctl status firewalld # 查看防火墙状态
[root@wu2 ~]# service firewalld start # 开启防火墙
[root@wu2 ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
[root@wu2 ~]# firewall-cmd --zone=public --add-port=8000/tcp --permanent
[root@wu2 ~]# firewall-cmd --zone=public --add-port=8001/tcp --permanent
[root@wu2 ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
[root@wu2 ~]# firewall-cmd --zone=public --add-port=9000/tcp --permanent
[root@wu2 ~]# service firewalld restart # 开放端口、移除端口后,都要重启防火墙才生效
[root@wu2 ~]# firewall-cmd --list-ports # 查看开放了哪些端口
小知识:Linux防火墙基本命令。
systemctl status firewalld
service firewalld start
service firewalld restart
service firewalld stop
firewall-cmd --list-all
firewall-cmd --list-ports
firewall-cmd --query-port= 8080/tcp
firewall-cmd --zone= public --add-port= 8080/tcp --permanent
firewall-cmd --zone= public --remove-port= 8080/tcp --permanent
firwall-cmd
--zone
--add-port= 8080/tcp
--permanent
下面使用4种语言实现从MySQL数据库中读取数据到浏览器中显示。
1、Java
1、压缩包安装Tomcat
下载Tomcat的tar.gz压缩包Apache Tomcat® - Apache Tomcat 9 Software Downloads 把apache-tomcat-9.0.46.tar.gz
上传到服务器的/opt/school_linux_final_test/java
目录下。
[root@wu2 ~]# tar -zxvf /opt/school_linux_final_test/java/apache-tomcat-9.0.46.tar.gz -C /opt/school_linux_final_test/java/
[root@wu2 ~]# vim /etc/profile # 在最后追加
export PATH=$PATH:/opt/school_linux_final_test/java/apache-tomcat-9.0.46/bin
[root@wu2 ~]# source /etc/profile # 让配置文件/etc/profile生效
2、rpm安装java1.8
Java SE Development Kit 8 - Downloads
下载需要登录Oracle官网,即需要账号密码,下面是网上找的账号及密码,亲测有效。 Oracle Account:[email protected] Oracle Password:Oracle123
把jdk-8u291-linux-x64.rpm
上传到服务器的/opt/school_linux_final_test/java
目录下。
[root@wu2 ~]# rpm -qa | grep jdk # 检查是否原先安装过jdk
jdk1.8-1.8.0_291-fcs.x86_64
[root@wu2 ~]# rpm -e --nodeps jdk1.8-1.8.0_291-fcs.x86_64 # 可以卸载掉原先的jdk
[root@wu2 ~]# rpm -ivh /opt/school_linux_final_test/java/jdk-8u291-linux-x64.rpm # rpm安装jdk
[root@wu2 ~]# java -version # 安装成功
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
[root@wu2 ~]# vim /etc/profile # 在最后追加
JAVA_HOME=/usr/java/jdk1.8.0_291-amd64
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
[root@wu2 ~]# source /etc/profile # 让配置文件/etc/profile生效
3、在本地(Windows电脑上)用IDEA开发一个能实现从MySQL读取内容并显示在浏览器上的项目
pom.xml
< project xmlns = " http://maven.apache.org/POM/4.0.0" xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation= " http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" >
< modelVersion> 4.0.0 modelVersion>
< parent>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter-parent artifactId>
< version> 2.5.0 version>
< relativePath/>
parent>
< groupId> com.example groupId>
< artifactId> demo artifactId>
< version> 0.0.1-SNAPSHOT version>
< name> demo name>
< description> Demo project for Spring Boot description>
< properties>
< java.version> 1.8 java.version>
properties>
< dependencies>
< dependency>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter-web artifactId>
dependency>
< dependency>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter-test artifactId>
< scope> test scope>
dependency>
< dependency>
< groupId> mysql groupId>
< artifactId> mysql-connector-java artifactId>
dependency>
< dependency>
< groupId> org.mybatis.spring.boot groupId>
< artifactId> mybatis-spring-boot-starter artifactId>
< version> 2.1.0 version>
dependency>
< dependency>
< groupId> com.alibaba groupId>
< artifactId> fastjson artifactId>
< version> 1.2.58 version>
dependency>
dependencies>
< build>
< plugins>
< plugin>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-maven-plugin artifactId>
plugin>
plugins>
build>
project>
application.properties
server.port= 8080
spring.thymeleaf.cache= true
spring.datasource.driver-class-name= com.mysql.cj.jdbc.Driver
spring.datasource.url= jdbc:mysql://localhost:3306/linux_test?characterEncoding= utf-8& useSSL= false& serverTimezone= Hongkong
spring.datasource.username= root
spring.datasource.password= a1b2c3
spring.datasource.type= com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.maximum-pool-size= 15
spring.datasource.hikari.minimum-idle= 5
spring.datasource.hikari.idle-timeout= 30000
mybatis.mapper-locations= classpath:mapper/*.xml
mybatis.type-aliases-package= com.example.entity
mybatis.configuration.useGeneratedKeys= true
mybatis.configuration.mapUnderscoreToCamelCase= true
Student.java
public class Student {
private Integer id;
private String studentId;
private String studentName;
}
StudentMapper.java
@Mapper
@Repository
public interface StudentMapper {
List< Student> selectStudents ( ) ;
}
student-mapper.xml
< mapper namespace = " com.example.dao.StudentMapper" >
< sql id = " selectFields" >
id, student_id,student_name
sql>
< select id = " selectStudents" resultType = " Student" >
select < include refid = " selectFields" > include>
from student
select>
mapper>
StudentService.java
@Service
public class StudentService {
@Autowired
private StudentMapper studentMapper;
public List< Student> selectStudents ( ) {
return studentMapper. selectStudents ( ) ;
}
}
StudentController.java
@Controller
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping ( path = "/" , method = RequestMethod. GET)
public void selectStudents ( HttpServletResponse response) {
response. setContentType ( "text/html;charset=utf-8" ) ;
try (
PrintWriter writer = response. getWriter ( ) ;
) {
writer. write ( JSON. toJSONString ( studentService. selectStudents ( ) ) ) ;
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
}
DemoApplication.java
@SpringBootApplication
public class DemoApplication {
public static void main ( String[ ] args) {
SpringApplication. run ( DemoApplication. class , args) ;
}
}
4、把本地(Windows电脑上)可以访问的SpringBoot项目部署到服务器的Tomcat上
1、修改application.properties
spring.datasource.username= root
spring.datasource.password= Nowcoder_123
2、修改pom.xml
,增加
和
两行
< name> community name>
< description> nowcoder community description>
< packaging> war packaging>
< build>
< finalName> ROOT finalName>
< plugins>
< plugin>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-maven-plugin artifactId>
plugin>
plugins>
build>
3、增加一个类:CommunityServletInitializer
package com. example;
import org. springframework. boot. builder. SpringApplicationBuilder;
import org. springframework. boot. web. servlet. support. SpringBootServletInitializer;
public class CommunityServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure ( SpringApplicationBuilder builder) {
return builder. sources ( DemoApplication. class ) ;
}
}
4、用maven把项目编译并且打包
5、shutdown.sh
关闭服务器tomcat,删除服务器tomcat的webapp目录下的所有文件。把本地项目目录的target目录下的ROOT.war
文件上传到服务器tomcat的webapp目录下。startup.sh
开启服务器tomcat。
6、此时,可以使用http://120.79.212.4:8080/
访问项目。
5、配置Nginx
[root@wu2 ~]# vim /etc/nginx/nginx.conf # 增加下方内容
location /index.java {
# 注意:下方的端口号后要加"/",不然会404,因为程序的Controller里是`path = "/"`。
proxy_pass http://127.0.0.1:8080/;
}
[root@wu2 ~]# service nginx restart
此时,可以用 http://120.79.212.4/index.java
访问网页。
遇到的问题和解决方法
1、 问题:Windows上访问都没有问题,但部署到服务器后,@ResponseBody返回JSON数据,chrome浏览器显示网页,但360安全浏览器弹出下载页面。
解决方法:不使用@ResponseBody
注解,而是通过response.getWriter()
直接往浏览器写入JSON数据。
具体可以看我的这篇博客:@ResponseBody返回JSON数据,360安全浏览器弹出下载页面_夜中听雪的博客-CSDN博客
2、 问题:nginx的配置问题,无法通过http://120.79.212.4/index.java
访问到Java。
解决方法:端口号后要加"/",像这样:proxy_pass http://127.0.0.1:8080/;
。不然会404,因为程序的Controller里是path = "/"
。
2、PHP
1、PHP 的 安装、配置、启动
[root@wu2 ~]# cd /opt/school_linux_final_test/php
[root@wu2 php]# wget https://www.php.net/distributions/php-7.4.5.tar.gz
[root@wu2 php]# yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers libsqlite3x-devel oniguruma-devel
[root@wu2 php]# tar -zxvf php-7.4.5.tar.gz
[root@wu2 php]# cd php-7.4.5
[root@wu2 php-7.4.5]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php --enable-mbstring --enable-ftp --enable-gd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --without-pear --disable-phar --enable-sockets --with-zlib --with-xmlrpc --enable-fpm --enable-xml --enable-sockets --with-zlib --with-iconv --enable-soap --enable-pcntl --enable-cli --with-curl
[root@wu2 php-7.4.5]# make
[root@wu2 php-7.4.5]# make install
[root@wu2 php-7.4.5]# cp php.ini-production /usr/local/php/php.ini
[root@wu2 php-7.4.5]# vim /usr/local/php/php.ini
display_errors = On # Off改为On。设置让PHP错误信息打印在页面上。
[root@wu2 php-7.4.5]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@wu2 php-7.4.5]# ll /etc/init.d/php-fpm
-rw-r--r-- 1 root root 2401 Jun 6 20:27 /etc/init.d/php-fpm
[root@wu2 php-7.4.5]# chmod +x /etc/init.d/php-fpm
[root@wu2 php-7.4.5]# cd /usr/local/php/etc
[root@wu2 etc]# cp php-fpm.conf.default php-fpm.conf
[root@wu2 etc]# vi php-fpm.conf
# 去掉 ";pid = run/php-fpm.pid" 前面的分号
[root@wu2 etc]# cd php-fpm.d
[root@wu2 php-fpm.d]# cp www.conf.default www.conf
[root@wu2 php-fpm.d]# vi www.conf # 修改user和group为php。
user = php
group = php
[root@wu2 php-fpm.d]# groupadd php
[root@wu2 php-fpm.d]# useradd -r -g php php
[root@wu2 php-fpm.d]# chkconfig php-fpm on # 设置开启启动
[root@wu2 ~]# /etc/init.d/php-fpm start
Starting php-fpm done
[root@wu2 ~]# ps -ef |grep php
root 25243 1 0 23:35 ? 00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
php 25244 25243 0 23:35 ? 00:00:00 php-fpm: pool www
php 25245 25243 0 23:35 ? 00:00:00 php-fpm: pool www
root 25250 25051 0 23:35 pts/0 00:00:00 grep --color=auto php
2、配置Nginx,测试访问PHP
配置前,ip
、ip/index.html
、ip/index.php
都是访问不到页面的。
[root@wu2 ~]# vim /usr/share/nginx/html/index.php # 写入如下内容
[root@wu2 ~]# vim /etc/nginx/nginx.conf # 添加的两部分内容被"# my start"和"# my end"框了起来。
location / {
# my start
root /usr/share/nginx/html;
index index.php;
# my end
}
# my start
location ~ \.php$ {
#root html;
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000; #php-fpm默认的端口是9000
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# my end
[root@wu2 ~]# service nginx restart
Redirecting to /bin/systemctl restart nginx.service
配置后,ip/index.php
可以访问到下方页面。 配置后,ip
、ip/index.html
可以访问到下方页面。
Nginx 之 fastcgi配置 - 简书
3、用PHP语言,实现从MySQL读取内容并显示在浏览器上
[root@wu2 ~]# vim /usr/share/nginx/html/index.php # 删除原先内容,改为以下内容。
$mysql_server_name = '127.0.0.1' ;
$mysql_username = 'root' ;
$mysql_password = 'Nowcoder_123' ;
$mysql_database = 'linux_test' ;
$conn = mysqli_connect ( $mysql_server_name , $mysql_username , $mysql_password , $mysql_database ) ;
if ( $conn - > connect_errno) {
printf ( "Connect failed: %s\n" , $conn - > connect_error ) ;
exit ( ) ;
}
$sql = "select * from student" ;
$query = $conn - > query ( $sql ) ;
echo "这是PHP实现的页面" ;
echo "";
echo " id ";
echo " 学号 ";
echo " 姓名 ";
echo " ";
while ( $row = $query - > fetch_array ( ) ) {
echo "";
echo " ". $row [ 'id' ] . " ";
echo " ". $row [ 'student_id' ] . " ";
echo " ". $row [ 'student_name' ] . " ";
echo " " ;
}
$query - > free_result ( ) ;
$conn - > close ( ) ;
?>
访问http://120.79.212.4/index.php
时:
遇到的问题和解决方法
1、 问题:访问http://120.79.212.4/index.php
时报错:Warning: mysqli_connect(): (HY000/2002): No such file or directory in /usr/share/nginx/html/index.php on line 7
。
解决方法:把$mysql_server_name = 'localhost';
改为$mysql_server_name = '127.0.0.1';
2、 问题:访问http://120.79.212.4/index.php
时报错:Warning: mysqli_connect(): The server requested authentication method unknown to the client [caching_sha2_password] in /usr/share/nginx/html/index.php on line 7
原因:php还不支持mysql8.0最新的密码加密方式。
解决方法:
[root@wu2 ~]# mysql -uroot -p
Enter password:
mysql> use mysql;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Nowcoder_123';
mysql> exit
[root@wu2 ~]# service mysqld restart
Redirecting to /bin/systemctl restart mysqld.service
小知识:php命令:启动、停止、重启。
/etc/init.d/php-fpm start # php-fpm启动命令
/etc/init.d/php-fpm stop # php-fpm停止命令
/etc/init.d/php-fpm restart # php-fpm重启命令
ps -ef | grep php # 查看是否已经成功启动PHP
3、Go
1、Golang的安装,第一个Go程序
[root@wu2 ~]# yum list golang*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Packages
golang.x86_64 1.15.5-1.el7 epel
。。。
[root@wu2 ~]# yum install -y golang.x86_64
[root@wu2 ~]# go version
go version go1.15.5 linux/amd64
[root@wu2 ~]# mkdir -p /root/myLinuxTest/go/src /root/myLinuxTest/go/bin /root/myLinuxTest/go/pkg
[root@wu2 ~]# vim /etc/profile # 增加两句。配置环境变量。
export GOROOT=/usr/lib/golang
export GOPATH=/root/myLinuxTest/go
[root@wu2 ~]# source /etc/profile # 让文件生效
[root@wu2 ~]# mkdir -p /root/myLinuxTest/go/src/hello
[root@wu2 ~]# vim /root/myLinuxTest/go/src/hello/hello.go # 写入如下内容
package main
import "fmt"
func main ( ) {
fmt. Printf ( "hello world\n" )
}
[root@wu2 ~]# go run /root/myLinuxTest/go/src/hello/hello.go # 运行hello.go
hello world
2、用Go语言搭建简单的web服务器,即实现在浏览器上显示内容
[root@wu2 ~]# vim /root/myLinuxTest/go/src/hello/http2.go # 写入下方代码
package main
import (
"io"
"net/http"
"fmt"
)
func hello ( w http. ResponseWriter, r * http. Request) {
io. WriteString ( w, "Hello world!" )
fmt. Fprintf ( w, "Hello Wrold on client!" )
fmt. Println ( "Hello Wrold on console!" )
}
func main ( ) {
http. HandleFunc ( "/" , hello)
http. ListenAndServe ( ":8000" , nil )
}
运行web服务,并访问。
[root@wu2 ~]# go run /root/myLinuxTest/go/src/hello/http2.go # 运行
Hello Wrold on console!
如果无法用浏览器访问,进行如下操作。
# 如果无法用浏览器访问,进行如下操作。
[root@wu2 ~]# ps -ef |grep go # 确定有该进程
root 18305 9950 0 16:54 pts/1 00:00:00 go run /root/myLinuxTest/go/src/hello/http2.go
root 18345 18305 0 16:54 pts/1 00:00:00 /tmp/go-build045791547/b001/exe/http2
root 18477 12619 0 16:57 pts/2 00:00:00 grep --color=auto go
[root@wu2 ~]# netstat -ntlp | grep 8000 # 查看8000端口是否打开
tcp6 0 0 :::8000 :::* LISTEN 18345/http2
[root@wu2 ~]# curl 127.0.0.1:8000 # curl命令会把网页的html都打印出来。用该命令确认本机能够访问该web服务。
Hello world!Hello Wrold on client!
# 本机能访问,外部无法访问时,打开阿里云安全组的相应端口和防火墙上的相应端口。
# 下面是打开防火墙端口的。
[root@wu2 ~]# firewall-cmd --zone=public --add-port=8000/tcp --permanent # 开放防火墙端口
[root@wu2 ~]# service firewalld restart # 开放端口、移除端口后,都要重启防火墙才生效
curl 的用法指南 - 阮一峰的网络日志:curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。
3、用Go语言,实现从MySQL读取内容并显示在浏览器上
[root@wu2 ~]# go get github.com/go-sql-driver/mysql # 下载驱动包
[root@wu2 ~]# vim /root/myLinuxTest/go/src/hello/student.go # 写入如下内容
package main
import (
"fmt"
"net/http"
"log"
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
func all ( w http. ResponseWriter, r * http. Request) {
w. Header ( ) . Set ( "Content-Type" , "text/html;charset=utf-8" )
fmt. Fprintf ( w, "这是Golang实现的页面" )
db, err := sql. Open ( "mysql" , "root:Nowcoder_123@tcp(127.0.0.1:3306)/linux_test" )
if err != nil {
log. Fatal ( err)
}
defer db. Close ( )
rows, err := db. Query ( "SELECT * FROM student" )
if err != nil {
log. Fatal ( err)
}
defer rows. Close ( )
fmt. Fprintf ( w, "")
fmt. Fprintf ( w, " id ")
fmt. Fprintf ( w, " 学号 ")
fmt. Fprintf ( w, " 姓名 ")
fmt. Fprintf ( w, " ")
for rows. Next ( ) {
var id int
var student_id string
var student_name string
if err := rows. Scan ( & id, & student_id, & student_name) ; err != nil {
log. Fatal ( err)
}
fmt. Fprintf ( w, "")
fmt. Fprintf ( w, " %d ", id)
fmt. Fprintf ( w, " %s ", student_id)
fmt. Fprintf ( w, " %s ", student_name)
fmt. Fprintf ( w, " " )
}
if err := rows. Err ( ) ; err != nil {
log. Fatal ( err)
}
}
func main ( ) {
http. HandleFunc ( "/" , all)
err := http. ListenAndServe ( ":8000" , nil )
if err != nil {
log. Fatal ( "ListenAndServe: " , err)
}
}
# 下方两种运行方式,选一种就可以
[root@wu2 ~]# go run /root/myLinuxTest/go/src/hello/student.go # 前台暂时运行
[root@wu2 ~]# nohup go run /root/myLinuxTest/go/src/hello/student.go & # 后台长期运行
此时,可以用 http://120.79.212.4:8000/
访问。
4、配置Nginx
[root@wu2 ~]# vim /etc/nginx/nginx.conf # 增加下方配置。使得访问 "ip/xxx.go" 可以访问到 "http://120.79.212.4:8000/"
location ~ \.go$ {
proxy_pass http://127.0.0.1:8000;
}
[root@wu2 ~]# service nginx restart
此时,可以用 http://120.79.212.4/index.go
访问。
4、Nodejs
1、安装Nodejs
[root@wu2 ~]# yum list node*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Packages
node-gyp.noarch 0.10.6-2.el7 epel
nodejs.x86_64 1:6.17.1-1.el7 epel
[root@wu2 ~]# yum install -y nodejs.x86_64
[root@wu2 ~]# node -v
v6.17.1
2、Nodejs访问数据库
[root@wu2 ~]# cd /root/myLinuxTest/nodejs
[root@wu2 nodejs]# npm install mysql
[root@wu2 nodejs]# vim /root/myLinuxTest/nodejs/all.js # 文件写入如下内容
var mysql = require ( 'mysql' ) ;
var connection = mysql. createConnection ( {
host : 'localhost' ,
user : 'root' ,
password : 'Nowcoder_123' ,
port : '3306' ,
database : 'linux_test'
} ) ;
connection. connect ( ) ;
var sql = 'select * from student' ;
connection. query ( sql, function ( err, result) {
if ( err) {
console. log ( '[select error] -' , err. message) ;
return ;
}
console. log ( result) ;
} ) ;
connection. end ( ) ;
[root@wu2 nodejs]# node /root/myLinuxTest/nodejs/all.js # 运行
[ RowDataPacket { id: 1, student_id: '2018xxxxxxxx', student_name: 'xxx' },
RowDataPacket { id: 2, student_id: '1111', student_name: '其他学生' } ]
3、用Nodejs语言,实现从MySQL读取内容并显示在浏览器上
[root@wu2 ~]# vim /root/myLinuxTest/nodejs/index.js
var http= require ( 'http' ) ;
var url = require ( 'url' ) ;
var mysql = require ( 'mysql' ) ;
var connection = mysql. createConnection ( {
host : 'localhost' ,
user : 'root' ,
password : 'Nowcoder_123' ,
port : '3306' ,
database : 'linux_test'
} ) ;
var sql = 'select * from student' ;
server = http. createServer ( function ( request, response) {
response. writeHead ( 200 , { 'Content-Type' : 'text/html' } ) ;
connection. query ( sql, function ( err, result) {
if ( err) {
console. log ( '[select error] -' , err. message) ;
return ;
}
response. write (
'' +
'' +
'' +
' ' +
'' ) ;
response. write ( "这是Nodejs实现的页面" ) ;
response. write ( "") ;
response. write ( " id ") ;
response. write ( " 学号 ") ;
response. write ( " 姓名 ") ;
result. forEach ( r => {
response. write ( "") ;
response. write ( " "+ r. id+ " ") ;
response. write ( " "+ r. student_id+ " ") ;
response. write ( " "+ r. student_name+ " ") ;
response. write ( " " ) ;
} )
response. end ( ) ;
} ) ;
} ) ;
server. listen ( 8001 ) ;
# 下方两种运行方式,选一种就可以
[root@wu2 ~]# node /root/myLinuxTest/nodejs/index.js # 前台临时运行
# 后台长期运行。使用forever来使得:nodejs 在linux上后台运行。XShell链接断开后,这个index.js程序还能运行。
[root@wu2 ~]# npm install -g forever # -g 的意思是将模块安装到全局,具体安装到磁盘哪个位置,要看 npm config prefix 的位置。
[root@wu2 ~]# forever start /root/myLinuxTest/nodejs/index.js
此时,可以用 http://120.79.212.4:8001/
访问。
4、配置Nginx
[root@wu2 ~]# vim /etc/nginx/nginx.conf # 增加下方配置。使得访问 "ip/xxx.js" 可以访问到 "http://120.79.212.4:8001/"
location ~/index.js$ {
proxy_pass http://127.0.0.1:8001;
}
[root@wu2 ~]# service nginx restart
此时,可以用 http://120.79.212.4/index.js
访问。
其他
1、系统架构图
Java
PHP
Go
Nodejs
2、系统相关信息
系统发行版信息
阿里云服务器,2核4GiB,ecs.s6-c1m2.large ,华南1(深圳),深圳可用区D,CentOS7.7,64位,2021年6月30日过期。
系统IP信息
3、软件和语言的版本信息
Windows上: IDE: IntelliJ IDEA 2020.2.3 x64
Linux服务器上:
System: CentOS7.7 Database: MySQL 8.0.25 Nginx:nginx/1.16.1
JDK: jdk1.8-1.8.0_291 Tomcat: apache-tomcat-9.0.46 PHP: php-7.4.5 Go: go1.15.5 linux/amd64 Nodejs: v6.17.1
4、其他的 遇到的问题和解决方法
1、 可以直接wget http://...
这样把压缩包、rpm包直接下载到服务器上。但不知道为什么非常慢,大概每秒十几kb。所以相比起来,下载到本机,再用Xftp上传到服务器会快很多。
wget https://www.php.net/distributions/php-7.4.5.tar.gz
2、 想要维持一个长期后台运行的 logstash,你需要同时在命令前面加 nohup,后面加 &。 注意:后面加&
时,需要先空上一格,再写&
。不过不空格也没有什么事情。
# go程序使用这种方式没有问题,在XShell链接断开后,这个go程序还能够运行。
[root@wu2 ~]# nohup go run /root/myLinuxTest/go/src/hello/student.go &
# nodejs程序使用这种方式有问题,在XShell链接断开后,过上一会儿,这个index.js程序也不运行了。
[root@wu2 ~]# nohup node /root/myLinuxTest/nodejs/index.js &
# 所以,使用forever来使得:nodejs 在linux上后台运行。XShell链接断开后,这个index.js程序还能运行。
[root@wu2 ~]# npm install -g forever # -g 的意思是将模块安装到全局,具体安装到磁盘哪个位置,要看 npm config prefix 的位置。
[root@wu2 ~]# forever start /root/myLinuxTest/nodejs/index.js
可以通过ps
命令查看进程是否启动。
[root@wu2 ~]# ps -ef |grep go
[root@wu2 ~]# ps -ef |grep node
5、总结
1、我把软件安装在/opt/school_linux_final_test
下,把程序代码放在/root/myLinuxTest
下。这两个文件夹下都有4个子文件夹:java、php、go、nodejs。
6、参考
Linux安装php+nginx并访问数据库+部署到web_LittleSeedling的博客-CSDN博客
Linux安装Golang并访问数据库+部署到web_LittleSeedling的博客-CSDN博客
Linux安装Nodejs并访问数据库+部署到web_LittleSeedling的博客-CSDN博客
你可能感兴趣的:(Linux,linux,mysql,java,php,go)
移动端城市区县二级联动选择功能实现包
good2know
本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery
25-1-2019
树藤与海岛呢
hello八月来报道了今天看到了一篇文章就只想记下那两句话:良田千顷不过一日三餐广夏万间只睡卧榻三尺大概的意思就是要珍惜当下不要等来不及的时候才珍惜分享今天的两餐最近没有时间运动呢下个月补回好了说完了哈哈goodnight图片发自App图片发自App
深入解析JVM工作原理:从字节码到机器指令的全过程
一、JVM概述Java虚拟机(JVM)是Java平台的核心组件,它实现了Java"一次编写,到处运行"的理念。JVM是一个抽象的计算机器,它有自己的指令集和运行时内存管理机制。JVM的主要职责:加载:读取.class文件并验证其正确性存储:管理内存分配和垃圾回收执行:解释或编译字节码为机器指令安全:提供沙箱环境限制恶意代码二、JVM架构详解JVM由三个主要子系统组成:1.类加载子系统类加载过程分为
Linux系统配置(应用程序)
1风天云月
Linux linux 应用程序 编译安装 rpm http
目录前言一、应用程序概述1、命令与程序的关系2、程序的组成3、软件包封装类型二、RPM1、RPM概述2、RPM用法三、编译安装1、解包2、配置3、编译4、安装5、启用httpd服务结语前言在Linux中的应用程序被视为将软件包安装到系统中后产生的各种文档,其中包括可执行文件、配置文件、用户手册等内容,这些文档被组织为一个有机的整体,为用户提供特定的功能,因此对于“安装软件包”与“安装应用程序”这两
JVM 内存模型深度解析:原子性、可见性与有序性的实现
练习时长两年半的程序员小胡
JVM 深度剖析:从面试考点到生产实践 jvm java 内存模型
在了解了JVM的基础架构和类加载机制后,我们需要进一步探索Java程序在多线程环境下的内存交互规则。JVM内存模型(JavaMemoryModel,JMM)定义了线程和主内存之间的抽象关系,它通过规范共享变量的访问方式,解决了多线程并发时的数据一致性问题。本文将从内存模型的核心目标出发,详解原子性、可见性、有序性的实现机制,以及volatile、synchronized等关键字在其中的作用。一、J
Java | 多线程经典问题 - 售票
Ada54
一、售票需求1)同一个票池2)多个窗口卖票,不能出售同一张票二、售票问题代码实现(线程与进程小总结,请戳:Java|线程和进程,创建线程)step1:定义SaleWindow类实现Runnable接口,覆盖run方法step2:实例化SaleWindow对象,创建Thread对象,将SaleWindow作为参数传给Thread类的构造函数,然后通过Thread.start()方法启动线程step3
SpringMVC的执行流程
1、什么是MVCMVC是一种设计模式。MVC的原理图如下所示M-Model模型(完成业务逻辑:有javaBean构成,service+dao+entity)V-View视图(做界面的展示jsp,html……)C-Controller控制器(接收请求—>调用模型—>根据结果派发页面2、SpringMVC是什么SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,
在线人数统计业务设计(场景八股文)
业务问题在当经的网站中,在线人数的实时统计已经是一个必不可少的模块了,并且该统计功能最好能够按不同的时间间隔做的统计,现在需要你设计一个在线人数统计的模块,你应该怎么进行设计的呢?背景一个网校下会有多个学员。目前平台大概有十个,平台对应的网校大概五十几个,平均一个网校会有5w个用户,预计总人数为200w,最该学员的在线人数在10w左右。设计思路最开始的时候,想到的就是使用mysql直接实现,但是明
JAVA接口机结构解析
秃狼
SpringBoot 八股文 Java java 学习
什么是接口机在Java项目中,接口机通常指用于与外部系统进行数据交互的中间层,负责处理请求和响应的转换、协议适配、数据格式转换等任务。接口机的结构我们的接口机的结构分为两个大部分,外部接口机和内部接口机,在业务的调度上也是通过mq来实现的,只要的目的就是为了解耦合和做差异化。在接口机中主要的方法就是定时任务,消息的发送和消费,其他平台调用接口机只能提供外部接口机的方法进行调用,外部接口机可以提供消
Aop +反射 实现方法版本动态切换
需求分析在做技术选型的时候一直存在着两个声音,mongo作为数据库比较mysql好,mysql做为该数据比mongo好。当然不同数据库都有有着自己的优势,我们在做技术选型的时候无非就是做到对数据库的扬长避短。mysql最大的优势就是支持事务,事务的五大特性保证的业务可靠性,随之而来的就是事务会产生的问题:脏读、幻读、不可重复度,当然我们也会使用不同的隔离级别来解决。(最典型的业务问题:银行存取钱)
最新阿里四面面试真题46道:面试技巧+核心问题+面试心得
风平浪静如码
前言做技术的有一种资历,叫做通过了阿里的面试。这些阿里Java相关问题,都是之前通过不断优秀人才的铺垫总结的,先自己弄懂了再去阿里面试,不然就是去丢脸,被虐。希望对大家帮助,祝面试成功,有个更好的职业规划。一,阿里常见技术面1、微信红包怎么实现。2、海量数据分析。3、测试职位问的线程安全和非线程安全。4、HTTP2.0、thrift。5、面试电话沟通可能先让自我介绍。6、分布式事务一致性。7、ni
包含日志获取webshell
陈望_ning
日志文件关闭:Apache目录下的httpd.conf文件#ErrorLog"logs/error.log"#CustomLog"logs/access.log"common加#号为注释不产生日志文件如果去掉#将会在Apache/logs/目录下产生日志文件linux:access_logerror_logwindows:access.logerror.logaccess_log每一行记录了一次网
图论算法经典题目解析:DFS、BFS与拓扑排序实战
周童學
数据结构与算法 深度优先 算法 图论
图论算法经典题目解析:DFS、BFS与拓扑排序实战图论问题是算法面试中的高频考点,本博客将通过四道LeetCode经典题目(均来自"Top100Liked"题库),深入讲解图论的核心算法思想和实现技巧。涵盖DFS、BFS、拓扑排序和前缀树等知识点,每道题配有Java实现和易错点分析。1.岛屿数量(DFS遍历)问题描述给定一个由'1'(陆地)和'0'(水)组成的二维网格,计算岛屿的数量。岛屿由水平或
【异常】使用 LiteFlow 框架时,提示错误ChainDuplicateException: [chain name duplicate] chainName=categoryChallenge
本本本添哥
002 - 进阶开发能力 java
一、报错内容Causedby:com.yomahub.liteflow.exception.ChainDuplicateException:[chainnameduplicate]chainName=categoryChallengeatcom.yomahub.liteflow.parser.helper.ParserHelper.lambda$null$0(ParserHelper.java:1
Java并发核心:线程池使用技巧与最佳实践! | 多线程篇(五)
bug菌¹
Java实战(进阶版) java Java零基础入门 Java并发 线程池 多线程篇
本文收录于「Java进阶实战」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows10+IntelliJIDEA2021.3.2+Jdk1.8本文目录前言摘要正文何为线程池?为什么需要线程池?线程池的好处线程池使用场景如何创建线程池?线程池的常见配置源码解析案例分享案例代码演示案例运行
Java 队列
tryxr
java 开发语言 队列
队列一般用什么哪种结构实现队列的特性数据入队列时一定是从尾部插入吗数据出队列时一定是从头部删除吗队列的基本运算有什么队列支持随机访问吗队列的英文表示什么是队列队列从哪进、从哪出队列的进出顺序队列是用哪种结构实现的Queue和Deque有什么区别Queue接口的方法Queue中的add与offer的区别offer、poll、peek的模拟实现如何利用链表实现队列如何利用顺序表实现队列什么叫做双端队列
Matrix-Breakout 2 Morpheus靶场解题过程
信息收集目标探测靶机目标很明显就是61.139.2.141了扫描开放端口发现22、80、81访问端口主机访问80翻译一下,并没有发现什么审查源代码发现里面有一张图片,下载下来看看是否有图片的隐写wgethttp://61.139.2.141/trinity.jpegstegoveritas-itrinity.jpeg-o/home/kali/Desktop/11分解后发现什么都没有,里面的keep
JVM 内存分配与回收策略:从对象创建到内存释放的全流程
在JVM的运行机制中,内存分配与回收策略是连接对象生命周期与垃圾收集器的桥梁。它决定了对象在堆内存中的创建位置、存活过程中的区域迁移,以及最终被回收的时机。合理的内存分配策略能减少GC频率、降低停顿时间,是优化Java应用性能的核心环节。本文将系统解析JVM的内存分配规则、对象晋升机制,以及实战中的内存优化技巧。一、对象优先在Eden区分配:新生代的“临时缓冲区”大多数情况下,Java对象在新生代
代码随想录算法训练营第三十五天
01背包问题二维题目链接01背包问题二维题解importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intM=sc.nextInt();intN=sc.nextInt();int[]space=newint[M];int[]value=new
Android 应用权限管理详解
文章目录1.权限类型2.权限请求机制3.权限组和分级4.权限管理的演进5.权限监控和SELinux强制访问控制6.应用权限审核和GooglePlayProtect7.开发者最佳实践8.用户权限管理9.Android应用沙箱模型10.ScopedStorage(分区存储)11.背景位置权限(BackgroundLocationAccess)12.权限回收和自动清理13.权限请求的用户体验设计14.G
mysql复习
立夏的李子
mysql 数据库 database
mysqlselect语法selectfromjoinwheregroupbyhavingorderbylimit联合查询innerjoin()leftjoin(以左表为基准,匹配右表,不匹配的返回左表,右表以null值填充)rightjoind··(去除列重复的数据)索引类型主键索引(PrimaryKey)唯一索引(Unique)常规索引(Index)全文索引(FullText)索引准则索引不是
微信公众号回调java_处理微信公众号消息回调
weixin_39607620
微信公众号回调java
1、背景在上一节中,咱们知道如何接入微信公众号,可是以后公众号会与咱们进行交互,那么微信公众号如何通知到咱们本身的服务器呢?咱们知道咱们接入的时候提供的url是GET/mp/entry,那么公众号以后产生的事件将会以POST/mp/entry发送到咱们本身的服务器上。html2、代码实现,此处仍是使用weixin-java-mp这个框架实现一、引入weixin-java-mpcom.github.
MySQL复习题
一.填空题1.关系数据库的标准语言是SQL。2.数据库发展的3个阶段中,数据独立性最高的是阶段数据库系统。3.概念模型中的3种基本联系分别是一对一、一对多和多对多。4.MySQL配置文件的文件名是my.ini或my.cnf。5.在MySQL配置文件中,datadir用于指定数据库文件的保存目录。6.添加IFNOTEXISTS可在创建的数据库已存在时防止程序报错。7.MySQL提供的SHOWCREA
centos7安装配置 Anaconda3
Anaconda是一个用于科学计算的Python发行版,Anaconda于Python,相当于centos于linux。下载[root@testsrc]#mwgethttps://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.shBegintodownload:Anaconda3-5.2.0-L
学C++的五大惊人好处
为什么要学c++学c++有什么用学习c++的好处有1.中考可以加分2.高考可能直接录取3.就业广且工资高4.在未来30--50年c++一定是一个很受欢迎的职业5.c++成功的例子deepsick等AI智能C++语言兼备编程效率和编译运行效率的语言C++语言是C语言功能增强版,在c语言的基础上添加了面向对象编程和泛型编程的支持既继承了C语言高效,简洁,快速和可移植的传统,又具备类似Java、Go等其
Android 基础知识:Android 应用权限详解
流水mpc
android
这篇文章为大家系统的梳理一下Android权限相关的知识,在日常开发中,我们都用过权限,但是对于权限的一些细节我们可能掌握的还不够全面,这篇文章会全面的为大家介绍权限相关的知识。当然,本篇文章依然是参考了Google的官方文档:应用权限。本文目录一、认识Android权限(一)Android系统为什么需要权限?Android系统设置权限的目的是保护Android用户的隐私。对于用户的敏感数据And
Selenium基础教程
lemontree1945
selenium python 测试工具
1.Selenium环境安装1.1浏览器安装Chrome和ChromeDriver下载地址:https://googlechromelabs.github.io/chrome-for-testing/注意:驱动版本号要和浏览器版本号一致;安装后关闭浏览器自动更新:services.msc:打开系统服务找到和google相关的服务,全部修改为禁用1.2安装第三方库seleniumpipinstall
Android Slices:让应用功能在系统级交互中触手可及
安卓开发者
Android Jetpack android 交互 gitee
引言在当今移动应用生态中,用户每天要面对数十个甚至上百个应用的选择,如何让自己的应用在关键时刻触达用户,成为开发者面临的重要挑战。Google在Android9Pie中引入的Slices技术,正是为了解决这一痛点而生。本文将全面介绍AndroidSlices的概念、实现方法、应用场景以及最佳实践,帮助开发者掌握这一提升用户参与度的强大工具。什么是AndroidSlices?AndroidSlice
Java8 Stream流的sorted()的排序【正序、倒序、多字段排序】
Tony666688888
java windows 开发语言
针对集合排序,java8可以用Stream流的sorted()进行排序。示例Bean以下我们会使用这个Bean来做示例。publicclassOrder{privateStringweight;privateDoubleprice;privateStringdateStr;//忽略getter、setter、构造方法、toString}字段排序首先是比较器Comparator,形式如下:Compa
用代码生成艺术字:设计个性化海报的秘密
本文围绕“用代码生成艺术字:设计个性化海报的秘密”展开,先概述代码生成艺术字在海报设计中的独特价值,接着介绍常用的代码工具(如HTML、CSS、JavaScript等),详细阐述从构思到实现的完整流程,包括字体样式设计、动态效果添加等,还分享了提升艺术字质感的技巧及实际案例。最后总结代码生成艺术字的优势,为设计师提供打造个性化海报的实用指南,助力提升海报设计的独特性与吸引力,符合搜索引擎SEO标准
ViewController添加button按钮解析。(翻译)
张亚雄
c
<div class="it610-blog-content-contain" style="font-size: 14px"></div>// ViewController.m
// Reservation software
//
// Created by 张亚雄 on 15/6/2.
mongoDB 简单的增删改查
开窍的石头
mongodb
在上一篇文章中我们已经讲了mongodb怎么安装和数据库/表的创建。在这里我们讲mongoDB的数据库操作
在mongo中对于不存在的表当你用db.表名 他会自动统计
下边用到的user是表明,db代表的是数据库
添加(insert):
log4j配置
0624chenhong
log4j
1) 新建java项目
2) 导入jar包,项目右击,properties—java build path—libraries—Add External jar,加入log4j.jar包。
3) 新建一个类com.hand.Log4jTest
package com.hand;
import org.apache.log4j.Logger;
public class
多点触摸(图片缩放为例)
不懂事的小屁孩
多点触摸
多点触摸的事件跟单点是大同小异的,上个图片缩放的代码,供大家参考一下
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener
有关浏览器窗口宽度高度几个值的解析
换个号韩国红果果
JavaScript html
1 元素的 offsetWidth 包括border padding content 整体的宽度。
clientWidth 只包括内容区 padding 不包括border。
clientLeft = offsetWidth -clientWidth 即这个元素border的值
offsetLeft 若无已定位的包裹元素
数据库产品巡礼:IBM DB2概览
蓝儿唯美
db2
IBM DB2是一个支持了NoSQL功能的关系数据库管理系统,其包含了对XML,图像存储和Java脚本对象表示(JSON)的支持。DB2可被各种类型的企 业使用,它提供了一个数据平台,同时支持事务和分析操作,通过提供持续的数据流来保持事务工作流和分析操作的高效性。 DB2支持的操作系统
DB2可应用于以下三个主要的平台:
工作站,DB2可在Linus、Unix、Windo
java笔记5
a-john
java
控制执行流程:
1,true和false
利用条件表达式的真或假来决定执行路径。例:(a==b)。它利用条件操作符“==”来判断a值是否等于b值,返回true或false。java不允许我们将一个数字作为布尔值使用,虽然这在C和C++里是允许的。如果想在布尔测试中使用一个非布尔值,那么首先必须用一个条件表达式将其转化成布尔值,例如if(a!=0)。
2,if-els
Web开发常用手册汇总
aijuans
PHP
一门技术,如果没有好的参考手册指导,很难普及大众。这其实就是为什么很多技术,非常好,却得不到普遍运用的原因。
正如我们学习一门技术,过程大概是这个样子:
①我们日常工作中,遇到了问题,困难。寻找解决方案,即寻找新的技术;
②为什么要学习这门技术?这门技术是不是很好的解决了我们遇到的难题,困惑。这个问题,非常重要,我们不是为了学习技术而学习技术,而是为了更好的处理我们遇到的问题,才需要学习新的
今天帮助人解决的一个sql问题
asialee
sql
今天有个人问了一个问题,如下:
type AD value
A  
意图对象传递数据
百合不是茶
android 意图Intent Bundle对象数据的传递
学习意图将数据传递给目标活动; 初学者需要好好研究的
1,将下面的代码添加到main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http:/
oracle查询锁表解锁语句
bijian1013
oracle object session kill
一.查询锁定的表
如下语句,都可以查询锁定的表
语句一:
select a.sid,
a.serial#,
p.spid,
c.object_name,
b.session_id,
b.oracle_username,
b.os_user_name
from v$process p, v$s
mac osx 10.10 下安装 mysql 5.6 二进制文件[tar.gz]
征客丶
mysql osx
场景:在 mac osx 10.10 下安装 mysql 5.6 的二进制文件。
环境:mac osx 10.10、mysql 5.6 的二进制文件
步骤:[所有目录请从根“/”目录开始取,以免层级弄错导致找不到目录]
1、下载 mysql 5.6 的二进制文件,下载目录下面称之为 mysql5.6SourceDir;
下载地址:http://dev.mysql.com/downl
分布式系统与框架
bit1129
分布式
RPC框架 Dubbo
什么是Dubbo
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。 集群容错: 提供基于接
那些令人蛋痛的专业术语
白糖_
spring Web SSO IOC
spring
【控制反转(IOC)/依赖注入(DI)】:
由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
简单的说:对象的创建又容器(比如spring容器)来执行,程序里不直接new对象。
Web
【单点登录(SSO)】:SSO的定义是在多个应用系统中,用户
《给大忙人看的java8》摘抄
braveCS
java8
函数式接口:只包含一个抽象方法的接口
lambda表达式:是一段可以传递的代码
你最好将一个lambda表达式想象成一个函数,而不是一个对象,并记住它可以被转换为一个函数式接口。
事实上,函数式接口的转换是你在Java中使用lambda表达式能做的唯一一件事。
方法引用:又是要传递给其他代码的操作已经有实现的方法了,这时可以使
编程之美-计算字符串的相似度
bylijinnan
java 算法 编程之美
public class StringDistance {
/**
* 编程之美 计算字符串的相似度
* 我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:
* 1.修改一个字符(如把“a”替换为“b”);
* 2.增加一个字符(如把“abdd”变为“aebdd”);
* 3.删除一个字符(如把“travelling”变为“trav
上传、下载压缩图片
chengxuyuancsdn
下载
/**
*
* @param uploadImage --本地路径(tomacat路径)
* @param serverDir --服务器路径
* @param imageType --文件或图片类型
* 此方法可以上传文件或图片.txt,.jpg,.gif等
*/
public void upload(String uploadImage,Str
bellman-ford(贝尔曼-福特)算法
comsci
算法 F#
Bellman-Ford算法(根据发明者 Richard Bellman 和 Lester Ford 命名)是求解单源最短路径问题的一种算法。单源点的最短路径问题是指:给定一个加权有向图G和源点s,对于图G中的任意一点v,求从s到v的最短路径。有时候这种算法也被称为 Moore-Bellman-Ford 算法,因为 Edward F. Moore zu 也为这个算法的发展做出了贡献。
与迪科
oracle ASM中ASM_POWER_LIMIT参数
daizj
ASM oracle ASM_POWER_LIMIT 磁盘平衡
ASM_POWER_LIMIT
该初始化参数用于指定ASM例程平衡磁盘所用的最大权值,其数值范围为0~11,默认值为1。该初始化参数是动态参数,可以使用ALTER SESSION或ALTER SYSTEM命令进行修改。示例如下:
SQL>ALTER SESSION SET Asm_power_limit=2;
高级排序:快速排序
dieslrae
快速排序
public void quickSort(int[] array){
this.quickSort(array, 0, array.length - 1);
}
public void quickSort(int[] array,int left,int right){
if(right - left <= 0
C语言学习六指针_何谓变量的地址 一个指针变量到底占几个字节
dcj3sjt126com
C语言
# include <stdio.h>
int main(void)
{
/*
1、一个变量的地址只用第一个字节表示
2、虽然他只使用了第一个字节表示,但是他本身指针变量类型就可以确定出他指向的指针变量占几个字节了
3、他都只存了第一个字节地址,为什么只需要存一个字节的地址,却占了4个字节,虽然只有一个字节,
但是这些字节比较多,所以编号就比较大,
phpize使用方法
dcj3sjt126com
PHP
phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块,下面介绍一个它的使用方法,需要的朋友可以参考下
安装(fastcgi模式)的时候,常常有这样一句命令:
代码如下:
/usr/local/webserver/php/bin/phpize
一、phpize是干嘛的?
phpize是什么?
phpize是用来扩展php扩展模块的,通过phpi
Java虚拟机学习 - 对象引用强度
shuizhaosi888
JAVA虚拟机
本文原文链接:http://blog.csdn.net/java2000_wl/article/details/8090276 转载请注明出处!
无论是通过计数算法判断对象的引用数量,还是通过根搜索算法判断对象引用链是否可达,判定对象是否存活都与“引用”相关。
引用主要分为 :强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Wea
.NET Framework 3.5 Service Pack 1(完整软件包)下载地址
happyqing
.net 下载 framework
Microsoft .NET Framework 3.5 Service Pack 1(完整软件包)
http://www.microsoft.com/zh-cn/download/details.aspx?id=25150
Microsoft .NET Framework 3.5 Service Pack 1 是一个累积更新,包含很多基于 .NET Framewo
JAVA定时器的使用
jingjing0907
java timer 线程 定时器
1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。
对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。
privatejava.util.Timer timer;
timer = newTimer(true);
timer.schedule(
newjava.util.TimerTask() { public void run()
Webbench
流浪鱼
webbench
首页下载地址 http://home.tiscali.cz/~cz210552/webbench.html
Webbench是知名的网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发。
Webbench能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相
第11章 动画效果(中)
onestopweb
动画
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
windows下制作bat启动脚本.
sanyecao2314
java cmd 脚本 bat
java -classpath C:\dwjj\commons-dbcp.jar;C:\dwjj\commons-pool.jar;C:\dwjj\log4j-1.2.16.jar;C:\dwjj\poi-3.9-20121203.jar;C:\dwjj\sqljdbc4.jar;C:\dwjj\voucherimp.jar com.citsamex.core.startup.MainStart
Java进行RSA加解密的例子
tomcat_oracle
java
加密是保证数据安全的手段之一。加密是将纯文本数据转换为难以理解的密文;解密是将密文转换回纯文本。 数据的加解密属于密码学的范畴。通常,加密和解密都需要使用一些秘密信息,这些秘密信息叫做密钥,将纯文本转为密文或者转回的时候都要用到这些密钥。 对称加密指的是发送者和接收者共用同一个密钥的加解密方法。 非对称加密(又称公钥加密)指的是需要一个私有密钥一个公开密钥,两个不同的密钥的
Android_ViewStub
阿尔萨斯
ViewStub
public final class ViewStub extends View
java.lang.Object
android.view.View
android.view.ViewStub
类摘要: ViewStub 是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件。当 ViewSt