首页 > 编程语言 >Java学习笔记

Java学习笔记

时间:2023-05-16 14:22:37浏览次数:53  
标签:Java tomcat Tomcat 笔记 方框 学习 java 我们

一、JAVA发展简史

1. JAVA的诞生

​ 在1991年时候,詹姆斯·高斯林(James Gosling)在SUN公司的工程师小组想要设计这样一种小型计算机语言。该语言主要用于像电视盒这样的消费类电子产品。

2.JAVA的发展史

1991年,Sun公司的Green项目(Oak语言)
1995年,推出JAVA测试版
1996年,JDK1.0
1997年,JDK1.1
1998年,JDK1.2,大大改进了早期版本的缺陷,是一个革命性的版本,更名为Java2
1999 Java被分成J2SE、J2EE 和J2ME,JSP/Servlet技术诞生
2004年,J2SE 5.0 (1.5.0) Tiger老虎。为了表示这个版本的重要性,J2SE1.5更名为J2SE5.0。
2006年,J2SE 6.0 (1.6.0) Mustang野马。此时,Java的各种版本被更名,取消其中的数字"2":J2EE更名为Java EE, J2SE更名为Java SE,J2ME更名为Java ME
2011年,JAVA7.0
2014年,JAVA8.0

3.JAVA的特点

跨平台、简单、安全、健壮、完全面向对象、....
在这里我们随便列举几个即可

Java跨平台的原理:

Java程序的跨平台主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。

为什么说Java简单:

不再有#include 和#define 等预处理功能
不再有struct、union及typedef
不再有函数、
不再有指针、不再有多重继承
不再有goto

不再有操作符重载(Operatior Overloading)
不再有全局变量

不再有手动内存管理
安全:

Java取消了强大但又危险的指针。由于指针可进行移动运算,指针可随便指向一个内存区域,而不管这个区域是否可用,这样做是危险的,因为原来这个内存地址可能存储着重要数据或者是其他程序运行所占用的, 并且使用指针也容易数组越界。
Java提供了自动内存管理机制,由垃圾回收器在后台自动回收。
Java在字节码的传输过程中使用了公开密钥加密机制(PKC)。
而在运行环境提供了四级安全性保障机制:节码校验器 - 类装载器 - 运行时内存布局 - 文件访问限制。
健壮:

Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)

完全面向对象的

​ Java和C++都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继承,多态)

Java则是完全的面向对象语言,它句法更清晰,规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的基础上,据弃了其他语言的不足之处,从根本上解决了C++的固有缺陷。

4.JVM虚拟机

JVM(JAVA VIRTUAL MACHINE)是一种规范,可以使用软件来实现,也可以使用硬件来实现,就是一个虚拟的用于执行bytecodes字节码的计算机。他也定义了指令集、寄存器集、结构栈、垃圾收集堆、内存区域。

JVM是指在一台计算机上由软件或硬件模拟的计算机,它类似一个小巧而高效的CPU。

Java虚拟机是Java最核心技术,也是跨平台的基础。

5.JVM和JAVA跨平台特性

计算机的高级编程语言类型一般为: 编译型和解释型。而Java语言是两种类型的结合。

编译型语言:翻译把整篇英文文章翻译为中文,然后我再去阅读。

优点:阅读效率高。

缺点:需要等待翻译完毕。

解释型语言:翻译坐在我旁边,给我逐行的翻译英文文章。

优点:无需等待,直接就可以阅读。

缺点:阅读效率低。

常见java程序的编写和执行步骤为:

1、通过编辑器编写 Java源程序源文件(源文件名.java).

2、通过编译器将源程序编译成字节码文件(类名.class)。

3、通过解释器将字节码文件解释为对应的机器语言并运行(在JVM中运行字节码文件)。

6.JAVA开发环境搭建

1.JRE简介

​ JRE是Java Runtime Environment的缩写,是Java程序的运行环境,包含了java虚拟机,java基础类库。

JRE是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。

2.JDK简介

JDK是Java Development Kit的缩写,是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。

JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具。

3.配置JAVA开发环境

卸载JDK:根据需求再决定是否需要卸载,如果已经正确安装JDK的你可以略过安装步骤。

安装JDK:

首先我们需要当官网去下载JDK

下载:地址:Oracle Java Technologies | Oracle

安装:和安装的步骤跟我们正常安装软件一样.一路点击下一步就即可

环境变量配置:

安装好之后,开始配置环境变量:

