⭐️前面的话⭐️
本篇文章将介绍Tomcat的安装与使用,maven与Servlet的使用,一步一步教你如何在Tomcat上部署自己的网页以及第一个Servlet程序,idea中Smart Tomcat的使用和常见问题。
博客主页:未见花闻的博客主页
欢迎关注点赞收藏⭐️留言
本文由未见花闻原创,CSDN首发!
首发时间:2022年6月27日
✉️坚持和努力一定能换来诗与远方!
参考书籍:《暂时没有》
参考在线编程网站:牛客网力扣
博主的码云gitee,平常博主写的程序代码都在里面。
博主的github,平常博主写的程序代码都在里面。
作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
Tomcat是一个HTTP服务器,当然HTTP服务器有很多种,在java领域,Tomcat是比较知名的一个。反正知道Tomcat是一个HTTP服务器就行了,它能够借助API来接收和处理HTTP请求,下面来介绍一下Tomcat的安装与使用。
下载与安装:
第一步,上网搜索Tomcat,找到Tomcat官网,当然如果你不想找,我给你找好:https://tomcat.apache.org/,收好哈。
第二步,找到下载的地方,如果你是jdk8,选择Tomcat8版本。
第三步,点进去,选择zip文件点击下载即可。
第四步,找个你喜欢的地方,解压即可,点进目录,你会得到下面一堆文件:
使用:
第五步,了解各目录文件的作用
bin目录:启停脚本,就是说启动和关闭Tomcat的可执行文件都在这个目录中,.bat
文件表示Windows批处理文件,.sh
文件表示Linux的shell脚本文件,所以Tomcat在Linux也是可以运行的,以startup命名的文件就是Tomcat启动程序,以shutdown命名的文件就是Tomcat关闭程序。
conf目录:含有Tomcat配置文件,配置文件是xml
类型的文件,server.xml
文件可以修改Tomcat的端口号,默认为8080
。
temp,lib,work目录先不管不是很重要,logs目录:主要用来储存日志。
webapps目录:储存我们部署的Serlvet程序,Servlet部署的程序是war
结尾的压缩包(类似)相当于一个网站,一个Tomcat可以部署多个Servlet程序,也可以直接部署前端页面。
第六步,使用Tomcat,最简单的方式就是启动Tomcat,启动办法就是在bin目录找到startup.bat
文件启动Tomcat,然后直接访问http://127.0.0.1:8080
可访问到Tomcat首页。
启动Tomcat页面图如下,最后出现类似org.apache.catalina.startup.Catalina.start Server startup in 896 ms
的文字就表示启动成功了。注意,当启动一个Tomcat程序后在启动一个Tomcat程序会启动失败,因为端口号8080
已经被上一个Tomcat程序占用了。
也可以部署页面访问,首先将一个前端页面文件(HTML/CSS/JS文件)复制到webapps目录中,然后在bin目录找到startup.bat
文件启动Tomcat,最后访问http://127.0.0.1:8080/部署文件的相对wepapps目录的相对路径
进行验证。比如我的webapps目录中有一个博客系统文件夹,里面有一个blog_list.html
页面文件,我们现在要使用Tomcat访问这个文件,访问的url为http://127.0.0.1:8080/博客系统/blog_list.html
。
cmd窗口里面的不认识的文字是乱码了,因为Tomcat内部的编码格式是utf-8
,Windows默认的编码格式为gbk
,编码格式不一致,所以就乱码了。
访问http://127.0.0.1:8080/博客系统/blog_list.html
效果图:
在Tomcat部署的页面,有外网IP后别人也是可以访问的,好了,Tomcat的操作差不多就是这样。
maven是java世界中非常知名的“工程管理工具”,“构建工具”,即管理依赖,构建/编译,打包,下面来介绍如何使用idea来使用maven来引入mysql的依赖。
第四步,去maven中央仓库,找到mysql数据库的jar包,网址为:https://mvnrepository.com/
第五步,复制依赖,拷贝到pom.xml
文件中,注意要新建一个
放在该标签里面。
第六步,刷新
第七步,引入依赖成功。
这样,我们的MySQL的依赖就通过Maven引入好了。
Servlet是一组操作HTTP的API,Tomcat能够调用Servlet然后实现对请求的接收和处理。
第一步,创建maven项目
创建步骤与上面演示创建maven一致。
第二步,引入依赖,在maven中央仓库搜索Servlet
,找到如下图所示的api
。
我们选择3.1
版本。
把依赖引入到pom.xml
文件。
第三步,创建目录结构
在main
目录里创建webapp
目录。
在webapp
目录里面创建WEB-INF
目录。
在WEB-INF
目录下创建web.xml
文件。
至于为什么要这样创建,这是Tomcat与idea的约定,也可以改其他名称,但需要额外配置。
在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>
第四步,在java,目录下编写servlet代码,第一个Servlet程序诞生了。
HttpServlet
类。doGet
方法,用来处理HTTP GET请求,根据请求生成响应。WebServlet
注解,与http
带有注解所写的路径关联起来,可以理解为设置该Servlet程序所在的网页相对路径。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;
//将响应的请求使用注解与http 带有"/hello"的URL关联起来
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//不要调用父类的构造方法
//super.doGet(req, resp);
//控制台输出hello world
System.out.println("hello world");
//放入响应的body中,页面就能显示hello world了
resp.getWriter().write("hello world");
}
}
第五步,针对当前重写进行打包
因为我们所写的程序是没有main方法的,需要打包到Tomcat上调用运行。最朴素的打包过程如下:
首先在pom.xml
文件写入以下内容,与dependencies
同一级:
<!-- 打包为war包 不写默认为jar包-->
<packaging>war</packaging>
<build>
<!--指定war包名-->
<finalName>hello_servlet</finalName>
</build>
目的是为了使打包的压缩格式为war
和指定包名。
双击package,进行打包。
提示 BUILD SUCCESS
表示这样就打包完成了。
此时,target目录就会有打包好的文件了。
第六步,部署到Tomcat,启动Tomcat
将打包好的war
包拷贝到TomCat中的webapps
目录中。
然后启动Tomcat,运行我们的第一个Servlet程序。
第七步,验证程序运行结果。
访问http://127.0.0.1:8080/hello_servlet/hello
可以得到一个显示hello world的页面,同时命令行运行的Tomcat也会输出hello world。
对于URL的路径为什么是/hello_servlet/hello
,取决于两方面,一是war包的名称作为一级路径也叫做Context Path,二是java代码在注解标注的路径作为二级路径也叫做Servlet Path,访问的路径就是/war包名(一级路径)/注解标注的路径(二级路径)
。我的war包名称为hello_servlet
,注解标注的路径是/hello
所以综合起来,页面的访问路径为/hello_servlet/hello
,加上前面的协议域名端口号,URL就是http://127.0.0.1:8080/hello_servlet/hello
。
那这样和直接写一个html文件有什么区别呢?注意,使用java写的代码是动态的,而直接使用HTML的页面是静态的,比如我在响应请求的内容加上一个时间戳,我们知道时间戳是时刻变化的,我们再来看看页面的变化。
//放入响应的body中,页面就能显示hello world了
resp.getWriter().write("hello world" + System.currentTimeMillis());
Servlet创建总结:
Smart Tomcat是idea上的一个插件,上面所介绍的Servlet程序运行方法实在是有点麻烦,主要是第五步,第六步,每次修改都需要重新打包和部署,非常麻烦,Smart Tomcat就帮助我们解决了这个问题,只需简单配置一下稍微点一下就可以一键实现打包和部署操作,Smart Tomcat插件安装步骤如下:
第一步,打开idea设置,找到插件选项,即Plugins
。
第二步,在Marketplace
搜索Smart Tomcat
,下载安装即可。
第三步,重启一下idea就可以了,首次使用smart tomcat需要配置,配置过程如下:
常见错误1:404 未找到
出现该错误,最常见的错误就是路径输错了。
常见错误2:405方法不允许
这个错误最常见的就是请求处理的方法不匹配,比如对于GET方法的请求使用POST方法处理,就会出现405方法未找到页面异常。
对于浏览器什么时候发送的是GET方法,什么时候发送的是POST方法,有以下总结:
GET方法:
1)直接在浏览器地址栏输入URL(网址)
2)通过a标签跳转
3)通过link/script/img…等标签跳转
4)通过form表单,method方法指定为GET
5)通过ajax,type指定为GET
POST方法:
1)通过form表单,method方法指定为POST
2)通过ajax,type指定为GET
还有可能就是调用了父类的super构造方法会出现这种情况,根据源码可知如果协议版本是HTTP/1.1就会返回405错误。
常见错误3:500服务器内部错误
这种情况一般发生在代码出现异常的时候出现,就是我们的代码没有处理异常,异常就会向上传递,Tomcat会进行处理,这时候的页面异常状态码就是500。这个问题好解决,因为页面会把出现异常的原因以及出现异常的位置告诉你。
比如我们给代码来一个空指针异常。
常见错误6:页面无法访问
最常见的原因就是Tomcat没有运行或者崩溃,我们把Tomcat关了,就会出现页面无法访问的情况。
下期预告:Servlet原理