Servlet映射细节:
映射代码体现:
<servlet>
<servlet-name>TextServlet1</servlet-name>
<servlet-class>text.Servlet.TextServlet1</servlet-class>
</servlet>java
<servlet-mapping>
<servlet-name>TextServlet1</servlet-name>
<url-pattern>/servlet/TextServlet1</url-pattern>
</servlet-mapping> web
映射能够使用通配符:
1 以*开头,以扩展名结尾:*.do
2 以/开头,/adc/* 安全
匹配优先级:绝对优先级》/》*app
servlet中的线程安全问题:
当存在全局变量时,就会出现线程安全问题,
若是要使用全局变量,就要使用同步,代码运行的效率低下。url
ServletConfig 对象用于获取配置参数:spa
配置参数代码:
<servlet>
<servlet-name>TextServlet1</servlet-name>
<servlet-class>text.Servlet.TextServlet1</servlet-class>
<init-param>
<param-value>encoding</param-value>
<param-value>UTF-8</param-value>
</init-param>线程
</servlet>指针
在web.xml中的类的类的配置标签内配置属于该类的参数xml
用servletconfig对象获取其中一个参数:
经过参数名获取参数值:
ServletConfig sc=getServletConfig();
String str=sc.getInitParameter("encoding");
response.getWriter().write(str);对象
获取全部的参数:
Enumeration<String> e=sc.getInitParameterNames();
输出全部的参数以及其值:
ServletConfig sc=getServletConfig();
Enumeration<String> e=sc.getInitParameterNames();
while(e.hasMoreElements()){
String s=e.nextElement();
response.getWriter().write(s+"="+sc.getInitParameter(s)+"<br/>");
}
ServletContext 表明的是整个应用,每一个应用有一个context的实例:
1使用servletContext的对象实现servlet之间的数据共享:
设置数据:
servlet1:
ServletContext sc=getServletContext();
sc.setAttribute("encoding", "UTF-8");
获取数据:
servlet2:
ServletContext sc=getServletContext();
String str=(String)sc.getAttribute("encoding");
response.getWriter().write(str);
要先访问servlet1,再访问servlet2,不然会报空指针异常
2用servletcontext获取全局参数:
设置全局变量:
<context-param>
<param-name>hehe</param-name>
<param-value>xixi</param-value>
</context-param>
获取全局变量和servletconfig相同,使用servletcontext对象便可
3转发:
ServletContext sc=getServletContext();
RequestDispatcher rd=sc.getRequestDispatcher("/servlet/TextServlet2");
rd.forward(request, response);
4获取真实路径
String str=getServletContext().getRealPath("/text.jpg");
/表明的是本应用
讲获取到的图片输出:
String str=getServletContext().getRealPath("/text.jpg");
InputStream in=new FileInputStream(str);
OutputStream os=response.getOutputStream();
int len=-1;
byte []byt=new byte[1024];
while((len=in.read(byt))!=-1){
os.write(byt, 0, len);
}
in.close();
os.close();
5读取资源文件的三种方式:
1 用绝对路径获取:
方法就是4.
2 用properties对象获取键值对的值
先建立properties类型的文件
String str=getServletContext().getRealPath("/cfg.properties");
InputStream in=new FileInputStream(str);
java.util.Properties pro=new java.util.Properties();
pro.load(in);
System.out.println(pro.getProperty("name3"));
这里要注意的是 Properties 是java.util里的pro类,不然调用不到方法
3 类加载器:ClassLoader cl=TextServlet1.class.getClassLoader();InputStream in=cl.getResourceAsStream("cfg.properties");java.util.Properties pro=new java.util.Properties();pro.load(in);System.out.println(pro.getProperty("name2"));