1、右击计算机→属性→高级系统设置→切换到“高级”选项卡→环境变量

img

2、系统变量→新建 JAVA_HOME 变量 。变量值填写jdk的安装目录

img

3、系统变量→新建 CLASSPATH 变量,变量值填写 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点,最后的一个点是英文状态下输入的)

img

配置完毕之后,测试下

按住Win+R弹出命令窗口输入cmd回车,输入命令:java -version 回车

出现如下图所示,则配置成功:

image-20230416200453689

二、开发第一个JAVA程序

上面的步骤都搞定了,现在在C盘新建一个记事本,命名HelloWorld.txt,然后写入以下代码,然后保存关闭,把扩展名 改为java

注意:文件的扩展名,保证扩展名必须为.java(例如:HelloWorld.java)

隐藏文件扩展名步骤:

进入控制面板 > 文件夹选项 > 查看 不勾选【隐藏已知文件类型的扩展名】
img

首先,点开您的IDEA开发工具,它长这个样子

img

点击它(打开IDEA开发工具),随后就会出现这个画面:

img

左边红色边框的是以前创建过的项目(现在不用管,新手这里一般是没有任何东西的,黑乎乎一片),我们要关注的是右边红色小方框这(创建新项目),点击它:

img

随后就会出现以下这种画面,我们先点击红色方框1(Java),然后在红色方框2那选择JDK的版本,选好后,我们就可以点击方框3(下一步):

img

随后就会出现以下画面,这一步,我们不用管,直接点击这个画面的红色方框那(下一步)

img

之后就会出现以下画面,这个画面比较重要,1号红色方框那是我们创建这个项目的项目名称,

我们给它取一个好听点的名字吧(你们自行定义)。

注意取名字要取英文的哦,不要取个中文的名字

2号方框那的是我们这个项目的储存位置,下面它表示的意思是这个项目将储存在:

C盘的Users文件夹中的子文件夹YYY中的子文件夹Desktop子文件夹中的。

Desktop后面连接是(你们给项目取的名字)的文件夹。

当然,我们可以自行决定这个项目的储存位置(这个位置是可以自己选择的)

当我们完成这些操作后,我们就可以点击(下一步)了。
img

然后左边就会出现1号红色方框里的东西。

需要注意的是由于我给我的项目取名字叫做test,所以1号红色方框里面的2号红色小方框就会显出

test文件夹,你们显示的是你们给项目取的名字的文件夹。

然后我们就点击test文件夹左边的那个三角形,然后点击src这个蓝蓝的文件夹(这里要用到鼠标右键去点击),弹出操作src文件夹的有关目录,然后我们就去点击3号红色小方框(新建),最后点击4号红色小方框(包)。
img

随后就会出现以下这个框框,我们要在Name这里给包取一个好听的名字(不好听也行,相信IDEA不会介意的)。

注意,名字要英文的哦,不要取中文的名字

img

我给包取得名字叫做test_Java,也就是1号红色小方框这个位置。

需要注意:你们在1号红色小方框这里显示的是(你们给包取的名字)。

随后我们鼠标右键(记得是右键,不是左键)点击1号红色小方框这里,然后点击2号红色小方框(新建),最后点击3号红色小方框这(Java类),创建一个Java类

特别注意,需要先创建包,再创建类哦,如果不创建包再创建类,会出错的。
img

然后就会出现大红色方框这个画面,默认选择Class选项,我们不要动,我们这里只需要给这个类,取一个名字,我这里给它取了一个叫Test_Java的名字,你们可以根据自己的意愿取一个名字(名字要英文的哦,不要取中文的名字)。

img

随后就会出现1和2红色方框的东西。

1号红色小方框的东西代表着这个类,名字叫(你们给这个类取的名字)。

2号红色大方框里的package 你们给包取得名字。代表你这个类来自于(你们给包取得名字)这个包。

public代表这个类是公开的(了解以下即可)

class是一个表明类的关键字

class后面是(你们给这个类取的名字)

然后我们就在2号红色大方框中的{}括号内,输出psvm(自动生成public static void main(String[] args){}),或者手写public static void main(String[] args){}
img

然后我们就在2号红色大方框中的{}括号内,输出psvm(自动生成public static void main(String[] args){}),或者手写public static void main(String[] args){},就会出现以下红色小方框的东西

img

我们需要在public static void main(String[] args){}中的{}括号内输入System.out.println("您好,Java");

