JavaEE-Servlet,ServletConfig,ServletContext
2017-01-19 18:17
405 查看
一.Servlet(Server Applet 服务器小程序)
Servlet生命周期: 当第一次访问servlet时创建,或配置load-on-startup随服务器启动而创建,调用init(); 当WEB应用结束时销毁,调用destroy(); 默认只创建一个servlet对象,多个网络连接共享同一个servlet, 也可以配成多个servlet对象,一个网络连接独享一个servlet,低效耗内存,不建议! Servlet线程安全 默认只创建一个Servlet实例,多个网络连接(多线程)共享同一个Servlet对象 若使用Servlet成员变量保存数据,则多线程并发修改该成员变量,数据被覆盖丢失,出现线程安全问题! 所以除了必要的共享数据,慎用Servlet成员变量! 在 WEB应用/WEB-INF/web.xml 配置 <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>win.lioil.MyServlet</servlet-class> <load-on-startup>1</load-on-startup> <!-- 随服务器启动而创建,其中数值指定启动顺序,0~5,越小优先级越高--> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/MyServlet</url-pattern> <url-pattern>/aaa/MyServlet</url-pattern> <url-pattern>/aaa/*</url-pattern> <url-pattern>/*</url-pattern> <!-- /* 路径匹配: 任意路径, 会覆盖 DefaultServlet 和 JspServlet, 无法访问静态资源和jsp文件--> <url-pattern>/</url-pattern> <!-- / 路径匹配: 任意路径(*.jsp除外), 会覆盖 DefaultServlet, 无法访问静态资源--> <url-pattern>*.mp3</url-pattern> <!-- *.mp3 后缀名匹配: 以mp3为后缀的任意路径--> </servlet-mapping> 匹配范围越大,优先级越低, 优先级: /MyServlet > /aaa/* > *.mp3 > /* 路径匹配 和 后缀名匹配 不能混合使用, 例如: /*.txt 在 Tomcat/conf/web.xml 默认配置 DefaultServlet.java, 用于处理WEB项目中的静态资源(html,css,js,png等文件), 输出错误页面 在 Tomcat/conf/web.xml 还默认配置 JspServlet.java, 用于处理WEB项目中的jsp文件 <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> &l 4000 t;load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet> <!-- 注意: 在 WEB应用/WEB-INF/web.xml 不应该配置"/", "/*", "*.jsp", "*.jspx"等任意路径, 因为它们都会覆盖 DefaultServlet 或 JspServlet, 使默认功能失效--> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern> </servlet-mapping>
二.ServletConfig
在 WEB应用/WEB-INF/web.xml 配置serlet的初始化参数(其它servlet不能访问) <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>win.lioil.MyServlet</servlet-class> <init-param> <param-name>name1</param-name> <param-value>value1</param-value> </init-param> </servlet> 在 MyServlet.java 获取初始化参数 getServletConfig().getInitParameter("name1"); getServletConfig().getInitParameterNames(); getServletConfig().getServletName(); ServletConfig-常用方法 String getInitParameter(String name) 获取servlet初始化参数值 Enumeration getInitParameterNames() 获取servlet所有初始化参数名 String getServletName() 获取servlet名称 (<servlet-name>MyServlet</servlet-name>) ServletContext getServletContext() 获取ServletContext对象
三.ServletContext(Application)
1.概念
ServletContext 是 Application 域对象, 代表整个WEB应用, 在整个WEB应用范围内共享数据, 服务器组件之间的通讯。 作用域: 整个WEB应用 生存期: 当WEB应用启动时创建, 当WEB应用结束时销毁
2.WEB应用-Attribute
在WEB应用中共享数据,例如: 在不同servlet间共享数据 getServletContext().setAttribute(String name, Object value); getServletContext().removeAttribute(String name); getServletContext().getAttribute(String name); getServletContext().getAttributeNames();
3.WEB应用-初始化参数
在 WEB应用/WEB-INF/web.xml 配置WEB应用的初始化参数 <context-param> <param-name>user</param-name> <param-value>password</param-value> </context-param> 在 MyServlet.java 获取WEB应用的初始化参数 getServletContext().getInitParameter("user"); getServletContext().getInitParameterNames();
4.WEB请求-转发
Servlet转发: 在服务器内部转发,不涉及客户端(一次Http请求和响应) getServletContext().getRequestDispatcher("/OtherServlet").forward(request, response); Http重定向: 要求客户端重新请求(两次Http请求和响应) 状态码 302 响应头 Location: http://www.lioil.win
5.WEB资源-本地路径
在Servlet类中 getServletContext().getRealPath("") 获取WEB应用目录的绝对路径 在非Servlet类中 Class.getResource(String path) 当 path 不以'/'开头: 从类所在目录开始 当 path 以'/'开头: 从类加载目录ClassPath开始(WEB应用的classes目录) getClass().getResource("") 当前类所在目录 getClass().getResource("/") WEB应用的classes目录 getClass().getResource("/..") WEB应用的WEB-INF目录(..表示上一级目录) getClass().getResource("/../..") WEB应用目录 假设当前类是win.lioil.Util.java, 获取相同目录下的config.txt,有两种方法,如下: getClass().getResource("config.txt") 等价于 getClass().getResource("/win/lioil/config.txt") Class.getClassLoader().getResource(String path) path 只能 从类加载目录ClassPath开始(WEB应用的classes目录) getClass().getClassLoader().getResource("") WEB应用的classes目录 getClass().getClassLoader().getResource("..") WEB应用的WEB-INF目录(..表示上一级目录) getClass().getClassLoader().getResource("../..") WEB应用目录 假设当前类是win.lioil.Util.java, 获取相同目录下的config.txt getClass().getClassLoader().getResource("win/lioil/config.txt")
简书: http://www.jianshu.com/p/55e934b5d68a
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/54618638
GitHub博客:http://lioil.win/2017/01/19/Servlet.html
Coding博客:http://c.lioil.win/2017/01/19/Servlet.html
相关文章推荐
- JavaEE:Servlet简介及ServletConfig、ServletContext
- 【JavaEE】Servlet接口、ServletConfig接口、GenericServlet抽象类、ServletContext接口、HttpServlet类源码及方法
- 2014.08.31 周日-servlet运行过程、线程安全、ServletConfig对象、ServletContext对象
- getServletContext()和getServletConfig()
- servletconfig和ServletContext的用法和区别
- 4.servlet开发入门(ServletConfig,ServletContext域)
- ServletConfig和ServletContext
- ServletConfig,load-on-startup,ServletContext
- ServletConfig和ServletContext的区别
- 【Servlet】ServletConfig和ServletContext
- servletConfig和ServletContext 以及servletContextListener介绍
- ServletConfig与ServletContext对象详解
- ServletConfig与ServletContext对象详解
- Servlet简介 以及servlet一些细节 servletconfig servletcontext 的几个应用
- Servlet总结(2)--ServletConfig和ServletContext对象
- (转帖)ServletContext与ServletConfig的简单介绍
- JavaWeb(一)Servlet中的ServletConfig与ServletContext
- ServletContext与ServletConfig的详解及区别
- (24)ServletConfig和ServletContext
- ServletContext与ServletConfig的深度分析