-
Servlet 3.0
添加时间:2013-8-6 点击量:目次
# Servlet
# ServletRequest
# Servlet Context
# ServletResponse
# Servlet
Servlet接口2个类:GenericServlet,HttpServlet
一般,容器只创建一个Servlet实例,并发的恳求应用同一个实例进行处理惩罚,是以,Servlet 不是线程安然的
Servlet 若实现 SingleThreadModel,则容器会创建多个实例,确保每个实例同时只在一个线程内运行。然则,规范不推荐应用 SingleThreadModel
两个生命周期回调办法:init() 和 destroy()
# ServletRequest
接口 ServletRequest,HttpServletRequest
类 HttpServletRequestWrapper
o 生命周期:恳求对象失效后,被容器收受接管后可能被重用,应用法度不该该依附于超出有效局限的恳求对象
o 恳求参数
客户端提交的恳求参数,经由过程 HttpServletRequest.getParameterXxx() 办法读取
表单数据若是是POST办法提交,则编码类型必须是 application/x-www-form-urlencoded ,表单数据才作为参数,不然,表单数据在 HTTP 恳求 body 内,只能经由过程 InputStream 读取
文件上传(File upload)须应用 multipart/form-data 表单类型,且Servlet 添加 @MultipartConfig 标识表记标帜
文件上传数据的读取:getPart(),getParts()
o 属性
属性(Attribute)是容器设置,或应用法度设置,办法:setAttribute(),getAttributeXxx()
以 java,javax,sun开首的属性名称保存
SSL有关的属性,容器以属性的情势供给
断定是否SSL:isSecure()
o HTTP 头:getHeaderXxx(),getXxxHeader()
o 恳求路径
恳求路径包含3项目组
- Context Path:Web 应用的根路径,若是Web应用为默认应用,则为,getContextPath()
- Servlet Path:Context Path 后面,Servlet 映射路径
- Path Info:若是Servlet映射路径应用了通配符,Servlet Path 后面的项目组为 Path Info
如,主机为www.the.com,Web应用为 some.war,某一Servlet 映射路径为 /oneServlet/,客户端恳求 http://www.the.com/some/oneServlet/any/file,则
- Context Path = /some
- Servlet Path = /oneServlet
- Path Info = /any/file
忽视URL编码,requestURI = contextPath + servletPath + pathInfo
o 获取本地路径
可将恳求路径转换为办事器本地文件体系路径
- ServletContext.getRealPath():将相对于 Context Path 的路径转换为本地物理路径
- HttpServletRequest.getPathTranslated() :将该恳求的 Path Info 转换为本地物理路径
o getCookies() 获取 Cookie
o I18N
HTTP恳求中 Accept-Language 头,可经由过程以下办法读取:getLocale(),getLocales()
o 恳求的字符编码
getCharacterEncoding(),若是客户端未指定(Content-Type头),则返回 null,容器默认应用 ISO-8859-1
setCharacterEncoding() 覆盖客户端提交的字符编码
# Servlet Context
ServletContext 是Web app的接见接口
Web app 在办事器上的路径为 http://host:port/contentRoot
每个 Web app 只有一个 ServletContext 实例
o 初始化参数
设置:经由过程 web.xml
读取:getInitParameterXxx()
o 编程增长Servlet,Filter和Listener
ServletContext 供给办法,可在Web app 初始化时创建、设备 Servlet、Filter 和 Listener,如同在 web.xml 中声明一样
- addServlet/Filter/Listener()
- createServlet/Filter/Listener()
- getServlet/Filter/ListenerRegistration()
- getServlet/Filter/ListenerRegistrations()
o 属性
ServletContext 的属性对象可以被Web app 内随便率性组件接见
- setAttribute()
- getAttribute()
- getAttributeNames()
- removeAttribute()
o 读取资料
可读取 Web app 内的静态资料文件,如:HTML
- getResource()
- getResourceAsStream()
o 姑且文件夹
容器要为每个Webapp 供给一个姑且文件夹
File dir = (File) servletContext.getAttribute(javax.servlet.context.tempdir);
# ServletResponse
HttpServletResponse 默示给客户端的HTTP响应
ServletResponse 对象应当只在其有效局限(Servlet.service())内应用
o 缓冲
返回客户端的数据,可以经由过程 OutputStream 或 PrintWriter 写出去,也可以先写入缓冲区,再提交到客户端
ServletResponse 供给以下办法
- getBufferSize()
- setBufferSize()
- reset()
- resetBuffer()
- flushBuffer()
- isCommitted()
o HTTP 头
setHeader()
addHeader()
setXxxHeader()
addXxxHeader()
o 便利办法
- sendRedirect() 重定向
- sendError() 返回HTTP错误页面
o I18N
- setLocale()
- setContentType()
- setCharacterEncoding()
我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》