特别注意("")双引号必须是英文的双引号,(;)分号必须是英文的分号,千万别输错

img

输入完毕后,我们就点击绿色三角形(用鼠标左键点击哦),两个红色小方框,随便选一个点击就行,然后点击运行。

img

img

Tomcat

Tomcat 就是一个 HTTP 服务器…

我们知道 HTTP协议就是客户端 和 服务器之间的交互数据的格式,可以用ajax 和 Java Socket 分别来构造 HTTP 客户端,这个Tomcat 就是基于Java的,有了他之后,他按照 HTTP 协议格式来解析请求,在调用用户指定的代码,并且按照 HTTP 响应的格式来构造返回数据,就可以让别人也来访问你的网页了

下载Tomcat教程

在官网下载即可:
在这里插入图片描述在这里插入图片描述

到这里就下载安装完成了

官网链接:tomcat官网

tomcat的一些文件结构

在这里插入图片描述

补充:
正因为,一个 Tomcat上面可以同时部署多个 Servlet 程序,所以,也可以把 Tomcat 称为"Servlet 的容器",简称"容器"
所以在计算机圈子,我们经常会看到容器(Container)这个概念,到处都在用
容器1:Java的集合类 => C++ 他们就称为 容器,然后一些Java程序员也跟着把 集合类 叫做容器
容器2:Tomcat 是 Servlet 的容器,一个 Tomcat上面可以承载多个 webapp
容器3:Spring 可以管理很多个 Bean 对象,Spring也可以称为 Bean 的容器
容器4:Docker 也是涉及到 容器的概念,Docker 可以认为是轻量级的虚拟机(软件模拟出的一个计算机),一个docker程序里,可以有多个"轻量虚拟机",每个轻量虚拟机里面又可以包含很多程序,就把这个轻量虚拟机称为容器,进一步也把 docker 称为容器了…
… … … …
所以,以后如果听到容器这个词的时候,一定要仔细琢磨琢磨,分析分析,当前的这个"容器"到底是啥,千万不要把这些容器搞混了,驴唇不对马嘴就尴尬了

启动Tomcat

打开 bin > 双击startup.bat(windows)
在这里插入图片描述

有了这个说明成功启动了
在这里插入图片描述
在这里插入图片描述

启动失败的一些原因

1:出现闪退:环境变量的问题

Tomcat 要想成功运行,他就得找到 JDK!!,这就要需要你成功安装JDK,配置好环境变量,这是我之前配置好的环境变量
在这里插入图片描述

Tomcat得找到JDK这个位置,才能去调用

还是不行,不知道哪出问题了?我们可以这样来做
我们需要看到报错提示,把startup.bat直接拖到cmd,观察报错信息
在这里插入图片描述

会出现这些,这些是我已经配好了
在这里插入图片描述
如果这里的一组环境变量,某个有问题,他就会告诉你,是谁有问题,可能有些还不行,一直重复这个步骤,查看原因…

一般没配好的,会提示:
在这里插入图片描述

根据他提示的在环境变量中新建:把你的路径填进去

在这里插入图片描述

2:出现闪退:端口号被占用
Tomcat 是 一个 HTTP 服务器,启动的时候是要绑定端口的,一般他是绑定两个端口号:8080 , 8005,如果这个端口号已经被其他程序占用了,此时你在启动新的肯定是会失败的,就是说你已经启动了一个Tomcat,前一个没关,在启动一个新的,肯定会失败.
也有可能是电脑上有别的程序占用了8080 / 8005,这个时候如果你启动Tomcat,也是会失败的,查看端口:在cmd输入:netstat -an | findstr 8080
在这里插入图片描述
有的话就把这个被占用端口的进程干掉在启动tomcat

使用Tomcat

我们把 Tomcat启动之后,就可以通过浏览器来访问 Tomcat 了…
在浏览器输入:127.0.0.1:8080,会出现tomcat欢迎界面
在这里插入图片描述

针对可能出现 500 状态码的解决方案

注意这里可能有的小伙伴会发现,明明可以启动成功,为啥访问不了出现了 404 或 500 这样的的状态码,除了上述端口被占用了以外(我们可以修改端口,或者关闭被占用端口的进程),出现 500 的状态码其实是最好解决的,因为他已经告诉了你原因,我们可能是文件夹权限的问题
在这里插入图片描述
解决办法:
在这里插入图片描述

部署页面

我们可以根据此路径下新建一个html文件
在这里插入图片描述

启动tomcat并在网页打开他
在这里插入图片描述

就可以显示出我们的内容,这个用tomcat来访问的是可以让别人也来访问你的页面的(前提是你们处在同一局域网或者你有一个服务器,可以访问外网 IP)

如果我们每一个文件都放在 这个ROOT里面会不会太多了,特别是还包含css ,js这种
因此我们可以在webapps 里单独创建一个目录,把你的页面部署到这个目录中也行…
在这里插入图片描述

(你也可以放在 webapps 里,和 ROOT同级,只要路径对了就行,就需要我们前面理解的绝对路径和相对路径)

在这里插入图片描述

Maven

是一个在 java 中 非常 6 的存在,是一个非常知名的"工程管理工具" / “构建工具”,他主要用于管理 "依赖",构建/编译(调用jdk时),打包 java代码给构成 jar包 或者 war包(特殊的压缩包,类似 rar这种),里面就是各种 .class文件 放到一起,向我之前写的 jdbc编程 就下载了一个mysql驱动包,就是依赖于他…

"依赖"怎么理解?
(按正常思维)要想结婚 得先有女朋友(男朋友)&&有房有车&&有钱…
他其实是很复杂的,可以嵌套 A > B > C > D 等等,如果没有这个Maven,你就需要自己捣鼓捣鼓,哪些是哪些的依赖,而有了Maven就不一样了,他自动帮我们整理,不需要你去捣鼓!!只能说非常香

如何下载Maven

这个我推荐使用 IDEA这个工具,他是真的 非常的香(里面是内置了现成的 Maven),可以去搜一下相关的IDEA下载教程

如何使用Maven

我们搭配 IDEA 来使用
就是一路yes:
在这里插入图片描述在这里插入图片描述

Maven 管理依赖

我们要 使用 maven 帮我们下载并安装第三方库

举个例子:
我们以 当初 下载 mysql 驱动包为例
先去中央仓库上,找到mysql驱动包:
链接:https://mvnrepository.com/
img我数据库是5版本的,随便找一个5版本的点击
在这里插入图片描述
把这里的Maven 标签页下的这个 xml 配置复制下来
在这里插入图片描述
把内容粘贴到刚刚创建项目的 pom.xml里面
在这里插入图片描述一般,maven是会自动从中央仓库那里下载依赖,第一次可能会比较久
(如果没导进来,mysql和版本那里一般是红色的),如果他没自动下载,我们可以手动刷新,就会下载
在这里插入图片描述
可能下载会比较慢,因为这个中央仓库服务器在国外,所以尽量在网络环境好的时候使用maven
接下来就可以使用了:
在这里插入图片描述

Servlet

Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app.

七 个步骤完成一个Servlet 并输出hello world!

我们根据以下 7 个步骤来构建Servlet还是很容易的

1:创建一个Maven项目

在这里插入图片描述

不同版本的idea 可能创建的Maven项目不一定一模一样

2:引入依赖

就是需要我们在代码中 引入 Servlet api,这个 api是第三方(Tomcat)提供的,我们需要去中央仓库引入

链接:https://mvnrepository.com/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

把它复制到 pom.xml
在这里插入图片描述

第一次导入多半是红色的字体,我们需要手动刷新(第一次有些人可能是有点慢的,因为中央仓库服务器在国外,我们有时候访问是很慢的,我们需要在良好的环境下才可以进行操作)

在这里插入图片描述

3:创建目录结构

当下项目的这些目录是不够的,需要我们在手动创建一些目录和文件夹(名字也要相同,这是规定)
在这里插入图片描述

这些名字的命名都是规定的,然后再web.xml中写入以下内容(直接复制进去就好)

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>
</web-app>
1234567

在这里插入图片描述

可能有些人导进去之后是红色的,像这种:
在这里插入图片描述

这种现象其实是正常的,因为有些idea他不能识别 Java以外的语言是否正确,他就会报红,我们只需要选中他,根据提示选第一个就行了
在这里插入图片描述

4:编写 Servlet 代码

在这里插入图片描述

需要注意一点:我是把super.doGet(req,resp)给注释掉的,因为我们需要自己的模板,不需要他的

doGet 方法要做的工作,就是根据请求,计算生成响应…

一个服务器的工作流程,可以分成这样的三个步骤:
1:接收请求并解析 2:根据请求计算响应 3:构造响应数据,并返回给客户端
其中,步骤二就是我们程序员自己要实现的逻辑,第一步和第三步都是 tomcat 帮我们做好了的

