赞
踩
最近开始接触后端开发,原本在Python跟Java之间徘徊,之所以不选择其他语言,主要是这两个语言都有点基础,尤其是Java用了几年,用起来个跟顺手些,虽然Java也一年多没用了,不过接触几天之后,感觉就又都回来了。
这篇文章做科普是一个目的,当然最重要的,是为自己做个存档,因为现在所有的环境搭建,日后自己都会再搭建一次(电脑会换,云服务器也只买了一年),其中踩了不少坑,所以做个记录,方便他人更方便自己!
为什么会选择IntelliJ IDEA,因为好用!
前几年Java开发基本用的都是Eclipse(大学学的时候用的就是Eclipse),后面做android开发又用了as,体验就是AS比eclipse好用太多(当然也不排除我喜新厌旧的风格~),这次用的idea也是同样好用,就跟他的名字一样,智能!
首先配置Java环境,可以终端输入java --version查看java版本
如果java下载配置,可以参考这篇文章
https://www.jianshu.com/p/fe6b68295479
再下载idea
https://www.jetbrains.com/idea/download/#section=mac
下载之后安装,完成
下面分两部分分别来说下怎么配置tomcat跟mysql,本地跟云服务器
tomcat安装可以参考这篇文章,很简单,没什么能遇到的坑
https://www.jianshu.com/p/db08d23049ce
mysql安装可以参考下面文章,在配合可视化工具使用时候使用有一个坑,后面会说
https://www.jianshu.com/p/07a9826898c0
安装完成之后,配上可视化工具使用将会方便很多,尤其在早期调试,增删改查数据时候,也会一目了然
在这边推荐一个工具Navicat Premium,下面是我当初的下载地方
百度云:https://pan.baidu.com/s/1bcJVyIvFneiEoMZPU-oIbA#list/path=/密码: qps3
安装打开之后,点击左上角的Connection,输入本地配置,如下
链接之后,可能会遇到这个问题
2059 - Authentication plugin ‘caching_sha2_password’ cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found
后来查了下,是最新版本的mysql不支持root直接登录,需要额外设置下,如下
解决办法:
1:命令行键入数据库:
mysql -uroot -p
2:键入密码后,执行:
ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY '密码';
密码更改为自己数据库的密码;
然后就可以自己登录配置了,顺便说下,Navicat Premium还可以登录远程的mysql,后面的云服务器配置好了之后也可以用它来登录,如下
接下来说怎么配置云服务器的tomcat跟mysql
首先,需要介绍一个工具:Yummy FTP
这软件可以帮你把本地的文件上传到云服务器,虽然云服务器里面也可以下,不过本地下网速更快,毕竟云服务器宽带高的费用也高。
首先,也是要配置java环境,其中jdk我选的是rpm安装包,gzip安装包一直下不下来,停留在99.9%。
https://www.cnblogs.com/yjhkhnuje/p/9975307.html
tomcat安装可以参考
https://www.jianshu.com/p/6a9fa018b506
mysql安装可以参考
https://www.cnblogs.com/dadadechengzi/p/6723686.html?tdsourcetag=s_pcqq_aiomsg
mysql的安装我饶了很多弯,网上的几个火的教程都有点问题。这篇我照着做下来没啥问题,所以推荐!
记得要在云服务器防火墙打开8080(tomcat)跟3306(mysql)端口,然后用浏览器测试下tomcat链接情况跟用Navicat Premium测试下mysql远程登录看下就差不多了。
下面来说本地环境怎么配合运行简单的接口
下面会写一个简单的例子,测试一下数据库增删改查,模拟用户注册,登录,修改用户信息等功能。
1,首先新建一个web工程,如下
2,在web的WEB-INF的目录下创建classes和lib目录
3,将classes目录作为输出目录,将lib作为Dependencies的目录,如下图
4,导入数据链接库,这里用的是c3p0和dbutils进行数据库链接
下载地址:https://pan.baidu.com/s/184HFVJCcNisitRFEya4ngw 提取码: 6tpe
5,在src根目录下创建c3p0-config.xml文件,进行数据库配置
- <c3p0-config>
- <!-- 默认配置,c3p0框架默认加载这段默认配置 -->
- <default-config>
- <!-- 配置JDBC 四个基本属性 -->
- <property name="driverClass">com.mysql.jdbc.Driver</property>
- <property name="jdbcUrl">jdbc:mysql://localhost:3306/fistTestDatabase</property>
- <property name="user">root</property>
- <property name="password">test123</property>
- </default-config> <!-- This app is massive! -->
- </c3p0-config>
目录结构如下:
6,在src目录下创建servlet目录并创建UserLogin继承HttpServlet,测试代码如下
- import model.UserBean;
- import org.apache.commons.dbutils.QueryRunner;
- import org.apache.commons.dbutils.handlers.BeanHandler;
- import utils.JDBCUtils;
- import utils.UserDBUtils;
-
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.sql.SQLException;
-
- public class UserLogin extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- // super.doGet(req, resp);
- String account = req.getParameter("account");
- String password = req.getParameter("password");
- System.out.println("account:" + account + "\npassword:" + password); // 打印出来看一看
- String result = "数据库读取异常!";
- if (account.isEmpty()){
- result = "用户名不能为空!";
- }else if (password.isEmpty()){
- result = "密码不能为空!";
- }else{
- QueryRunner runner = new QueryRunner(JDBCUtils.getDataSource());
- try {
- UserBean userBean = UserDBUtils.userLogin(runner,account,new BeanHandler<UserBean>(UserBean.class));
- System.out.println(userBean);
- if (userBean == null) {
- result = "用户不存在";
- }else{
- if (account.equals(userBean.getUserName()) && password.equals(userBean.getUserPwd())){
- result = account+"登录成功!";
- }else {
- result = "密码错误!";
- }
- }
-
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
- resp.setContentType("text/html;charset=utf-8"); // 设置响应报文的编码格式
- PrintWriter pw = resp.getWriter(); // 获取 response 的输出流
- pw.println(result); // 通过输出流把业务逻辑的结果输出
- pw.flush();
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- // super.doPost(req, resp);
- doGet(req,resp);
- }
- }

