什么是Servlet?
Servlet就是一个java程序,需要Web 容器来能运行,一般被托管在Web容器中。
图示中,浏览器充当客户端,web服务器与客户端直接通过HTTP协议进行通信,所以,Web服务器也叫Http服务器
一般在Servlet容器外部包装Apache或者Nginx进行反向代理。
什么是HTTP协议?
Http协议是目前CS及BS模式下使用范围最广的通信协议。
WebSocket协议可以实现双向通信。
http默认端口80,如果服务器恰好是80端口,端口号可以省略不写,否则需要带上端口号。
Servlet API
javax.servlet
javax.servlet.http
javax.servlet.annotation
javax.servlet.descriptor
Servlet主要类型:
用户请求会使得Servlet容器调用Servlet的Service方法,同时,注入ServletRequest及ServletResponse。
每个应用程序都会存在一个上下文,servletContext,每个Servlet实例都会有一个配置ServletConfig
init只在Servlet初始化执行一次,destory只在销毁或停止使用一次,因为一个应用中,servlet只存在一个实例,各个线程共享这个实例,所以需要确保线程安全。
getServletInfo只是返回一条说明语句,getServletConfig返回init注入的ServletConfig对象。
编写一个Servlet类,实现Servlet接口
@WebServlet注解指明这是一个Servlet类,name指定名称, urlPattern指定路由
transient指明是不需要持久化。
应用程序目录
应用目录下防止资源文件,WEB-INF下的文件需要通过路由,其他位置的可以直接访问。
classes存放类文件,lib存放jar包
ServletRequest
Web容器提供一个ServletRequest参数注入到Service函数
获取内容长度:
获取内容类型:
获取参数:
获取协议类型:
ServletResponse
setContentType()设置内容类型
getWriter()获取输出流
ServletConfig
获取配置信息
获取配置名:
获取上下文:
getServletContext()
ServletContext
每个Servlet应用只有一个ServletContetx
通过调用ServletContext方法就可以获取到上下文对象。在将同一个应用部署到不同的服务器上搭建分布式的时候,常常使用。
获取参数:
获取参数名:
设置参数:
移除参数:
GenericServlet是一个抽象类,也可以通过继承GenericServlet来实现Servlet类的设计
HttpServlet
Service方法:
实际上,上述的方法在doGet,doPost中已经实现了,只需要复写他们即可
与上述ServletRequest、ServletResponse不同的是,现有的是HttpServletRequest、HttpServletResponse替代
HttpServletRequest
获取请求上下文的路径
获取请求中携带的cookie
获取指定的请求头
获取请求方法
获取查询字符串
获取Session
当create传入True才会创建Session
HttpServletResponse
添加cookie
添加请求头
发送重定向请求
使用Xml部署文件替换注解
配置文件位置: