Tomcat只实现了Servlet/JSP,它被称为轻量级容器,JBoss,WebLogic等实现了JavaEE的全部13种规范,被称为重量级容器。
可以在server.xml中将Tomcat的端口设为80,这是Http协议的默认端口。如以来,访问Tomcat中的web服务,可以不用输入端口号。
在Tomcat中部署项目的几种方式
-
直接将项目文件夹放到webapps目录下,项目文件夹的访问路径,就是虚拟目录
=> 简化部署:可以将项目文件夹压缩打包成war,将war放到webapps下,tomcat启动时会自动解压这个war包,并且tomcat运行时,删除这个war包,tomcat会自动删除解压出的文件夹(热部署)
-
配置
conf/server.xml
在Host标签中配置
<Context docBase="D:\Hello" path="/hehe" />
- docBase:项目存放路径
- path:项目虚拟目录(在浏览器输入url时,需要加虚拟目录前缀)
-
在
conf/Catalina/localhost
目录下创建xml文件,在文件中编写<Context docBase="D:\Hello" />
项目的虚拟目录就是xml的文件名称(IDEA中运行tomcat时,项目就是以这种方式部署的)
Tomcat自带了两个Servlet:
- DefaultServlet -> 处理静态资源的(如在浏览器地址栏直接访问某个html文件,或某个img图片,会通过DefaultServlet去读取服务器上的对应文件(IO操作),然后将文件的内容以流的形式写到Response中,Tomcat再从Response中提取出数据,返回给浏览器端)
- JspServlet -> 处理对jsp文件的访问(该Servlet会将jsp文件转换成Servlet,后调用Servlet进行数据的处理,以及将数据与静态HTML语句进行组装拼接,最后将拼接后得到的静态HTML,写到Response中,Tomcat再从Response中提取,返回给浏览器端)
这2个Tomcat自带的Servlet,他们的url-pattern分别是
- DefaultServlet ->
/
- JspServlet ->
*.jsp *.jspx
所以在我们开发自己的Servlet时,
配置的url-pattern不能写成 /*
,这样会使得这两个Tomcat自带的Servlet被短路,无法处理静态资源和JSP页面。
配置的url-pattern也不能写成/
,这样会使得DefaultServlet被短路,导致无法处理静态资源
静态资源(css/js/html等)不要放在WEB-INF目录下。WEB-INF目录下的文件不能被外部访问(在浏览器直接输入/WEB-INF/index.html
不能访问到index.html)
<!-- web.xml 中对servlet的配置-->
<!-- load-on-startup 配置为正数,则在tomcat启动时就加载Servlet,配置为负数,则在第一次访问Servlet时进行加载,数字为正数时,表示tomcat启动时加载servlet的顺序,数字越小越先加载 -->
<servlet>
<servlet-name>yogurt</servlet-name>
<servlet-class>com.yogurt.servlet.YogurtServlet</servlet-class>
<load-on-startup>-1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>yogurt</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
计算机通信的三要素:
- IP
- Port
- Protocol