CentOS7入门_安装并配置tomcat8.5.14
首先是下载,当然是官方网址 http://tomcat.apache.org/ 进入官网后了我们看到从tomcat6-tomcat9可供我们选择,因为tomcat9还是alpha版本,我们就选择最新的稳定版8.5.14.当然你也可以选择最常用的tomcat7.0.7. 具体的大家可以看这篇博客里面有各个版本的介绍tomcat版本介绍 选择完成之后我们就可以下载了。这里我给出两个版本的下载地址,如果大家需要其他版本的Tomcat可以自行去官网上面下载。
1 2 |
wget http://apache.fayea.com/tomcat/tomcat-8/v8.5.14/bin/apache-tomcat-8.5.14.tar.gz wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.77/bin/apache-tomcat-7.0.77.tar.gz |
下载完成后我们解压
1 |
tar -xvf apache-tomcat-8.5.14.tar.gz |
解压完毕之后我们进入tomcat目录下的bin文件,当然你也可以使用mv命令重命名文件夹,如果不太了解mv命令可以查看我的linux常用命令。 执行./catalina.sh 或者./startup.sh启动tomcat。 如果出现上图,并且在浏览器的8080端口中可以看到tomcat的猫就说明tomcat启动成功。 如果启动tomcat时,出现以以下错误说明jdk的环境变量没有配置。参考我的jdk安装指南配置。 如果tomcat 启动成功但是外网机访问不到请检查linux的防火墙是不是没有关闭,或者外网机是不是设置了代理。
1 |
--停止防火墙 |
1 2 |
systemctl stop firewalld service service iptables stop |
1 |
--永久关闭防火墙 |
1 2 |
systemctl disable firewalld service chkconfig iptables off |
怎么看tomcat服务是否启动成功呢,使用命令:
1 |
ps -ef | grep tomcat --查看正在运行的进程 |
如果看到tomcat的进程就说明tomcat启动成功了。如果没有出现就说明tomcat有问题。更换活着重新解压缩tomcat试试。 启动成功之后我们可以先看看在本机上是否可以访问。我们使用wget命令:
1 |
wget http://localhost:8080/ |
出现下图返回 200 ok 说明在本机上是没有问题的。 确认本机没有问题后,我们互相ping linux系统和windows系统的ip地址,看是否可以相互ping通,如果不能以相互ping通的话。请检查检查windows和linux服务器连接问题。比如防火墙,或者代理问题。 如果本机上也没有返回 200 就检查tomcat的配置文件,看他得端口号是不是默认的8080,如果端口号也没错的话还是看不见tomcat的猫的话可以留言和我讨论。
1 |
more conf/server.xml |
最后一点,如何设置tomcat开机自启动。将tomcat配置在 /etc/rc.local 下。
1 |
vim /etc/rc.local |
启动tomcat之前必须将java环境变量设置好。
1 2 3 |
JAVA_HOME=/usr/java/jdk1.8.0_91 export JAVA_HOME /usr/local/tomcat-8.5.14/bin/startup.sh |
重启reboot验证,tomcat 是否启动了,执行。
1 |
ps -ef | grep tomcat |
出现下图就说明tomcat已经启动了。 最后也就是见证奇迹的时刻,我们把我们的网站发布至/usr/local/tomcat-8.5.14/webapps/ROOT文件夹下; 我们就可以直接访问我们的网站了! from: http://www.cnblogs.com/Jxiaobai/p/6840480.html?utm_source=itdadao&utm_medium=referral
View Details闰年的算法
var result = "平年"; var year = DateTime.Now.Year; //不是整百年,且可以被4整除 if (year % 100 != 0 && year % 4 == 0) { result = "闰年"; } //能被400整除 if (year % 400 == 0) { result = "闰年"; } //对于数值很大的年份,这年如果能被3200整除,并且能被172800整除则是闰年 if (year > 3200 && year % 3200 == 0 && year % 172800 == 0) { result = "闰年"; }
View DetailsSqlite 设置默认时间为本地时间
先设置字段类型为datetime, 再把缺省值设置为datetime( 'now', 'localtime' ) from:http://www.cnblogs.com/vonly/p/5630501.html
View DetailsSQLite数据库中获取新插入数据的自增长ID
SQLite数据库中有一有列名为ID的自增列,项目需求要在向数据库在插入新数据的同时返回新插入数据行的ID。 我这里用事务,把插入和查询语句通过ExecuteReader一起提交,返回DbDataReader。 实现代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
public bool Insert(string topic, string key, string value, out int id) { DbProviderFactory factory = SQLiteFactory.Instance; using (DbConnection conn = factory.CreateConnection()) { conn.ConnectionString = _connectionString; conn.Open(); DbCommand cmdInsert = conn.CreateCommand(); cmdInsert.Parameters.Add(cmdInsert.CreateParameter()); cmdInsert.Parameters.Add(cmdInsert.CreateParameter()); cmdInsert.Parameters.Add(cmdInsert.CreateParameter()); DbTransaction trans = conn.BeginTransaction(); try { cmdInsert.CommandText = "INSERT INTO [{0}] ([Topic],[Key],[Value]) VALUES (?,?,?);SELECT LAST_INSERT_ROWID() FROM [{0}]"; cmdInsert.CommandText = string.Format(cmdInsert.CommandText, _messageTableName); cmdInsert.Parameters[0].Value = topic; cmdInsert.Parameters[1].Value = key; cmdInsert.Parameters[2].Value = value; DbDataReader reader = cmdInsert.ExecuteReader(); trans.Commit(); if (reader.Read()) { id = int.Parse(reader[0].ToString()); reader.Close(); return true; } else { SAEC_Log4net.Log.Error("insert message to db fail"); id = 0; return false; } } catch (Exception e) { trans.Rollback(); SAEC_Log4net.Log.Error(e.ToString()); id = 0; return false; } } } |
转载请注明出处:http://www.cnblogs.com/keitsi/p/5558985.html
View Details各类程序员学习路线图
程序猿是一种非常特殊的、可以从事程序开发、维护的动物。一般分为程序设计猿和程序编码猿,但两者的界限并不非常清楚,都可以进行开发、维护工作。 前端工程师 基础:HTML教程, CSS教程 进阶:Javascript,jQuery 高级:AJAX 教程,JSON 教程,XML 教程 框架扩展学习:Bootstrap 教程,jQuery UI 教程,jQuery EasyUI 教程,jQuery Mobile 教程 调试工具:Firebug 教程 开发工具:HBuilder,Dreamweaver,Notepad++,Photoshop PHP 工程师 基础:HTML教程,PHP 教程 进阶:SQL 教程,MySQL 教程 高级:正则表达式教程,Mongodb教程, AJAX 教程,JSON 教程,XML 教程, 开发工具:Notepad++,phpMyAdmin,EasyEclipse for PHP Python 工程师 基础:Python 教程 进阶:SQL 教程,MySQL 教程 高级:正则表达式教程,Mongodb教程, AJAX 教程,JSON 教程,XML 教程, 开发工具:PyDev for Eclipse .NET 工程师 基础:C# 教程,ASP.NET 教程 进阶:SQL 教程 高级:正则表达式教程,Mongodb教程, AJAX 教程,JSON 教程,XML 教程, 开发工具:visual studio 2010 JAVA 工程师 基础:Java 教程,JSP 教程 进阶:SQL 教程,MySQL 教程 高级:正则表达式教程,Mongodb教程, AJAX 教程,JSON 教程,XML 教程, 开发工具:Eclipse ASP 工程师 ASP 现在应该比较少用,建议学习路线为:HTML教程,ASP 教程,SQL 教程 相关图谱 前端工程师必备技能图谱 各类程序开发语言概述 […]
View DetailsSQLite 日期 & 时间
SQLite 支持以下五个日期和时间函数: 序号 函数 实例 1 date(timestring, modifier, modifier, …) 以 YYYY-MM-DD 格式返回日期。 2 time(timestring, modifier, modifier, …) 以 HH:MM:SS 格式返回时间。 3 datetime(timestring, modifier, modifier, …) 以 YYYY-MM-DD HH:MM:SS 格式返回。 4 julianday(timestring, modifier, modifier, …) 这将返回从格林尼治时间的公元前 4714 年 11 月 24 日正午算起的天数。 5 strftime(format, timestring, modifier, modifier, …) 这将根据第一个参数指定的格式字符串返回格式化的日期。具体格式见下边讲解。 上述五个日期和时间函数把时间字符串作为参数。时间字符串后跟零个或多个 modifier 修饰符。strftime() 函数也可以把格式字符串 format 作为其第一个参数。下面将为您详细讲解不同类型的时间字符串和修饰符。 时间字符串 一个时间字符串可以采用下面任何一种格式: 序号 时间字符串 实例 1 YYYY-MM-DD 2010-12-30 2 YYYY-MM-DD HH:MM 2010-12-30 12:10 3 YYYY-MM-DD HH:MM:SS.SSS 2010-12-30 12:10:04.100 4 MM-DD-YYYY HH:MM 30-12-2010 12:10 5 HH:MM 12:10 6 YYYY-MM-DDTHH:MM 2010-12-30 12:10 7 HH:MM:SS 12:10:01 […]
View DetailsSQLite 常用函数
SQLite 有许多内置函数用于处理字符串或数字数据。下面列出了一些有用的 SQLite 内置函数,且所有函数都是大小写不敏感,这意味着您可以使用这些函数的小写形式或大写形式或混合形式。欲了解更多详情,请查看 SQLite 的官方文档: 序号 函数 & 描述 1 SQLite COUNT 函数 SQLite COUNT 聚集函数是用来计算一个数据库表中的行数。 2 SQLite MAX 函数 SQLite MAX 聚合函数允许我们选择某列的最大值。 3 SQLite MIN 函数 SQLite MIN 聚合函数允许我们选择某列的最小值。 4 SQLite AVG 函数 SQLite AVG 聚合函数计算某列的平均值。 5 SQLite SUM 函数 SQLite SUM 聚合函数允许为一个数值列计算总和。 6 SQLite RANDOM 函数 SQLite RANDOM 函数返回一个介于 -9223372036854775808 和 +9223372036854775807 之间的伪随机整数。 7 SQLite ABS 函数 SQLite ABS 函数返回数值参数的绝对值。 8 SQLite UPPER 函数 SQLite UPPER 函数把字符串转换为大写字母。 9 SQLite LOWER 函数 SQLite LOWER 函数把字符串转换为小写字母。 10 SQLite LENGTH 函数 SQLite LENGTH 函数返回字符串的长度。 11 SQLite sqlite_version 函数 […]
View DetailsSQLite 注入
如果您的站点允许用户通过网页输入,并将输入内容插入到 SQLite 数据库中,这个时候您就面临着一个被称为 SQL 注入的安全问题。本章节将向您讲解如何防止这种情况的发生,确保脚本和 SQLite 语句的安全。 注入通常在请求用户输入时发生,比如需要用户输入姓名,但用户却输入了一个 SQLite 语句,而这语句就会在不知不觉中在数据库上运行。 永远不要相信用户提供的数据,所以只处理通过验证的数据,这项规则是通过模式匹配来完成的。在下面的实例中,用户名 username 被限制为字母数字字符或者下划线,长度必须在 8 到 20 个字符之间 – 请根据需要修改这些规则。
1 2 3 4 5 6 |
<span class="kwd">if</span> <span class="pun">(</span><span class="pln">preg_match</span><span class="pun">(</span><span class="str">"/^\w{8,20}$/"</span><span class="pun">,</span><span class="pln"> $_GET</span><span class="pun">[</span><span class="str">'username'</span><span class="pun">],</span><span class="pln"> $matches</span><span class="pun">)){</span><span class="pln"> $db </span><span class="pun">=</span> <span class="kwd">new</span> <span class="typ">SQLiteDatabase</span><span class="pun">(</span><span class="str">'filename'</span><span class="pun">);</span><span class="pln"> $result </span><span class="pun">=</span> <span class="lit">@$db</span><span class="pun">-></span><span class="pln">query</span><span class="pun">(</span><span class="str">"SELECT * FROM users WHERE username=$matches[0]"</span><span class="pun">);</span> <span class="pun">}</span><span class="kwd">else</span><span class="pun">{</span><span class="pln"> echo </span><span class="str">"username not accepted"</span><span class="pun">;</span> <span class="pun">}</span> |
为了演示这个问题,假设考虑此摘录:To demonstrate the problem, consider this excerpt:
1 2 |
<span class="pln">$name </span><span class="pun">=</span> <span class="str">"Qadir'; DELETE FROM users;"</span><span class="pun">;</span> <span class="lit">@$db</span><span class="pun">-></span><span class="pln">query</span><span class="pun">(</span><span class="str">"SELECT * FROM users WHERE username='{$name}'"</span><span class="pun">);</span> |
函数调用是为了从用户表中检索 name 列与用户指定的名称相匹配的记录。正常情况下,$name 只包含字母数字字符或者空格,比如字符串 ilia。但在这里,向 $name 追加了一个全新的查询,这个对数据库的调用将会造成灾难性的问题:注入的 DELETE 查询会删除 users 的所有记录。 虽然已经存在有不允许查询堆叠或在单个函数调用中执行多个查询的数据库接口,如果尝试堆叠查询,则会调用失败,但 SQLite 和 PostgreSQL 里仍进行堆叠查询,即执行在一个字符串中提供的所有查询,这会导致严重的安全问题。 防止 SQL 注入 在脚本语言中,比如 PERL 和 PHP,您可以巧妙地处理所有的转义字符。编程语言 PHP 提供了字符串函数 sqlite_escape_string() 来转义对于 SQLite 来说比较特殊的输入字符。
1 2 3 4 5 |
<span class="kwd">if</span> <span class="pun">(</span><span class="pln">get_magic_quotes_gpc</span><span class="pun">())</span> <span class="pun">{</span><span class="pln"> $name </span><span class="pun">=</span><span class="pln"> sqlite_escape_string</span><span class="pun">(</span><span class="pln">$name</span><span class="pun">);</span> <span class="pun">}</span><span class="pln"> $result </span><span class="pun">=</span> <span class="lit">@$db</span><span class="pun">-></span><span class="pln">query</span><span class="pun">(</span><span class="str">"SELECT * FROM users WHERE username='{$name}'"</span><span class="pun">);</span> |
虽然编码使得插入数据变得安全,但是它会呈现简单的文本比较,在查询中,对于包含二进制数据的列,LIKE 子句是不可用的。 请注意,addslashes() 不应该被用在 SQLite 查询中引用字符串,它会在检索数据时导致奇怪的结果。 from:http://www.runoob.com/sqlite/sqlite-injection.html
View DetailsSQLite Autoincrement(自动递增)
SQLite 的 AUTOINCREMENT 是一个关键字,用于表中的字段值自动递增。我们可以在创建表时在特定的列名称上使用 AUTOINCREMENT 关键字实现该字段值的自动增加。 关键字 AUTOINCREMENT 只能用于整型(INTEGER)字段。 语法 AUTOINCREMENT 关键字的基本用法如下:
1 2 3 4 5 6 7 |
<span class="pln">CREATE TABLE table_name</span><span class="pun">(</span><span class="pln"> column1 INTEGER AUTOINCREMENT</span><span class="pun">,</span><span class="pln"> column2 datatype</span><span class="pun">,</span><span class="pln"> column3 datatype</span><span class="pun">,</span> <span class="pun">.....</span><span class="pln"> columnN datatype</span><span class="pun">,</span> <span class="pun">);</span> |
实例 假设要创建的 COMPANY 表如下所示:
1 2 3 4 5 6 7 |
<span class="pln">sqlite</span><span class="pun">></span><span class="pln"> CREATE TABLE COMPANY</span><span class="pun">(</span><span class="pln"> ID INTEGER PRIMARY KEY AUTOINCREMENT</span><span class="pun">,</span><span class="pln"> NAME TEXT NOT NULL</span><span class="pun">,</span><span class="pln"> AGE INT NOT NULL</span><span class="pun">,</span><span class="pln"> ADDRESS CHAR</span><span class="pun">(</span><span class="lit">50</span><span class="pun">),</span><span class="pln"> SALARY REAL </span><span class="pun">);</span> |
现在,向 COMPANY 表插入以下记录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span class="pln">INSERT INTO COMPANY </span><span class="pun">(</span><span class="pln">NAME</span><span class="pun">,</span><span class="pln">AGE</span><span class="pun">,</span><span class="pln">ADDRESS</span><span class="pun">,</span><span class="pln">SALARY</span><span class="pun">)</span><span class="pln"> VALUES </span><span class="pun">(</span> <span class="str">'Paul'</span><span class="pun">,</span> <span class="lit">32</span><span class="pun">,</span> <span class="str">'California'</span><span class="pun">,</span> <span class="lit">20000.00</span> <span class="pun">);</span><span class="pln"> INSERT INTO COMPANY </span><span class="pun">(</span><span class="pln">NAME</span><span class="pun">,</span><span class="pln">AGE</span><span class="pun">,</span><span class="pln">ADDRESS</span><span class="pun">,</span><span class="pln">SALARY</span><span class="pun">)</span><span class="pln"> VALUES </span><span class="pun">(</span><span class="str">'Allen'</span><span class="pun">,</span> <span class="lit">25</span><span class="pun">,</span> <span class="str">'Texas'</span><span class="pun">,</span> <span class="lit">15000.00</span> <span class="pun">);</span><span class="pln"> INSERT INTO COMPANY </span><span class="pun">(</span><span class="pln">NAME</span><span class="pun">,</span><span class="pln">AGE</span><span class="pun">,</span><span class="pln">ADDRESS</span><span class="pun">,</span><span class="pln">SALARY</span><span class="pun">)</span><span class="pln"> VALUES </span><span class="pun">(</span><span class="str">'Teddy'</span><span class="pun">,</span> <span class="lit">23</span><span class="pun">,</span> <span class="str">'Norway'</span><span class="pun">,</span> <span class="lit">20000.00</span> <span class="pun">);</span><span class="pln"> INSERT INTO COMPANY </span><span class="pun">(</span><span class="pln">NAME</span><span class="pun">,</span><span class="pln">AGE</span><span class="pun">,</span><span class="pln">ADDRESS</span><span class="pun">,</span><span class="pln">SALARY</span><span class="pun">)</span><span class="pln"> VALUES </span><span class="pun">(</span> <span class="str">'Mark'</span><span class="pun">,</span> <span class="lit">25</span><span class="pun">,</span> <span class="str">'Rich-Mond '</span><span class="pun">,</span> <span class="lit">65000.00</span> <span class="pun">);</span><span class="pln"> INSERT INTO COMPANY </span><span class="pun">(</span><span class="pln">NAME</span><span class="pun">,</span><span class="pln">AGE</span><span class="pun">,</span><span class="pln">ADDRESS</span><span class="pun">,</span><span class="pln">SALARY</span><span class="pun">)</span><span class="pln"> VALUES </span><span class="pun">(</span> <span class="str">'David'</span><span class="pun">,</span> <span class="lit">27</span><span class="pun">,</span> <span class="str">'Texas'</span><span class="pun">,</span> <span class="lit">85000.00</span> <span class="pun">);</span><span class="pln"> INSERT INTO COMPANY </span><span class="pun">(</span><span class="pln">NAME</span><span class="pun">,</span><span class="pln">AGE</span><span class="pun">,</span><span class="pln">ADDRESS</span><span class="pun">,</span><span class="pln">SALARY</span><span class="pun">)</span><span class="pln"> VALUES </span><span class="pun">(</span> <span class="str">'Kim'</span><span class="pun">,</span> <span class="lit">22</span><span class="pun">,</span> <span class="str">'South-Hall'</span><span class="pun">,</span> <span class="lit">45000.00</span> <span class="pun">);</span><span class="pln"> INSERT INTO COMPANY </span><span class="pun">(</span><span class="pln">NAME</span><span class="pun">,</span><span class="pln">AGE</span><span class="pun">,</span><span class="pln">ADDRESS</span><span class="pun">,</span><span class="pln">SALARY</span><span class="pun">)</span><span class="pln"> VALUES </span><span class="pun">(</span> <span class="str">'James'</span><span class="pun">,</span> <span class="lit">24</span><span class="pun">,</span> <span class="str">'Houston'</span><span class="pun">,</span> <span class="lit">10000.00</span> <span class="pun">);</span> |
这将向 COMPANY 表插入 7 个元组,此时 COMPANY 表的记录如下:
1 2 3 4 5 6 7 8 9 |
<span class="pln">ID NAME AGE ADDRESS SALARY </span><span class="pun">----------</span> <span class="pun">----------</span> <span class="pun">----------</span> <span class="pun">----------</span> <span class="pun">----------</span> <span class="lit">1</span> <span class="typ">Paul</span> <span class="lit">32</span> <span class="typ">California</span> <span class="lit">20000.0</span> <span class="lit">2</span> <span class="typ">Allen</span> <span class="lit">25</span> <span class="typ">Texas</span> <span class="lit">15000.0</span> <span class="lit">3</span> <span class="typ">Teddy</span> <span class="lit">23</span> <span class="typ">Norway</span> <span class="lit">20000.0</span> <span class="lit">4</span> <span class="typ">Mark</span> <span class="lit">25</span> <span class="typ">Rich</span><span class="pun">-</span><span class="typ">Mond</span> <span class="lit">65000.0</span> <span class="lit">5</span> <span class="typ">David</span> <span class="lit">27</span> <span class="typ">Texas</span> <span class="lit">85000.0</span> <span class="lit">6</span> <span class="typ">Kim</span> <span class="lit">22</span> <span class="typ">South</span><span class="pun">-</span><span class="typ">Hall</span> <span class="lit">45000.0</span> <span class="lit">7</span> <span class="typ">James</span> <span class="lit">24</span> <span class="typ">Houston</span> <span class="lit">10000.0</span> |
from:http://www.runoob.com/sqlite/sqlite-autoincrement.html
View Details