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()





    我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》
    分享到: