0.动态web资源
程序员若想发送动态web资源(即使用一个Java程序向浏览器输出数据)给用户,需要完成两个步骤:
- 编写一个实现了Servlet接口的Java类,该类称为Servlet
- 把开发好的Java类部署到web服务器中
1.Servlet
- Servlet只是一个接口(规范),该接口定义的是一套【处理】网络请求的规范。
- Servlet运行过程
1.Web服务器先检查容器中是否已装载并创建该Servlet实例对象。若有执行4,若无执行2
2.装载并创建该Servlet的一个实例对象
3.调用Servlet实例对象的init()方法
4.创建一个用于封装HTTP请求消息的HttpServletResquest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法,并将请求和响应对象作为参数传递出去
5.WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法
访问任何资源都是在访问Servlet(即便是访问图片资源,Tomcat都有默认Servlet处理)
2.tomcat
- 是web服务器同时是Servlet容器
- 对于网络协议、http、监听8080端口等Servlet不管,而是由Servlet容器来管,所以要把Servlet部署到容器(tomcat,用来接收和返回请求)中,所以与客户端直接打交道的是tomcat。
- tomcat监听端口,接受请求后根据url等确定将请求交给那个Servlet去处理(调用该Servlet的service方法,该方法返回一个response对象,tomcat再把这个response返回给客户端)
tomcat的目录层次结构
Javaweb的标准目录结构
tomcat认为资源分三种,因为三种资源最终都交给Servlet处理所以tomcat又叫做Servlet容器:
1.对于静态资源,Tomcat最后会交由一个叫做DefaultServlet的类来处理
2.对于Servlet ,Tomcat最后会交由一个叫做 InvokerServlet的类来处理
3.对于JSP,Tomcat最后会交由一个叫做JspServlet的类来处理
补充:
正规的项目前面都有一个静态服务器(一般是nginx,apache,他们除了做负载均衡这些,最重要的是处理静态文件)如果没有前面的静态服务器,所有的资源都用tomcat的静态资源servlet处理,都会占掉了一个tomcat的线程池的一个线程,这样tomcat的性能就会受到非常大的影响。
3.ServletConfig和ServletContext
ServletConfig:可以读取web.xml(单个文件)中配置的初始化参数
ServletContext:该对象在Tomcat启动时创建(代表整个应用),用来获取整个应用的配置信息,也可用来读取资源文件
4.request和response对象
http协议有请求头和响应头。request封装了http的请求头,response封装了http的响应头。
通过response对象:
给浏览器输出一些简单的内容
实现文件下载的功能
实现页面自动刷新的功能
实现对数据的压缩
生成验证码图片
重定向跳转…
通过request对象:
得到浏览器的传递过来的各类信息(请求参数、请求头等)
实现防盗链
通过request对象来转发
解决请求参数中文乱码的问题…
Config(获取配置信息)、Context(代表整个Web应用)、Request(HTTP请求)、Response(HTTP响应)、会话机制 (Cookie和Session)