Liunx安装java+tomcat并访问数据库+部署到web

安装jdk

这里安装的是java14。其他版本可以用yum search openjdk查询。

//yum自动安装,配置jdk,很舒服。
yum install -y java-latest-openjdk-devel

如何编译java

目录结构如下
目录结构

1.编译

在java-s目录下

javac -d xxx/bin xxx/src/com/test/Hello.java

-d表示编译之后的.class文件存放位置
后面接.java文件

2.运行

java -cp xxx/bin com.test.Hello

-cp表示类路径,也就是.class文件存在的位置,注意是com的父目录。
后面接全限定类名(不用加.java或者.class,不然报错)

安装tomcat

注:由于利用yum安装tomcat会覆盖之前的jdk版本,所以采用手动安装。
踩坑效果如下 :
我用了之后又把tomcat和java卸载,重新安装,太麻烦了

#利用yum安装
yum install -y tomcat
#再安装两个插件包
yum install tomcat-webapps tomcat-admin-webapps

在这里插入图片描述

手动安装tomcat

这里安装的是tomcat9,需要其他版本可以去tomcat官网

#利用wget
wget https://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.34/bin/apache-tomcat-9.0.34.tar.gz
#移动文件
mv apache-tomcat-9.0.34 /usr/local 

如何查看JAVA_HOME

可以查看如下两个链接
如何查看JAVA_HOME
环境变量介绍

扫描二维码关注公众号,回复: 11486431 查看本文章

我这里的JAVA_HOME是
/usr/lib/jvm/java-14-openjdk-14.0.0.36-3.rolling.el7.x86_64
把它加入到环境变量中

echo "JAVA_HOME:/usr/lib/jvm/java-14-openjdk-14.0.0.36-3.rolling.el7.x86_64" >> /etc/environment
#使文件生效
source /etc/environment
#可利用echo $JAVA_HOME查看
echo $JAVA_HOME

同理,添加TOMCAT_HOME和CATALINA_HOME

echo "TOMCAT_HOME:/usr/local/apache-tomcat-9.0.34" >> /etc/environment
echo "CATALINA_HOME:/usr/local/apache-tomcat-9.0.34" >> /etc/environment

tomcat启动太慢问题

可以如下链接
tomcat启动太慢问题

现象:./startup tomcat的8005端口很慢才起来,如果这个端口不起来,会无法访问tomcat8080端口,而且也无法shutdown

分析:查看$TOMCAT_HOME/los/catalina文件,可以看到tomcat计算随机数的时候阻塞了

#解决:用find 找到java.security文件
find / -name java.security
vim /usr/lib/jvm/java-14-openjdk-14.0.0.36-3.rolling.el7.x86_64/conf/security/java.security
#修改
securerandom.source=file:/dev/./urandom
#强制关闭tomcat
killall java
#重新启动tomcat即可

在MySQL中创建数据库和表

创建数据库book_library

创建表book

create table book(
	book_id int auto_increment,
	title varchar(20),
	author varchar(20),
	publisher varchar(20),
	price int,
	primary key (book_id)
);

创建表失败

【Navicat报错】2003 - Can’t connect to MySQL server on … (10061 “Unknown error”)
后面,我尝试在mysql服务器上直接创建表,但是还是报错
Can't connect to MySQL server on
【mysql报错】ERROR 2013 (HY000): Lost connection to MySQL server during query
这个错误,查看日志文件得知,是由于之前删除了ibdata和ib_logfile导致数据库数据和日志的不一致性所导致的。尝试过各种办法,但最终放弃。
选择重新安装mysql
可以先备份数据库的记录。
删除datadir:/data/mysql目录

rm -rf /data/mysql
mkdir -p /data/mysql
cd /usr/local/mysql/bin
#重新初始化mysql
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize

接着就正常了,表也可以正常创建了

部署WEB项目到tomcat

tomcat目录结构

如下图,蓝色的为目录
tomcat目录结构
book为项目目录:
jsp存放.jsp文件
src存放.java源文件。源码可以不用放上tomcat,只需要放.class文件就好了
index.html为普通的页面

WEB-INF存放web项目私有属性,外部不可访问
classes存放.java文件编译之后的.class文件
lib存放项目需要用到的第三方包。这里我放了servlet-api和mysql-driver
web.xml为web项目配置文件

编译java文件

cd $TOMCAT_HOME/webapps/book

.java文件如下:
java
.jsp文件如下:
jsp

编译.java,并放到classes文件夹中
javac -cp WEB-INF/lib/servlet-api.jar -d WEB-INF/classes src/com/beans/BookBean.java src/com/beans/BookDAO.java src/com/control/BookInsertServlet.java src/com/control/BookQueryServlet.java src/com/util/JdbcConnectionUtil.java

