1.Tomcat:
- Tomcat是一个HTTP的服务器,本质上就是一个TCP服务器,只不过加上了一些按照HTTP协议格式进行解析/构造这样的代码。
- 学习Tomcat的目的就是能够熟练掌握Tomcat api,基于Tomcat开发网站后端程序,基于这些http服务器进行二次开发。
- 将前端和后端代码放到webapps目录里面就可以通过自己的浏览器来访问了。在webapps目录下创建一个文件就被视为一个webapp,文件创建好之后需要重启Tomcat,才可以在浏览器上正常访问到。
- Tomcat是运行在JVM上的,跨平台!默认的编码是UTF-8,而windows的cmd默认编码是gbk。
- 若没有写具体的路径则默认是在webapps的ROOT目录下进行查找。若文件没有给出路径并且文件名也不在ROOT中存在,就会报404。务必要保证是在webapps目录中进行访问!
2.Servlet:
- Servlet就是Tomcat给程序员提供的进行二次开发的api。
- 静态页面和动态页面的概念。静态页面意思就是页面是固定的(以文件的形式,放在硬盘指定的的目录当中),无论是什么时候什么人来访问都是一样的页面。而动态页面不是一个真实的硬盘文件,而是代码在内存上构造出来的”虚拟文件资源“,不同的人不同的时间访问的页面就会不同。举个例子:我开水果摊,静态页面就是已经切好的水果,每一盒都是一样的;动态页面就是个性搭配,需要现做一个。
- 静态页面直接拷贝到webapps里面就行;动态页面就需要基于Servlet api进行写代码实现。
- 使用Servlet来编写一个hello world,
一共7个步骤:
1.创建项目
2.引入Servlet依赖
3.创建目录结构
4.编写代码
5.打包程序
6.部署程序
7.验证程序
- 第1步:创建一个maven项目。maven是一个作用不限于编译、打包、部署的构建工具(build)。我们使用maven主要就是借助maven进行编译、打包和管理依赖。
- 第2步:引入Servlet依赖。Servlet不是Java标准库自带的需要下载并引入到项目中。maven的一个核心功能就是能够自动的管理依赖,就会把咱们使用的库里依赖的东西自动从中央仓库上下载下来。
- 第3步:创建目录结构。虽然maven已经创建出了一些目录但是还不够,还需要搞一个符合Tomcat要求的目录结果。这个目录结构的位置名称层次都要严格的一致,还需要在web.xml中复制一段代码。schema文件就描述了xml中都允许写哪些节点,节点之间的层级关系,哪些属性是违法的。
- 第4步:编写代码。把要编写的代码放到java这个目录下。Tomcat可以关联上很多路径,这样就关联上了不同的类,也就执行了不同的方法了。
@WebServlet("/hello") 会针对某些GET请求生效
这里写的是“/hello”
意思是 GET请求并且url里面的路径是 /hello 的请求才会生效
这样Tomcat才会调用到这里的doGet方法
- 第5步:打包程序。之前我们写的代码都是带main方法的相当于一个小汽车自带发动机(自己就能跑),当前我们写的Servlet代码没有main方法,就相当于一个火车车厢必须要把车厢挂到车后后面才可以跑起来(车头就是Tomcat,Tomcat带main,自带个发动机)。把写好的代码挂到火车头后面的过程就是打包+部署。一个类就是一个.class文件,是在方法区里加载的。当打包完成之后(打成了jar包),但Tomcat不使用,因为Tomcat要求的压缩包格式是war包。因此需要在pom.xml文件中配置。
- 第6步:部署程序。就是把war包拷贝到Tomcat的webapps中。
- 第7步:验证程序。通过浏览器构造一个HTTP请求来访问Tomcat中的服务器,Tomcat服务器就会解析请求。例如:构造一个请求:127.0.0.1:8080/servlet/hello 。大致是先匹配Context Path第一级路径(/servlet),再匹配Servlet Path第二级路径(/hello),最后匹配HTTP方法。
浏览器发送的请求时怎么和自己写的代码建立联系的:
Tomcat服务器解析请求:
1.获取到URL中的第一级路径/servlet(Context Path / Application Path),就是确定一个webapp。
2.找到webapp之后就会加载里面的类,重点就是去识别出@WebServlet注解修饰的类。
取出URL中的第二级路径/hello(Servlet Path),
就在@WebServlet注解中找到名字为/hello的这个类
找到类之后创建实例,这个实例只会创建一次,如果之前创建过就直接使用上次的实例
3.再解析出HTTP请求的方法(如果是GET),取出GET之后就根据HTTP方法来调用对应的Servlet中的(do...方法),
同时Tomcat还会构造出HttpServletRequest对象和HttpServletResponse对象
- Tomcat中的main方法主要做的事情就是针对webapps里的webapp进行加载,将Context Path、Servlet Path和请求的方法加载到内存上。
- 使用Servlet编写个hello world这7个步骤中,第5和6步可以合并在一起。在idea中可以使用第三方的Smart Tomcat插件(plugin)来完成”一键式“的打包和部署。
- 如果Tomcat已经启动了,此时smart tomcat调用的tomcat就会绑定端口号失败。“一山不容二虎”!
一个程序能不能绑定多个端口号?
-> 一个人能不能有多个手机号? 可以
一个端口号能不能被多个程序绑定?
-> 一个手机号能不能被多个人使用? 不可以
- tomcat的运行方式有多种?
1.直接在startup.bat上运行,需要手动拷贝war包到webapps目录中
2.直接通过java代码,调用Tomcat的jar包运行,不需要拷贝war包。
在webapps的目录中不会有war包,也没有欢迎页面(没有加载webapps目录下的东西)
- Context Path分成俩种情况来看待:(这是Tomcat俩种不同的运行模式,这俩种模式对Context Path的认知是不一样的!)
- 使用Smart Tomcat 时经常会遇到的问题。404:路径写错了或者是你的webapp没有被tomcat正确的加载(web.xml写错了,web.xml是tomcat加载war包的重要依据!)。405:请求的方法服务器这里没有实现(GET请求,服务器这里是doPOST方法就会出现405)或者是没有把super给删了。500:服务器这里的代码出BUG了。空白页面:说明服务器没有响应。无法访问此网站:说明tomcat服务器没有启动或者是IP地址端口号写错了。
如果对您有帮助的话,
不要忘记点赞+关注哦,蟹蟹
如果对您有帮助的话,
不要忘记点赞+关注哦,蟹蟹
如果对您有帮助的话,
不要忘记点赞+关注哦,蟹蟹