Servlet简介
servlet是Server Applet的简称,翻译过来就是服务程序。简单的讲,这个servlet是运行在服务器上的一个小程序,用来处理服务器请求的。一般的网页程序,是由我们通过浏览器访问来实现的,在这个过程中,我们的浏览器发送访问请求,服务器接收请求,并对浏览器的请求作出相应的处理。这就是我们熟悉的B/S模型(浏览器-服务器模型)。而servlet就是对请求作出处理的组件,运行于支持Java的应用服务器中。
继承体系
Servlet优势
- 性能明显更好。
- Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
- Servlet 是独立于平台的,因为它们是用 Java 编写的。
- 服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
- Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。
生命周期
1、被创建:init()
默认,第一次被访问时创建
服务器启动时创建<load-on-startup>0或正数</load-on-startup>
因为是单例的,存在线程安全问题,尽量不要在servlet定义成员变量。
2、提供服务:service()
每当请求Servlet时,Servlet容器就会调用这个方法。
3、被销毁:destroy()
当要销毁Servlet时,Servlet容器就会调用这个方法。
Servlet中重要的对象
在servlet中共有四个重要的对象:
HttpServletRequest 请求对象:获取请求信息
HttpServletResponse 响应对象: 设置响应对象
ServletConfig对象 servlet配置对象
ServletContext对象 servlet的上下文对象
相关功能
获取请求行数据
getMethod() 获取请求方法
getContextPath() 获取虚拟路径
getServletPath() 获取Servlet路径
getQueryString() 获取get方法请求参数
getRequestUrl() 获取请求URL
getProtocol() 获取协议及版本
getRemoteAddr() 获取客户机的IP地址
获取请求头数据
String getHeader(String name) 通过请求头的名称获取请求头的值
Enumeration<String> getHeaderNames() 获取所有的请求头名称
获取请求参数的通用方式
getParameter(String name) 根据参数名称获取参数值
getParameterValues(String name) 根据参数名称获取参数值的数组
Enumeration<String> getParameterNames() 获取所有的请求的参数名称
Map<String ,Sreing[]> getParameterMap() 获取所有参数的map集合
中文乱码问题
get方式:tomcat8自动解决了
post方式:获取参数前,设置request编码
request.serCharacterEncoding("utf-8")
ServletContext对象
概念:代表整个web应用,可以和程序的容器(服务器)来通讯
获取ServletContext对象
request方式 | request.getServletContext() |
HttpServlet方式 | this.getServletContext() |
功能
- 获取MIME类型
- 在互联网通信过程中定义的一种文件数据类型
- 格式:大类型/小类型 text/html image/jepg
- 获取:String getMimeType(String file)
- 域对象:共享数据
- 所有用户所有请求的数据
- 获取文件的真实路径
- /文件 web目录下的资源访问
- /WEB-INF/文件 WEB-INF目录下的资源访问
- /WEB-INF/classes/文件 src目录下的文件访问