Servlet
一.生命周期
通常状况下,servlet第一次被拜访的时候在内存中创建对象,在创立后立刻调用init()办法进行初始化。
对于每一次申请都掉用service(req,resp)办法解决申请,此时会用Request对象封装申请信息,并用Response对象(最后是空的)代表响应音讯,传入到service办法里供应用。当service办法解决实现后,返回服务器服务器依据Response中的信息组织称响应音讯返回给浏览器。
响应完结后servlet并不销毁,始终驻留在内存中期待下一次申请。直到服务器敞开或web利用被移除出虚拟主机,servlet对象销毁并在销毁前调用destroy()办法做一些善后的事件。
二.ServletConfig: 代表以后Servlet在web.xml中的配置信息
1.String getServletName() — 获取以后Servlet在web.xml中配置的名字
ServletConfig config = this.getServletConfig();
String name = config.getServletName();
2.String getInitParameter(String name) — 获取以后Servlet指定名称的初始化参数的值
ServletConfig config = this.getServletConfig();
String value = config.getInitParameter("name");
3.Enumeration getInitParameterNames() — 获取以后Servlet所有初始化参数的名字组成的枚举
ServletConfig config = this.getServletConfig();
Enumeration enumeration = config.getInitParameterNames();
while(enumeration.hasMoreElements()){
String name = (String)enumeration.nextElement();
String value = config.getInitParameter(name);
System.out.println(name+value);
}
三.ServletContext — 代表以后web利用
1.做为域对象能够在整个web利用范畴内共享数据
void setAttribute(String,Object);
Object getAttribute(String);
void removeAttribute(String);
域对象:在一个能够被看见的范畴内共享数据用到对象。
作用范畴:整个web利用范畴内共享数据。
生命周期:当服务器启动web利用加载后创立出ServletContext对象后,域产生。当web利用被移除出容器或服务器敞开,随着web利用的销毁,域销毁。
ServletDemo1:
ServletContext context = this.getServletContext();
context.getAttribute("apple","red apple");
ServletDemo2:
ServletContext context = this.getServletContext();
String v = (String)context.getAttribute("apple");
System.out.println(v);
ServletDemo2打印后果:red apple
2.用来获取web利用的初始化参数
初始化参数 initparameter — 在web.xml中为Servlet或ServletContext配置的初始化时带有的基本参数
web.xml:
<context-param>
<param-name>username</param-name>
<param-value>zhang</param-name>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>123</param-name>
</context-param>
ServletDemo3:
ServletContext context = this.getServleyContext();
Enumeration enumeration = context.getInitParameterNames();
while(enumeration.hasMoreElements()){
String name = (String)enumeration.nextElement();
String value = context.getInitParameter(name);
System.out.println(name+value);
}
ServletDemo3 打印后果:
usename:zhang
password:123
3.实现Servlet的转发
ServletDemo5:
response.getWriter().write("111111");
ServeltDemo6:
RequestDispatcher dispatcher = this.getServletContext.getRequestDispatcher("/servlet/ServletDemo5");
dispatcher.forward(request,response);
ServletDemo6 在浏览器上打印的后果:111111
Tip:
println是将数据在软件上打印进去
response.getWriter.write()是将数据在浏览器上打印进去
4.加载资源文件
在Servlet中读取资源文件时,如果写相对路径和绝对路径,因为门路将会绝对于程序启动的目录–在web环境下,就是tomcat启动的目录即tomcat/bin–所以找不到资源。如果写硬盘门路,能够找到资源,然而只有一换公布环境,这个硬盘门路很可能是谬误的,同样不行。
为了解决这样的问题ServletContext提供了getRealPath办法。在这个办法中传入一个门路,这个办法的底层会在传入的门路前拼接以后web利用的硬盘门路,从而失去以后资源的硬盘门路。这种形式即便换了公布环境,办法的底层也能失去正确的web利用的门路从而永远都是正确的资源的门路 –this.getServletContext().getRealPath(“config.properties”)
如果在非Servlet环境下要读取资源文件时能够采纳类加载器加载文件的形式读取资源 — Service.class.getClassLoader().getResource(“../../../config.properties”).getPath()
config.properties:
usename = zhang
password = 123
Properties prop = new Properties();
prop.load(new FileReader(this.getServletContext().getRealPath("config.properties")));
System.out.println(prop.getProperty("usename"));
System.out.println(prop.getProperty("password"));
打印后果:
zhang
123
发表回复