简单讲述Servlet,Tomcat,webapp三者之间的联系以及简单介绍
Servlet是javaEE中的一套标准,目前的主要用途就是写web应用。
我们在使用Servlet的时候一般都和Tomcat一起使用,Tomcat一个免费开源的Servlet的容器。
我们可以把Tomcat看作一个Http服务器,像淘宝一样。webapp也就是我们写的代码,一个淘宝店铺,在tomcat之上运行。Servlet这一套api,也就相当于淘宝提供给我们的服务
Servlet和Tomcat在网络协议栈中的定位是在应用层的。
HttpServlet是Servlet的接口的一个实现类,并且本身就是一个抽象类,而有关HttpServlet的代码一般主要负责Http的请求,我们一般可以选择覆盖doGet和doPost方法。
简单的来说我们可以把Tomcat看作一个所谓的Tomcat容器,其内部实现了一个Http服务器,并且会根据不同的URL(http请求),区分出是静态内容和动态内容,若是动态内容,我们根据在代码中配置的web.xml的内容,并且会找到合适的对象进行处理。
在我们安装好tomcat后,我们只需要在其子目录下找到bin目录下的startup.bat,tomcat就会自动运行,tomcat在启动之时会自动扫描webapps下的对应的webapp,并且若是只要webapp下的发生更新,同时tomcat也会再次扫描一次webapps目录下的文件也就是说tomcat会自动更新。
会用一个单独的扫描线程,监控webapps目录中的webapp变化情况,若是发生变化就会自动加载
如果tomcat安装好,但是打开tomcat出现闪退的情况我们一般可以从两个方面去查,第一个是jdk环境是否挂掉了(我们看看idea是否可以正常编译代码),第二个就是看端口号是否被占用,tomcat的端口号一般是8080,8005,若是被其他进程占用的话tomcat无法正常启动。
在tomcat运行的这个代码的时候我们需要把maven打好的war包放到tomcat的webapp的目录下,那木tomcat就会自动更新,我们就可以根据web.xml下的配置的路径在浏览器下输入对应的http请求就可以得到想得到的页面。
我们web.xml中的配置最本质的目的就是把Servlet中的类和url中的路径关联,那木在tomcat收到的http请求之后,如果发现url中的请求和web.xml中的配置一样,那木就会调用到对一个的Servlet的代码。
我们简单写一个helloworld的 servlet代码
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class helloWorld extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException, IOException {
// 写一个简单的 hello world
// 请求无论是啥, 响应都是固定返回一个 hello world
resp.getWriter().write("<h1>hello servlet</h1>");
}
}
web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>helloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/java-hello</url-pattern>
</servlet-mapping>
</web-app>
后的helloWorld是代码类的名称,是中间关联的,后的/java-hello是http请求中url路径
最终的在浏览器中输入对应的url就是这个,得到了这个页面
A_Java_webmaven就是url中的第一层路径,这个当我们把war包放在里面之后就会自动生成,而第二层路径就是我们在web.xml中所配置的了
- 我们需要清楚的一点就是我们所写的代码并不会在编译器上体现出错误,当代码有问题的时候会在Tomcat上体现出来,我们可以在Tomcat上的命令行以及日志上找到,我们所写的代码是Tomcat来执行的,如果程序有异常,最终这个异常也是需要交给Tomcat来执行的以及处理的。
Servlet的生命周期 刚开始的初始化的时候调用init方法;
然后每次收到请求会调用service方法,service方法会根据HTTP请求的方法,来决定调用doXX那个方法(一种多态的场景);servlet在销毁之前就会调用destroy方法,用来清理资源。