举个例子:
我们可以把服务器想象成一个餐馆:
你对老板说:“来一碗清汤小面”,老板就会收到这个"来一碗清汤小面"的请求(请求),然后后厨就开始动起来了,后厨这里,一个下面,一个切菜,一个调料(他们就像是并发工作,相当于三个线程)(计算响应)…,再来一个师傅整合…最后服务员把面端到你面前(响应)
这里就包含了这三个步骤

在这里插入图片描述

还有最后一步了:
在这里插入图片描述

就是路径要正确

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //干掉父类的doGet()
        //super.doGet(req, resp);
        
        //在程序控制台里打印,观察结果
        System.out.println("hello world!");
        //在页面上打印 hello world!
        resp.getWriter().write("hello world!");
    }
}
1234567891011121314151617181920

此处的代码编写就算完成了…

5:打包程序

当前我们的代码没有main方法,是不能单独运行的,所以就需要把当前的代码进行打包,然后 部署到 tomcat 上,然后有tomcat来进行调用(我们可以把这个完整的应用程序理解成一个能跑的汽车,Servlet代码 相当于是汽车上的货箱(自己动不了),tomcat就是车头可以跑(带着货箱跑))

在这里插入图片描述

6:部署程序

把咱们刚刚的 war包 拷贝到 tomcat 的 webapps 目录下
在这里插入图片描述

7:验证程序

在浏览器输入相关路径:
在这里插入图片描述

他返回的内容就是 HTTP响应的 body 部分,这个页面我们是通过 Java 代码生成的,和我们直接创建一个 HTML 是有区别的…HTML 里面的内容是固定死了的,不会改变,而我们通过 Java 代码生成的的内容是可以根据用户不同的输入,显示不同的结果

我在 Java 代码里加上一段时间戳
在这里插入图片描述
在运行:
刷新多次就会发现他的时间戳是不一样的在这里插入图片描述

好了,这里的 7 个步骤就完成了,记住,上诉的 7 个 步骤这只是针对一个新的项目,如果我们项目已经创建好了,后续修改的时候,前面的 三个 步骤就不必要重复了,直接操作 4-7 就行

简化 5 和 6 步骤(将 Tomcat 集成到 IDEA 中)

我们发现,每次打包部署都是比较麻烦的,因此我们也是有一些办法来提高上诉流程效率的,我们可以通过第三方工具来简化 5 和 6 的操作

IDEA 虽然本身已经有很多功能了,但是也不可能做到面面俱到!! 因此,IDEA 就提供了一系列的扩展能力,允许第三方来开发一些程序,交给 IDEA 运行,就相当于是对 IDEA 进行了扩展…
我们就可以通过 IDEA 上的插件,直接把 Tomcat 给集成进去,做到一键完成打包部署,smart tomcat 就是 IDEA 的一个插件…

需要注意一点:Tomcat 和 IDEA 是两个独立的程序!!! Tomcat 不是 IDEA 功能的一部分,在我们后面开发中,主要还是通过 IDEA 调用 Tomcat 的方式来进行的,可能用的时间长了,有些朋友就对 Tomcat 的印象开始模糊了,觉得 Tomcat 就是 IDEA 的一部分,这里我们一定要明确,他们是两个独立的程序!!!

安装插件:

在这里插入图片描述
这样就让我们操作得更加简洁了

常见错误问题

出现了 404 状态码

有些人可能会报这样的错误:
第一种:

在这里插入图片描述
他就表示端口被人占用了,说明我们已经启动了一个程序绑定了同一个端口,就会出现这样的错误,我们可以通过这样的命令:netstat -an | findstr 8080cmd 查看,关闭被占用的端口的进程即可,也有可能你idea已经启动了一个tomcat了,不能重复用,只要关闭之前的即可
出现他就是说你要访问的资源在服务器上是不存在的,要么就是你请求资源的路径不对,
要么就是路径虽然对了,但是服务器没有正确的把资源加载起来…
启动服务器页面显示就是 404
在这里插入图片描述

第二种:

在这里插入图片描述
这里就是少写了第二级路径 Servlet Path(hello)

第三种:

在这里插入图片描述
这里就是少写了第一级路径 Context Path(Servlet_project)
在这里插入图片描述

第四种:

web.xml 写错了
我这里把它给注释掉
在这里插入图片描述
重新启动tomcat
在这里插入图片描述
他是找不到的
在启动日志中,他也有提示:
在这里插入图片描述

出现 405 状态码

405 表示对应的 HTTP 请求方法没有实现

第一种:

例如没有doGet方法,我们重启 tomcat服务器
在这里插入图片描述在这里插入图片描述
虽然路径找到了,但是在调用doGet方法时,没有就会出现上述现象.

第二种:

换成 doPost 请求也是这样的原因
在这里插入图片描述
启动服务器:
在这里插入图片描述

第三种:

忘记注释掉 super.doGet(req,resp)…
在这里插入图片描述重启tomcat:
在这里插入图片描述
此处的原因就需要我们进入到 doGet() 的源码当中了:
在这里插入图片描述
进入到了HttpServlet 源码当中,他是这样写的,拿到的如果是 一个 HTTP/1.1版本号,他就是直接返回一个 405 的响应

补充:
什么时候浏览器发的是 GET 请求?
1:直接在地址栏里,输入 URL
2:通过 a 标签跳转
3:通过 img/link/script…
4:通过 form 表单,method 指定为 GET
5:通过 ajax ,type 指定为 GET
啥时候浏览器发的是 POST 请求?
1:通过 form 表单,method 指定为 POST
2:通过 ajax,type 指定为 POST

出现 500 状态码

这个往往是 Servlet 代码中抛出异常导致的,并且咱们的代码没有处理,这个异常就会抛到 Tomcat 当中…像这样的错误对我们来说是很好解决的,因为他下面一般都告诉了原因

例如我们这样修改代码:
在这里插入图片描述
重启tomcat
在这里插入图片描述
他告诉了我们具体的异常调用栈,在第 20 行
在这里插入图片描述
我们在仔细检查检查,就会发现是空指针异常

出现"空白页面"

修改代码,方法里面没有写入内容:
在这里插入图片描述

重启tomcat 在访问:
在这里插入图片描述

出现"无法访问此网站"

这个就一般是 Tomcat 启动失败了

修改代码:
在这里插入图片描述
重启 tomcat:
我们就可以观察日志有这样的关键信息,这里需要我们仔细观察:
在这里插入图片描述访问页面:
在这里插入图片描述

springboot

搭建环境

  • win 10
  • IntelliJ IDEA Ultimate 2020.2
  • jdk 1.8

1.创建项目

打开我们的IDEA,新建项目:

在这里插入图片描述

在这里插入图片描述

项目配置基本默认的来就行,这里jdk选1.8即可:

在这里插入图片描述

注意这里的java选8:

在这里插入图片描述

选择Web里的Spring Web,其他的配置按自己需求来~

在这里插入图片描述

最后finish:

在这里插入图片描述

不出意外的话,之后建立好就是这样的亚子:

在这里插入图片描述

2.配置configuration
我很纳闷的是只有我新建好项目之后,这里没有自动给我配置好的吗(还是做教程的大佬们觉得没必要说qwq,直接就Run了)

在这里插入图片描述

所以我们 要手动来操作一下。

打开文件目录,可以看到这里是不太吉祥的红色:

在这里插入图片描述

这个原因是没有设置我们这个demo2文件夹为source root,所以右键设置一下即可:

在这里插入图片描述

哇,这样设了之后咋这么多红色的波浪线啊!

在这里插入图片描述

不要慌,我们先run一下康康是啥情况~

在这个DemoApplication上右键Run一下:

在这里插入图片描述

顺便提一句,可以看到,Run了之后,上面的configuration就自动配好了(我怎么告诉你我还傻乎乎的自己配,没配出来qwq):

在这里插入图片描述

但是底下有报错:

在这里插入图片描述

那么就说明现在的项目还缺少依赖包,那么我们就来装一波~

3.下载Maven的Sources
右键pom.xml->Maven->Download Sources

在这里插入图片描述

底下就开始下载了:

在这里插入图片描述

也可以把Maven的工具窗口点出来,方便操作:

在这里插入图片描述

可以看到侧边栏:

在这里插入图片描述

就等它慢慢下载吧~~下载好之后可以看到多了一坨东东:

在这里插入图片描述

4.数据库配置
那么怀着激动的心情,我们再Run一下:

好像很正常的亚子?

在这里插入图片描述

不对,定睛一看:

在这里插入图片描述

OMG又有报错!!不要慌,我们先看下这个报错是啥:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class

其实这里的重点是DataSource!!