7,编辑web/WEB-INF/web.xml文件,将UserLogin进行注册
<servlet> <servlet-name>userLogin</servlet-name> <servlet-class>servlet.UserLogin</servlet-class> </servlet>
<servlet-mapping> <servlet-name>userLogin</servlet-name> <url-pattern>/userLogin</url-pattern> </servlet-mapping>
8,打开Navicat Premium,建立一个表,写入一条用户登录数据
9,一条可以登录的请求就这样诞生了,用postman或者浏览器,直接请求,如下
http://localhost:8080/testServlet_2/userLogin?account=pppp&password=1233&phoneNum=1580523134
请求结果如下
截图上方是请求,下方是日志
测试完整代码已经上传到github:https://github.com/wocalage/ServletDemo
首先我们把项目打包成war格式
1,如下配置好artifacts,要确保库都被引用到里面了,如下
点击OK
2,编译成artifacts,如下图
选择build artifacts
3,编译完成后,有个war文件,在out文件夹中,如下图
这个war文件就是打包后的可部署的文件
通过Yummy FTP将war包上传到云服务器上,放到Tomcat目录webapps中,重启tomcat就行了!
启动tomcat之后,直接ip:8080无法访问,请求也请求不了,这时候大概率是无头绪的,如果在本地,有日志输出可以调试查看原因,如果在云服务器怎么办呢?
也是有办法的,进入到tomcat的log目录,如下
输入命令
tail -f catalina.out
就能查看实时日志信息了!
错误信息我忘记截图,内容大概是
这个问题主要的原因是内存不足,具体解决办法是进入到tomcat的bin目录,打开catalina.sh文件
在最上面加上下面这行
JAVA_OPTS="-Xms512m -Xmx1024m -Xss2048K -XX:PermSize=256m -XX:MaxPermSize=512m"
如下:
在我接入过程中,因为jdk的版本问题,也遇到了一点麻烦,具体表现为
本机jdk版本是11,云服务器上一开始安装的是jdk8,遇到了云服务器无法运行本地编译出来war包的问题。
后来将云服务器上改为了12,又遇到一个没生效的问题,纠结了很久,最后发现还是之前安装8残留的jre路径不对,导致tomcat还是使用之前的jre来运行,但是由于之前的jre没有了,所以用了缺省的
顺便说下,jdk11以上就没有jre的文件夹了,在tomcat里面设置jdk文件夹就行。
在看tomcat日志的时候,发现一个问题,具体如下
首先,看下hostname,再ping下hostname,如下
可知,是由于无法解析hostname导致的。
编辑下/etc/hosts文件
加入ip hostname就行
如:
10.2.100.5 vm10-0-0-9
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。