Tomcat
http协议就是Http客户端和http服务器之间通信使用的协议,http客户端就是浏览器,http服务器则有很多种实现,tomcat 是java圈子中,最知名,最广泛使用的http服务器,apache最初也是一个http服务器,后来逐渐影响力逐渐越来越大,形成一个开源社区
如何启动tomcat
打开文件管理器中tomcat目录下的bin目录
第一个给windows使用,第二个给linux和mac使用
点击startup.bat
显示这个表示启动成功
用127.0.0.1:8080访问一下tomcat的欢迎页面(tomact自带的一个webapp)
tomcat必须是运行状态,8080是tomcat默认的端口号,使用tomcat最大的用途,就是把写好的网站,给部署上去,所谓的部署就是把你的代码拷贝到webapps目录中去,就是通过网络访问
通过网络访问和直接通过路径访问是不一样的,通过网络,可以跨主机访问,而通过文件路径不行
但是家用电脑 由于端口号太少,只有内网ip 要想让别人访问,需要有外网ip(买个云服务器)
基于tomcat编程 基于tomcat进行后端的开发
网站后端,http服务器,肯定是针对http协议一系列操作的
幸运的是,tomcat已经把这些http相关的底层操作,封装好了
只需要调用tomcat给咱们提供的api即可
tomcat提供的原生的api就是Servlet,进行wab开发的api
servlet 是什么?
servlet是一种实现动态页面的技术
网页分成两类:静态页面:页面内容是不变的,只是单纯的html
动态页面:页面内容随着输入参数的不同而改变,则是html+数据
第一个Servlet程序
写一个Servlet程序,部署到tomcat上,通过浏览器访问,得到helloworld,都要有一下几步
1.创建目录2.引入依赖3.创建目录4.给web.xml写点东西4.编写代码5.打包程序6.部署工作7.验证
1.创建项目
此时要创建一个maven项目,maven是个‘工程管理’工具,有管理依赖(使用了啥第三方库,都给处理好了),打包功能,maven是独立的程序,但不需要单独下载安装,IDEA已经自带了
2.引入依赖 Servlet api.jar
所写的servlet代码,要基于tomca这套api来进行的,这个api要通过第三方库的方式引入进来
3.创建目录
虽然maven已经帮我们自动的创建了一些目录,但是还不够,此处是需要使用maven开发一个web程序,还需要别的目录
1.在main目录下(和java,resources并列),创建一个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>
当前写的servlet程序和以往写的别的代码相比,有一个非常大的区别,没有main方法,main可视为汽车的发动机,有发动机,才能跑,如果有辆车,没有发动机,能不能有办法让跑,有办法,挂个车头,让车头拽着他跑,咱们写的servlet程序就是车厢,tomcat就是车头
把咱们写好的servlet程序扔到tomcat文件夹的webapps目录下,就相当于把车厢挂到车头后面了
tomcat如何识别,webapps目录下,哪些是需要拉着跑的车厢?哪些是普通的不需要拉着跑的目录?
就是靠目录下有个WEB-INF/web.xml
4.编写代码
在java目录下创建HelloServlet2类
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;
@WebServlet("/hello")
//servlet api里提供的现成的类写sevlet代码一般都是继承这个HttpServlet的
public class HelloServlet2 extends HttpServlet {
@Override
//方法重写
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//父类已经有doGet方法,此处希望用子类的版本
//super.doGet(req, resp);
//这个只是在服务器的控制台里打印
System.out.println("hello world");
//是要把hello world返回到客户端,需要用以下代码
resp.getWriter().write("hello world");
}
}
req表示一个HTTP请求,resp表示一个HTTP响应,rep是tomcat针对请求,已经解析好了,构造好了的,resp则是 一个空对象(不是null,只是new了一个对象,里面的各种属性没设置),resp就相当于是一个输出型参数。
doGet方法不需要咱们自己手动调用,而是交给Tomcat来调用,Tomcat收到get请求 ,就会触发doGet方法 tomcat会构造好两个参数
TCP socket中读出来的字符串,按照HTTP协议解析得到的对象,和HTTP请求报文格式相对应的
doGet的效果,就是根据请求计算响应
此处的writer对象从属于resp对象的,此时进行的write操作就是往rresp的body部分进行写入,等resp对象整个都构造好了,tomcat会统一的转成HTTP响应的格式,再写socket
注解 :注解是Java中特殊的类,Java专门定义了一种“语法糖”来实现注解,注解的作用,针对一个类/方法进行额外的解释说明,赋予这个类、方法额外的功能
5.打包程序
把程序编译好,得到一些.class文件,再把这些.class文件打包,jar就是一种.class构成的压缩包,但是我们这里要打的是war包,jar只是一个普通的java程序,war则是tomcat专属的用来描述webapp的程序,一个wa包就是一个wabpp
直接双击 但是打的是jar包,我们需要是war包,所以我们要在pom.xml中修改一下
6.部署工作
把刚才打包好的war从idea打开文件所在的位置,拷贝到tomcat的webapps目录中即可
然后启动tomcat
7.验证
打开浏览器,输入url,访问写好的这个代码
这个url路径第一级路径hello_servlet , 这个目录就代表一个webapp,网站 第二级路径就是/hello刚才在浏览器地址栏中输入url之后,浏览器就构造了一个对应的HTTP GET请求,发给了tomcattomact就根据第一级路径,确定了具体的webapp,根据第二级路径,确定了是调用哪个类,再通过GET/POST方法确定调用HelloServlet的哪个方法(doGet,doPost)此时Tomcat就执行对应的代码,完成对应的工作。
自动打包
打包和部署程序这两件事可以使用IDEA的Tomcat插件,把Tomcat集成到IDEA中,就可以自动打包部署,在插件市场下载smart Tomcat
tomcat支持启动的狮虎显示指定一个特定的webapp目录,相当于是让webapp运行,idea直接调用tomcat,让tomcat加载当前项目只中的目录,这个过程其实没有打war包,也没有拷贝,此时程序还是可以正常运行,但是像之前的webapps下的比如欢迎页面就没有了。