其实这里的重点是DataSource!!

直接上这篇博客,写的非常清楚Resolving “Failed to Configure a DataSource” Error

By design, Spring Boot auto-configuration tries to configure the beans automatically based on the dependencies added to the classpath.
And, since we have the JPA dependency on our classpath, Spring Boot tries to automatically configure a JPA DataSource. The problem is, we haven’t given Spring the information it needs to perform the auto-configuration.
For example, we haven’t defined any JDBC connection properties, and we’ll need to do so when working with external databases like MySQL and MSSQL. On the other hand, we won’t face this issue with in-memory databases like H2 since they can create a data source without all this information.

记得之前创建项目的时候我们选了个MySQL Driver吗!Spring Boot喜欢自动把我们需要的环境都配置好,但是我们现在没有给它配置数据库的信息,所以出现了这个报错。

解决方案如下:

方法一:配置数据库信息

在 application.properties 中配置:

spring.datasource.url=jdbc:mysql://localhost:3306/myDb
spring.datasource.username=user1
spring.datasource.password=pass
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

或者在 application.yml 中配置:

spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/myDb
    username: user1
    password: pass

方法二:取消自动配置数据库的功能

在 application.properties 中使用 spring.autoconfigure.exclude 属性取消 auto-configuration。

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

我就是用的这个方法(我是想着数据库配置啥的之后再说~)

在这里插入图片描述

在这里插入图片描述

或者在 application.yml 中写:

spring:
  autoconfigure:
    exclude:
    - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

以上方法任意选一种就可以。前面的博文里还有别的方法,我就没有列出来啦

这样弄好了之后我们再Run一下看看:

在这里插入图片描述

感觉好像很正常的样子!

5.写个Hello, world网页
建立一个controller的文件夹:

在这里插入图片描述

建个java class,命名DemoController:

在这里插入图片描述

代码如下:

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/demo")
public class DemoController {

    @RequestMapping("/index")
    public String index(){
        return "Hello, world!";
    }

}

那么最后再来Run一下:

在这里插入图片描述

这里圈出来的就是端口号~

访问网址 http://localhost:8080/demo/index,看到下面的页面就说明你成功啦~~)

在这里插入图片描述

在编写代码时添加(开发者的名字开发时间)等类注释

File–Setting–Editor–File and Code Templates–Class

注释模板:

  • * /**
      
     * @description: 
     * @author: ${USER}
     * @time: ${DATE} ${TIME}
       */
    

img

方法注释

为了获取参数信息,我们需要使用 “ Live Templates” 。

创建 Live Templates 分组

File–Setting–Live Templates。

在这里插入图片描述

创建 Template

img

我们上一步创建了 zwl 分组,现在我们将在 zwl 分组中创建 Template。
注意:Abbreviation 的名字为 * ,Expaned with Enter,这样注释功能的快捷键就为 :/** + Enter
右键模板,选择 change context:定义模板的是适用范围,这里选择Java所有即可

img

img

模板内容:

## 

 * *

  * @description: 
    $params$

  * @return: $return$

  * @author: $user$

  * @time: $date$ $time$
    */


定义模板内容中引用的变量

我们上一步的截图中,点击 Edit variables 按钮可以弹出变量设置窗口。
这里,我们把参数变量 params 设置为一个自定义函数 groovyScript() 。groovyScript 函数调用 Idea 的 methodParameters() 函数获得参数数组,并进行格式化。
params 的值(即 groovyScript 函数):

groovyScript("def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {result+=' * @param ' + params[i] + ((i < params.size() - 1) ? '\\n' : '')}; return result", methodParameters())

其他变量的值,直接使用 Idea 的函数进行赋值。
date → date()
time → time()
author → user()
return → methodReturnType()

img

最终效果:

img

IDEA2021.3创建Web项目

1、创建项目

File ---> New ---> Finish

Next ---> Next ---> Project

3

4

项目创建成功

2、 导入依赖包

7

8

3、 创建两个文件夹分别是 classes 和 lib ,classes用来存放out文件(等等用得上),lib用来存放依赖包

10

4、 配置tomcat服务器

12

13

tomcat配置好后

5、配置artifacts

6、启动项目

第一次运行时间稍长一些

成功

一个java web 项目就这样创建并且启动成功了

18

IDEA中创建并运行第一个Maven web项目

创建Maven项目

在这里插入图片描述

选择·一个maven模板

在这里插入图片描述

