文章目录
开始前的准备工作
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)
程序员常用Linux命令
小柒v
Linux linux
收录实际开发中常用的命令ifconfig查看系统的网卡相关信息suxxxx切换当前系统的账户(root账户可以直接切换到其他账户,其他账户切换到root账户需要密码)pwd打印当前的所处路径cd相对路径/绝对路径进入指定的文件夹(目录)~表示Home路径…表示上一级目录.表示当前目录ls&ll打印当前目录下的所有文件和子目录clear清空命令行2.文件夹的相关操作mkdirxxx创建文件夹(目录)
javascript当中insertBefore的用法
qq_44594371
javascript javascript insertBefore insertBefore
例1.3(insertBeforeIEFF.html)1111msgtest222aaaaaaaaendinsertedNodevarinsertedNode=document.getElementById("insertedNode");varaaa=document.getElementById("aaa");vartest=document.getElementById("contain")
学习疯狂JAVA讲义——学习基本类型
红鲤鱼与绿鲤鱼与哈士奇
学习 java 开发语言
笔记备忘,方便以后忘了查询(如有错误,敬请指点)★类型:↗基本类型Java的类型↘引用类型↗整形(byte、short、int、long)↗浮点型(float、double)★基本类型:→字符型(char)↘boolean型(boolean)★整型位(bit)要么是0、要么是1。字节(Byte)8个bit所谓整形,只能装整数(包括正整数和负整数)2^0→12^1→22^2→42^3→82^4→16
Linux文件:缓冲区、缓冲区刷新机制 | C库模拟实现
小白debug~
Linux从入门到精通 linux c语言 计算机外设 缓冲区 C库函数
Linux文件:缓冲区、缓冲区刷新机制|C库模拟实现一、缓冲区的作用二、缓冲区的刷新机制三、测试样例解析3.1测试样例和运行结果3.2结果分析1、向显示器文件写入:2、向磁盘文件进行写入:四、语言级别的缓冲区究竟在哪?五、C库函数封装简单模拟5.1结构体封装内容5.2文件打开接口封装5.3文件关闭和文件刷新5.4向显示器文件写入一、缓冲区的作用 缓冲区本质上就是一部分内存,用于提高效率!! 对于文
MySQL的binlog日志
mysql
binlog基本认识MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。一般来说开启二进制日志大概会有1%的性能损耗(参见MySQL官方中文手册5.1.24版)。二进制有两个最重要的使用场景:其一:MySQLReplication在Master端开启binl
Linux内存管理方式
wjq++
操作系统 linux 服务器 网络
Linux内存管理涉及到多个方面,包括物理内存的分配和回收、虚拟内存的管理、页面置换、内存保护等。以下是Linux内存管理的主要方式和机制:1.虚拟内存(VirtualMemory)虚拟地址空间:每个进程拥有自己的虚拟地址空间,虚拟地址空间与物理内存是分开的。进程在运行时使用虚拟地址,操作系统和硬件负责将虚拟地址映射到物理内存。页表(PageTables):虚拟地址到物理地址的映射通过页表完成。每
Docker技术学习指南:从入门到实践
小码快撩
docker 容器 运维
引言Docker是一款开源的应用容器引擎,起源于2013年,基于Go语言开发,并遵循Apache2.0协议进行开源发布。它的出现是为了解决软件交付过程中的“环境一致性”问题,通过将应用及其依赖打包成可移植、轻量级的容器(Container),确保应用在任何地方运行都能得到一致的行为和性能。一、Docker基础概念与安装:Docker基础概念1.镜像(Image)镜像是Docker容器的构建块,它是
常见Linux命令
程序员 小柴
后端工程化 linux 服务器 运维
第八章常见Linux命令学习目标1熟练文件目录类命令2熟悉用户管理命令3熟悉组管理命令4熟练文件权限命令5熟悉搜索查找类命令6熟练压缩和解压缩命令7熟练进程线程类命令8了解磁盘分区类命令第一节文件目录类命令(1)pwd打印当前目录的绝对路径(printworkingdirectory)基本语法pwd(功能描述:显示当前工作目录的绝对路径)案例实操显示当前工作目录的绝对路径[root@hadoop1
IE 6113 Quality Control and Improvements
后端
[DepartmentofTechnologyManagementandInnovation][IE6113][QualityControlandImprovements][Spring2025]CoursePre-requisites.Studentsneedtohavegoodconceptsofprobabilityandstatistics.CourseDescriptionThiscou
ESP32-C3 入门篇(三)Linux下开发环境搭建
风往东吹
ESP32 linux 嵌入式硬件
文章目录前言一、克隆代码1.克隆esp-gitee-tools2.克隆esp-idf3.安装子模块二、安装编译环境1.更改编译器下载路径2.更改python软件源3.使用脚本安装环境4.安装cmake三、尝试编译1.导出环境变量2.编译例程四、遇到的问题1.ERROR:Thisscriptwascalledfromavirtualenvironment,cannotcreateavirtualen
CMSC 150 Simple Chatbot
后端
SimpleChatbotCMSC150-[01/02]-Spring2025-Project1IntroductionMostAIagents,particularlychatbots(seeELIZA,oneofthefirstchatbotsandEugeneGootsman,thefirstchatbottopasstheTuringTest),arereallyjustmadeupofc
控制论的革命者:阿拉德时代智利的技术与政治
shenminyin
控制论 社会主义 科学技术史 赛博 历史传记
本书背景位于南美国家智利,版图形如窄条,夹在安第斯山脉与太平洋之间。1970年,智利选民选择了在萨尔瓦多·阿连德·戈森斯(SalvadorGuillermoAllendeGossens)的领导下通过民主道路进行社会主义变革。图书推荐书籍简介本书讲述了20世纪70年代智利阿连德政府时期,一场独特的技术与政治变革实验——Cybersyn项目。这是一个旨在通过控制论和计算机技术,建立覆盖全国的实时经济信
基于eBPF的智能诊断平台:实现云原生系统的自愈型运维体系
桂月二二
云原生 运维
引言:从被动运维到预测性自愈的进化当某电商平台通过eBPF实时诊断系统提前48小时预测到MySQL集群的锁竞争风暴时,其核心是千万级指标粒度的内核状态分析与AI驱动的根因定位算法的结合。运维数据显示,该平台将平均故障恢复时间(MTTR)从23分钟压缩到71秒,并自动修复了87%的异常事件。通过动态注入修复策略,集群CPU毛刺现象减少了94%,开创了智能运维的新纪元。一、传统可观测性工具的桎梏1.1
springboot学生宿舍信息的系统(11574)
codercode2022
spring boot 后端 java 开发语言 spring gulp 前端框架
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项目截图有需要的同学,源代码和配套文档领取,加文章最下方的名片哦!
Java中的分布式(概念说明)
阿乾之铭
java 分布式
1.分布式的基本概念1.1什么是分布式系统?分布式系统(DistributedSystem):由多台服务器(或节点)协同工作,对外提供一个整体服务。不同节点之间通过网络通信来协同处理请求或共享数据,相对于「单体应用」而言,可以带来更高的吞吐量、可用性和灵活扩展能力。1.2分布式vs.单体架构单体架构所有业务模块部署在同一应用实例中,垂直扩容(升级服务器硬件)成为主要的扩展方式。优点:开发调试较简单
JAVA基础知识总结(2025速通)三
剑走偏锋o.O
java 开发语言
文章目录前言final关键字1、修饰属性或者局部变量【掌握】2、方法【掌握】3、类【掌握】4、应用场景【理解】1、常量2、修饰属性3、修饰局部变量4、修饰方法5、修饰类Object类详解1、常用方法【掌握】2、了解的方法【了解】3、学习反射之后要掌握的方法【了解】4、学习线程之后要掌握的方法【了解】字符串处理类1、java.lang.String类的使用【掌握】2、正则表达式【了解】3、Strin
java笔记——Map循环指南
啊健的影子
java 笔记 python
一、遍历Map的三种方法Java中的Map是一种以键值对形式存储数据的容器,常用的实现类有HashMap、LinkedHashMap和TreeMap。遍历Map是我们在使用Map时最常遇到的问题之一,下面介绍三种常用的遍历方法。1.通过entrySet遍历Mapmap=newHashMap();map.put(1,"one");map.put(2,"two");map.put(3,"three")
Java进阶篇之Lambda表达式
code2cat
Java Java进阶 开发语言 java ide intellij-idea idea myeclipse
引言在前面的文章中,我们介绍了线程池(Java进阶篇之线程池)。你是不是经常遇到需要写大量匿名内部类的情况?比如,我们在使用Java的集合、事件监听器、或者某些框架时,常常需要实现接口中的单一方法。传统的方式往往会导致代码冗长,影响可读性。而Lambda表达式的出现,正是为了简化这些重复的代码,让我们能够以更加简洁、优雅的方式表达操作。今天,我们将深入探讨Java中的Lambda表达式,看看它如何
JS(70-89)
小箌
javascript 开发语言 学习
01_内置对象-Math介绍:Math对象是JavaScript提供的一个“数学”对象作用:提供了一系列做数学运算的方法Math对象包含的方法有:random:生成0-1之间的随机数(包含0不包括1)ceil:向上取整floor:向下取整max:找最大数min:找最小数pow:幂运算abs:绝对值生成任意范围随机数介绍:Math.random()随机数函数,返回一个0-1之间,并且包括0不包括1的
JS(1-69)
小箌
javascript 开发语言 学习
01_JS介绍1.1JS是什么1.JavaScript(是什么?)是一种运行在客户端(浏览器)的编程语言,实现人机交互效果。2.作用(做什么?)网页特效(监听用户的一些行为让网页作出对应的反馈)表单验证(针对表单数据的合法性进行判断)数据交互(获取后台的数据,渲染到前端服务端编程(node.js)3.JavaScript的组成(有什么?)ECMAScript:规定了js基础语法核心知识。口比如:变
Java中List、Set、Map 之间的区别是什么?
伟主教
java基础篇 java list windows
在Java中,List、Set和Map是三种常见的集合接口,它们有不同的特性和使用场景。以下是它们之间的主要区别:1.List定义:List是一种有序的集合,允许包含重复的元素。实现类:常见实现类有ArrayList、LinkedList、Vector等。特点:元素按插入顺序排列。可以通过索引访问元素。允许添加重复的元素。常用方法:add(Ee):添加元素。get(intindex):通过索引获取
BUUCTF 逆向工程(reverse)之Java逆向解密
若丶时光破灭
CTF-逆向工程 CTF 逆向工程
程序员小张不小心弄丢了加密文件用的秘钥,已知还好小张曾经编写了一个秘钥验证算法,聪明的你能帮小张找到秘钥吗?注意:得到的flag请包上flag{}提交下载好题目后,发现它是个以.class为后缀的。所以用JD-GUI打开这个文件。就可以看到Java代码importjava.util.ArrayList;importjava.util.Scanner;publicclassReverse{publi
Centos使用Mysql
SYS_MHPY
Linux centos mysql linux
文章目录1连接数据库2执行SQL脚本1连接数据库mysql-uusername-p[root@localhost~]#mysql-uusername-p2执行SQL脚本source/path/to/example.sql;
DRF框架使用djangorestframework-simplejwt实现自定义用户类的token校验
lj907722644
Python python django jwt DRF simplejwt
1.安装simplejwt库并修改settings.py安装simplejwtpipinstalldjangorestframeworkpipinstalldjangorestframework-simplejwt修改settings.py注册应用INSTALLED_APPS=[...'rest_framework','rest_framework_simplejwt',]设置jwt鉴权REST_
DRF框架使用djangorestframework-simplejwt实现自定义用户类的登录逻辑
lj907722644
Python python django simplejwt token
1.token校验生成并校验token,参考上一篇文章:https://blog.csdn.net/u013071014/article/details/144562716?spm=1001.2014.3001.55022.新建role、menu子模块新建role、menu这两个子模块在PyCharm->Tools->Runmanage.pyTask中执行命令#创建role子模块startappr
python读取bashrc变量不生效问题
鸭梨山大哎
linux python python 开发语言
修改/etc/environment然后重启终端即可/etc/environment是Linux系统中用于设置全局环境变量的配置文件。它通常用于定义系统范围内所有用户和进程共享的环境变量。与用户级别的配置文件(如.bashrc或.bash_profile)不同,/etc/environment中的环境变量对所有用户和会话生效。1./etc/environment的作用全局生效:在/etc/envi
CSRF verification failed. Request aborted.
悟空空心
csrf 前端
Forbidden(403)CSRFverificationfailed.Requestaborted.HelpReasongivenforfailure:CSRFtokenmissing.Ingeneral,thiscanoccurwhenthereisagenuineCrossSiteRequestForgery,orwhenDjango’sCSRFmechanismhasnotbeenuse
ssm毕业设计基于SSM框架的中医养生系统设计与实现[文档+开题+PPT
IT实战课堂
课程设计
选题推荐——以防找不到我们,点击上方订阅专栏✌✌\Java毕设实战项目Python毕设项目源代码asp.net毕业设计项目Uniapp安卓毕业设计项目node.js毕业设计项目python毕业设计微信小程序毕业设计项目php毕业设计文末获取源码联系一、项目介绍1.1研究背景现在大家正处于互联网加的时代,这个时代它就是一个信息内容无比丰富,信息处理与管理变得越加高效的网络化的时代,这个时代让大家的生
JAVA:序列化和反序列化为什么要实现Serializable接口
奋斗的狍子007
JAVA java 开发语言 序列化 Serializable
一、前言序列化和反序列化是什么1.序列化 序列化是将Java对象转换为字节流的过程。这个字节流包含了对象的类型和状态信息,可以在稍后通过反序列化过程重新构造出原始对象。序列化的核心作用就是对象状态的保存。 在Java中,要实现序列化,类必须实现java.io.Serializable接口。这个接口是一个标记接口,不包含任何方法,但它告诉Java虚拟机(JVM)这个类的对象可以被序列化。序列化场
Python动态特性详解
鸭梨山大哎
python java python 开发语言
Java和Python在语言设计上有很大不同,尤其是在动态特性方面。Java是一种静态类型语言,强调编译时的类型检查和严格的类型约束,而Python是一种动态类型语言,强调运行时的灵活性和简洁性。下面通过对比Java和Python来讲解Python的动态特性。1.动态类型vs静态类型Python(动态类型)变量的类型在运行时确定,并且可以随时改变。示例:x=10#x是整数x="hello"#x变为
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