ps:部分代码见附录

编译过后记得需要重新启动tomcat
之后在浏览器就可以访问了
ip:8080/book/xxxx

如何debug

如果需要debug,可以查看日志文件
$TOMCAT_HOME/logs/catalina.out该文件相当于保存了控制台输出

JSP生成的java和class文件存放在哪里

jsp文件不需要手动编译,在浏览器访问的时候,由容器生成name_jsp.java文件,再生成name_jsp.class文件,存放在
$TOMCAT_HOME/work/Catalina/localhost/项目名/org/apache/jsp/项目目录/
文件夹下

部署到nginx

nginx反向代理1
nginx反向代理2

修改nginx.conf配置文件

location ~\.jsp$ {
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_set_header Host            $http_host;
   proxy_pass   http://127.0.0.1:8080/book/jsp$request_uri;
}   

一些其他问题

同步linux的时间

利用ntpdate
yum install -y ntpdate

ntp常用服务器
中国国家授时中心:210.72.145.44
NTP服务器(上海) :ntp.api.bz
美国:time.nist.gov
复旦:ntp.fudan.edu.cn
微软公司授时主机(美国) :time.windows.com
台警大授时中心(台湾):asia.pool.ntp.org

例如:
ntpdate -u ntp.api.bz
ntpdate -u 210.72.145.44

附录

all.jsp

<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page import="com.beans.BookBean" %>
<%@ page import="com.beans.BookDAO" %>

<html>
<body>
	<p>这个是用tomcat+jsp实现的页面</p>
	<table width=\"500\" border=\"1\">
	<tr>
	<th width=\"100\">书号</th>
	<th width=\"100\">书名</th>
	<th width=\"100\">作者</th>
	<th width=\"100\">出版社</th>
	<th width=\"100\">价格</th>
	</tr>
	<%
			BookBean[] books = new BookDAO().findAll();
       		for(BookBean book:books){
			if(book == null){
				break;
			}
    	   		out.println("<tr>"+"<td>"+book.getBookid()+"</td>");
    	   		out.println("<td>"+book.getTitle()+"</td>");
    	    	out.println("<td>"+book.getAuthor()+"</td>");
    	   		out.println("<td>"+book.getPublisher()+"</td>");
    	    	out.println("<td>"+book.getPrice()+"</td>");
    	    	out.println("</tr>");
      		 }
	%>	
</body>
</html>

JdbcConnectionUtil.java

package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcConnectionUtil {
	public static Connection getConnection() {
	    String driver = "com.mysql.cj.jdbc.Driver";
	    String url = "jdbc:mysql://ip:3306/database?serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true";
	    String username = "root";
	    String password = "root";
	    Connection conn = null;
	    try {
	        Class.forName(driver); //classLoader,加载对应驱动
	        System.out.println("load driver success!");
	        conn = (Connection) DriverManager.getConnection(url, username, password);
	        System.out.println("get connection success!");
	    } catch (ClassNotFoundException e) {
	    	e.toString();
	        e.printStackTrace();
	    } catch (SQLException e) {
	    	e.toString();
	        e.printStackTrace();
	    }
	    if(conn==null) {
	    	System.out.println("get connection fail!");
	    }
	    return conn;
	}
}

BookBean.java

package com.beans;
import java.io.*;
public class BookBean implements Serializable {
	private static final long serialVersionUID = 1L;
	private Integer bookid = null;
	private String title = null;
	private String author = null;
	private String publisher = null;
	private Double price = null;

	/*省略构造方法*/
	/*省略getter、setter*/
}

BookDAO.java

package com.beans;
import java.sql.*;
import com.beans.BookBean;
import com.util.JdbcConnectionUtil;
public class BookDAO {
	public BookBean[] findAll() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rst = null;
		//数组大小可以设置,我这里的记录不超过100条
		BookBean[] books = new BookBean[100];
		BookBean book = null;
		try {
			conn = JdbcConnectionUtil.getConnection();
			pstmt = conn.prepareStatement("SELECT * FROM book");
			System.out.println(pstmt);
			rst = pstmt.executeQuery();
			int count = 0;
			while(rst.next()) {
				book = new BookBean();
				book.setBookid(rst.getInt("book_id"));
				book.setTitle(rst.getString("title"));
				book.setAuthor(rst.getString("author"));
				book.setPublisher(rst.getString("publisher"));
				book.setPrice(rst.getDouble("price"));
				books[count++] = book;
			}
			conn.close();
			return books;
		} catch (SQLException se) {
			System.out.println(se.toString());
			return null;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/LittleSeedling/article/details/105868675