设置项目名称

在这里插入图片描述

选择maven本地仓库

在这里插入图片描述

选择项目本地目录

在这里插入图片描述

配置Tomcat

在这里插入图片描述

选择本地Tomcat目录

这里warming 是没有将项目发布到Tomcat,
稍后进行项目发布

在这里插入图片描述

在这里插入图片描述

新建web目录

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

添加war包到Tomcat

在这里插入图片描述

在这里插入图片描述

项目目录

在这里插入图片描述

点击启动Tomcat

在这里插入图片描述

Tomcat 启动后,会自动打开浏览器,输出运行结果哟

在这里插入图片描述

标签:Java,tomcat,Tomcat,笔记,方框,学习,java,我们
From: https://www.cnblogs.com/weiguanghao/p/17405490.html

相关文章

  • Unreal Engine 大象无形学习笔记(第二部分:虚幻引擎浅析)
     Q1.虚幻引擎的Main函数在哪?LaunchWindows.cpp中找到WinMain。Q2.虚幻引擎为什么要引入模块机制?编辑器模式、发布模式要单独配置非常麻烦。工具:UnrealBuildTool包含大模块:Runtime、Development、Editor、Plugin每个模块包含:Public、Private文件夹,.build.cs文件作用......
  • 01初识Java
    初识java一、Java特性简单性,相当于C++语法的一个“纯净版本”;面向对象;分布式(微服务),Java有丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议;健壮性,Java与C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性。不仅如此,Java编译器能够检测许多......
  • 汇川is500伺服控制器方案 DSP程序和原理图,代码完整,学习工业代码的范例,含惯量识别,电机
    汇川is500伺服控制器方案DSP程序和原理图,代码完整,学习工业代码的范例,含惯量识别,电机参数识别,PWM死区补偿,运动插补等功能。本代码仅用于学习ID:6735670165329159......
  • 用Java集合中的Collections.sort方法对list排序的两种方法
    用Collections.sort方法对list排序有两种方法[color=darkblue][b]第一种是list中的对象实现Comparable接口[/b][/color],如下:/***根据order对User排序*/publicclassUserimplementsComparable{privateStringname;privateIntegerorder;publicStringge......
  • BeanUtils beanjavaBean与Map互转
    importjava.lang.reflect.InvocationTargetException;importjava.util.Map;importorg.apache.commons.beanutils.BeanUtils;publicclasstest{publicstaticvoidmain(String[]args){Personperson1=newPerson();person1.......
  • java的urlRewriter
    现在UrlRewriter技术有两个技术平台的,一个就是在Java方向的,另一个就是.NET方向的。今天我们讲的是Java方向的应用。首先让我们了解它的工作原理,说白了它就是一个简单的过滤器(Filter),看看源码你就会很快的明白,它就是通过我们在jsp中常用的两个方法实现的forward(),sendRedirect().下......
  • 新能源汽车整车控制器VCU学习模型,适用于初学者。 模型类产品一经售出
    新能源汽车整车控制器VCU学习模型,适用于初学者。模型类产品一经售出,不退不换。1、模型包含高压上下电,行驶模式管理,能量回馈,充电模式管理,附件管理,远程控制,诊断辅助功能。2、软件说明书(控制策略说明书)3、模型有部分中文注释对初学整车控制器自动代码生成或刚接触整车控制器有很大帮......
  • canopencanopen sys tec 某泰学习资料,文档,例子,协 议站原程序,stm32的主站从站代码可编
    canopencanopensystec某泰学习资料,文档,例子,协议站原程序,stm32的主站从站代码可编译,其他平台没用过。协议支持全面,有nmtsdopdolss等功能,移植和开发文档详细,是开发canopen设备必备资源。远程IO,驱动等产品使用该资料,非常好用。ID:861500638397862379......
  • JAVA基础(多线程Thread和Runnable的使用区别
    [color=red][size=x-large]两种定义方式[/size][/color]定义方式一:classTestThreadextendsThread{publicvoidrun(){........................}}Threadt=newTestThread();t.run()//或者t.start();定义方式二:Threadt=newRunnabl......
  • Java实现文件拷贝的4种方法.
    第一种方法:古老的方式publicstaticlongforJava(Filef1,Filef2)throwsException{longtime=newDate().getTime();intlength=2097152;FileInputStreamin=newFileInputStream(f1);FileOutputStreamout=newFileOutputStream(f2);byte[]buffer=newbyte......