目录
Tomcat
Tomcat是一个HTTP服务器,在TCP服务器的基础上加了一些额外的功能,能够解析请求中的HTTP报文,把请求转换成结构化数据(对象),也能很方便的构造HTTP响应。HTTP服务器提供了一组API,方便程序员直接调用来操作HTTP协议,从而简化程序员的开发工程。servlet程序是一个war后缀的文件,tomcat会自动把war解压缩得到一个目录,每个war其实就对应了一个webapp,一个Tomcat可以部署多个servlet程序,所以可以把Tomcat称为“servlet的容器”。
maven
maven是java世界中非常知名的“工程管理工具”/“构建工具”,核心功能:管理依赖,构建/编译,打包。maven存在的意义就是能够直接把这些操作串起来,一气呵成。
- 依赖:进行A操作前,先执行B操作
- 构建/编译:调用jdk
- 打包:把java代码构造成jar或者war
使用
创建maven项目
管理依赖
实践
完成一个servlet的hello world
1.创建一个maven项目
2.引入依赖
需要在代码中引入servlet api,这个api不是jdk内住的,而是第三方tomcat提供的,借助Maven直接引入。
3.创建目录结构
<!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代码
5.打包和部署
使用smart tomcat插件
6.验证程序
可以这样认为:
一个Tomcat上可以同时部署多个网站,一个网站上又有多个页面,一个请求中的第一级路径用于告诉tomcat要访问的网站是哪个,第二级路径告诉tomcat要访问的页面是这个网站的那个页面。
使用总结
GET,POST请求应用场景
啥时候浏览器发的是GET请求?
- 直接在地址栏里输入URL
- 通过a标签跳转
- 通过img/link/script
- 通过form表单,method指定为GET
- 通过ajax,type指定为GET
啥时候浏览器发送的是POST请求?
- 通过form表单,method指定为POST
- 通过ajax,type类型为POST
Servlet运行原理
Tomcat伪代码
Tomcat初始化
1)让Tomcat先从指定的目录中找到所有要加载的Servlet类
前面部署的时候是把Servlet代码编译成了.class,然后打包成了war包。然后拷贝到了webapps里面。Tomcat就会从webapps里来找到哪些.class对应的Servlet类,并进行加载。
2)根据刚才类加载的结果,给这些类创建Servlet实例
3)实例创建好之后,就可以调用当前Servlet实例的init方法了
4)创建TCP socket,监听8080端口,等待有客户端来连接
5)如果循环退出了,Tomcat也要结束了就会一次循环调用每个Servlet的destroy方法
Tomcat处理请求
1)req司通过读取socket中的数据,然后爱按照HTTP协议的请求格式来解析的,构造成了一个HttpServletRequest对象,resq这里则是相当于new了一个空对象
2)判定当前要的顶球是否是静态文件,如果是静态文件就要读取文件内容,把文件内容够遭到resq对象的body中,并且返回这个resq对象
3)根据请求的URL来获取到使用哪个类来处理
URL里有两个路径。
第一级路径:Context Path,确定一个webapp
第二级路径:Servlet path,确定一个Servlet类
如果没有找到匹配的Servlet类就会返回404
4)根据刚才找到的Servlet对象,来调用service方法,在service方法内部又会进一步调用doGet/doPost,下面是service方法内部
Servlet的关键API
HTTPServlet
我们写的代码就是通过继承这个类,重写其中的方法来被Tomcat执行
HttpServletRequest和HttpServletResponse