文章目录
- Tomcat
- Tomcat下载
- 启动Tomcat
- 启动Tomcat失败的原因
- 使用Tomcat
- Maven
- 创建Maven项目
- Maven依赖管理
- Servlet
- 1.创建Maven项目
- 2.引入依赖
- 3.构建目录结构
- 4.编写Servlet代码
- 5.程序打包
- 6.程序部署
- 7.验证程序
- 使用IDEA上Tomcat插件简化步骤5和步骤6
Tomcat
Tomcat 就是基于 Java 实现的一个开源免费, 也是被广泛使用的 HTTP 服务器
Tomcat下载
Tomcat官网:https://tomcat.apache.org
进入官网后,会出现以下界面
统一版本很重要,否则可能会出现大大小小的问题
Tomcat的版本,会和JDK以及Servlet的版本密切绑定在一起,因为我用的是JDK8,所以我下载Tomcat 8,下载时一定要注意自己的JDK和Servlet版本(大版本要一致,小版本无所谓)
选择Tomcat 8后,点击第一个zip下载即可
下载好后,进行解压缩,里面会有以下内容
一般我们主要关注这其中的四个文件
正因为,一个Tomcat上可以同时部署多个Servlet程序,所以,也可以把Tomcat称为“Servlet的容器”,或者简称为“容器”
启动Tomcat
找到bin目录下的startup.bat,双击启动
只要有这句话,就表示Tomcat启动成功,最后面的849ms,表示本次启动Tomcat所用的时间
出现这么多乱码的原因:
Tomcat内部使用的编码方式是utf8(utf8是当下最主流的编码方式)
但是,我们的Windows是"简体中文版",默认的字符集是GBK,cmd这个程序也是跟随着系统的字符集
数据是按照utf8来构造的,但是cmd在显示的时候按照了GBK的方式来解析,因此出现乱码
解决乱码,就需要统一编码格式,但是不建议修改
可以使用其他方式来解决乱码问题
1.结合idea来使用
2.在Linux上使用
启动Tomcat失败的原因
启动时,cmd闪退
Tomcat要想运行,就需要找到JDK,至于你把JDK安装到什么位置了,Tomcat并不知道,此时就需要配置环境变量
如何解决这个问题?需要能看到报错提示。闪退了如何看到报错提示?
方案是把双击运行的脚本直接拖到cmd中来运行
出现这样的原因就是环境变量没配好,需要我们手动配置
端口号被占用
Tomcat是一个HTTP服务器,启动的时候要绑定端口,一般是绑定两个端口号: 8080,8005
如果这个端口已经被其他程序占用了,此时你启动肯定是失效的!! (闪退)
最典型的情况:你已经启动了一个tomcat,你再尝试启动第二个,第二个tomcat妥妥的失败
但也有启动第一个Tomcat时,也失败了,可能电脑上有别的程序占用了8080和8005端口
此时在cmd中使用命令:netstat -an | findstr 8080/8005 找到并关闭占用该端口号的程序
使用Tomcat
把tomcat启动完成之后,就可以使用浏览器来访问tomcat了
在浏览器url框中输入:localhost:8080 或者127.0.0.1:8080 进行访问
自己进行页面部署
虽然咱们部署了页面到tomcat,上但是这里还有个问题,当前如果页面简单还好直接放到ROOT就行了。如果当前页面比较复杂 (若干个HTML,还依赖了一些css,图片,js…),如果全都堆在这个ROOT目录里,就非常不优雅了。因此更好的做法,是在webapps里单独创建一个目录,把你的页面部署到这个目录中
出现状态码500或者404,如何解决?
有时候,Tomcat已经启动完成,页面也已经部署好,但是还是有差错,例如,出现状态码500或者404的错误
出现404的原因也可能是没有这个资源
出现这两个错误的原因大概率是文件的访问权限问题,只要进行以下修改后就能正常访问
Maven
maven是一个Java世界中,非常知名的 “工程管理工具”
工程管理工具的核心:
管理依赖,构建/编译(也是在调用JDK),打包(把java代码给构造成jar包(jar包是一个特殊的压缩包,类似与rar,里面就是把各种的.class文件放到了一起)或者war包)
什么是依赖?
在进行A操作之前,必须完成B操作
比如今天中午,冯同学想吃面条(A操作),那么就得先去食堂(B操作),如果不去食堂的话,就吃不到面条
我们写代码,也有很多的依赖,比如经常会依赖标准库,经常依赖一些第三方库,这会导致代码的依赖关系非常复杂。
如果是手动管理这个依赖,整个过程相当令人头疼,不光你得研究清楚,每个库都依赖哪些其他库
而且还得研究清楚,这些依赖之间的版本是怎么关联的
为了解决这些问题,java中引入了maven,maven存在的意义就是能够直接把这些操作串起来,一气呵成
创建Maven项目
IDEA内置了现成的maven,因此我们不需要去官网中下载
搭配idea来使用maven
新建项目,选择maven,一路next
创建好的目录结构:
src/main/java这个目录用来放咱们的java代码
src/main/resources这个目录用来放一些依赖的资源
src/test/java这个目录用来放单元测试的代码
pom.xml是maven项目的核心配置文件,一个maven项目的司令部,文件是使用xml这种格式来组织
项目创建好了,使用maven
按照以下方式打开maven的控制面板
我们用得最多的就是package打包,打包不仅仅只是完成打包,还会将clean,validate,compile,test都执行完,打包的结果一般是jar包或者war包
Maven依赖管理
使用maven帮我们下载并安装第三方库
以mysql驱动包为例
1.去中央仓库上,找到mysql驱动包
链接:https://mvnrepository.com/
我的mysql版本是5,因此随便找一个就行
2.把这里的Maven 标签页下的这个 xml 配置复制下来
3.把内容粘贴到刚刚创建项目的 pom.xml里面
4.上述过程完成后,一般来说maven就会自动从中央仓库那里下载依赖,如果没有下载,就需要我们手动刷新
右下角的状态栏中,可以看见下载进度,第一次使用的时候,可能会下载的比较旧,一旦下载好后,后续就可以直接使用了
由于中央仓库,服务器在国外,下载速度可能会比较慢!!
慢到啥程度?尤其是首次使用maven,下载的依赖是很多的,花个半个小时,一个小时之类的,都是属于正常情况大家还是尽量在网络环境比较好的情况下,去首次使用maven
因为源在国外,是不太稳定的,可能会出现连接超时的现象
此时就需要我们等一会儿后再去下载,如果还是不行,可以把maven仓库给配置成使用国内的源(使用国内的中央仓库)
如果需要配置,可以看看这篇文章:https://zhuanlan.zhihu.com/p/71998219
6.如果看到了这个库,就说明引入依赖成功,如果没有这个库,尝试点击右上角的刷新按钮,同时也要注意右下角的下载进度条
Servlet
Servlet 是一种实现动态页面的技术,是一组 Tomcat 提供给程序猿的 API,帮助程序猿简单高效的开发个 web app
接下来我们创建一个Servlet项目
1.创建Maven项目
按照创建Maven的步骤,创建一个名为servlet_project的maven项目
2.引入依赖
需要在代码中引入Servlet api,这个api不是JDK内置的,而是第三方(Tomcat提供的)
Tomcat相对于Java官方来说,仍然属于第三方
借助maven直接就能引入
在中央仓库 https://mvnrepository.com/ 中搜索 “servlet”,一般第一个结果就是
Servlet 的版本要和 Tomcat 匹配
可以在 http://tomcat.apache.org/whichversion.html 查询版本对应关系
把它复制到 pom.xml中
如果其中的字体是标红的,那么说明依赖还没下载好,需要我们等待一下,或者进行手动刷新
找到maven仓库,如果存在这个jar包,说明已经下载好了
3.构建目录结构
虽然当下maven帮我们创建了一些目录,但是还不够还不足以支撑咱们写一个Servlet项目
因此需要手动的再创建一些目录和文件出来
1.在main中新建一个webapp目录
2.在刚刚建好的webapp下,再建一个WEB-INF目录
3.在WEB-INF中建一个web.xml
4.需要在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>
4.编写Servlet代码
在java这个目录中创建一个名为HelloServlet的类,继承HTTPServlet
这里标红了,说明代码中找不到HttpServlet这个类,依赖没有被正确引入
因此,将鼠标放在HttpServlet上,alt+回车,就能导入这个类了
现在需要重写HttpServlet中doGet方法
直接回车,补全代码
doGet方法要做的工作,就是根据请求,计算生成响应
一个服务器的工作流程,就可以分成三个典型的步骤:
1、接受请求并解析
2、根据请求计算响应
3、构造响应数据,并返回给客户端
步骤1和步骤3,Tomcat已经帮我们做好了
步骤2就是我们自己要实现的逻辑,也就是doGet要实现的内容
因此我们不需要调用父类的doGet方法,必须自己实现doGet方法
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//super.doGet(req, resp);
//这个是让服务器在自己的控制台里打印
System.out.println("hello Servlet");
//在页面上也能打印hello Servlet
//把hello Servlet字符串放在http响应的body中,浏览器就会把body的内容显示到页面上
resp.getWriter().write("hello Servlet");
}
}
到这里,代码还差一步就能运行了
需要在这个类上方添加一个注解
HttpServlet中除了有doGet方法之外,还有其他的方法,例如doPost,doDelete方法等
http有哪些方法,HttpServlet就有哪些方法,因此需要保证请求是什么方法,服务器就需要用对应的方式去处理
接下来,我们需要打包这个程序
5.程序打包
当前的代码,是不能单独运行的(没有main方法)
需要把当前的代码,打包,然后部署到Tomcat上,由Tomcat来进行调用
在打包之前,需要修改pom.xml
<packaging>war</packaging>
<build>
<finalName>hello_servlet</finalName>
</build>
需要将这段代码放置到pom.xml文件中
jar和war都是java发布程序用的压缩包格式
war算是给Tomcat专门弄的。这里不光会包含一些.class,还可以包含配置文件,以及依赖的第三方的jar,还有html,css,js…
双击package进行打包
hello_servlet.war就是我们所需要的
6.程序部署
把war包拷贝到tomcat的webapps目录下
将这个war复制,然后放在tomcat的webapps目录下
启动Tomcat
启动完成后,
7.验证程序
可以这样认为:
一个Tomcat上可以同时部署多个网站,一个网站上又有多个页面
一个请求中的第一级路径,就告诉Tomcat,要访问的网站是哪个,第二级路径,就告诉Tomcat 要访问的页面是这个网站中的哪个页面
使用IDEA上Tomcat插件简化步骤5和步骤6
smart tomcat是idea的一个插件
安装smart tomcat
我这里已经安装过了,因此这个按钮是灰色的。
安装好后,一般要重启一下idea
在一个项目中,首次使用,需要进行简单的配置,后续就不必再配置了
这个按钮在右上角
都弄好后,点击这里的绿色小三角符号,就会自动完成打包,部署,重启Tomcat这一系列操作
这些文字在cmd中是乱码,但在idea中就不再乱码了
虽然这些信息是红色的,但是并不是报错,看一看最后一行,就知道Tomcat已经启动成功了,此时再去访问页面