Servlet映射细节:
映射代码体现:<servlet> <servlet-name>TextServlet1</servlet-name> <servlet-class>text.Servlet.TextServlet1</servlet-class> </servlet><servlet-mapping>
<servlet-name>TextServlet1</servlet-name> <url-pattern>/servlet/TextServlet1</url-pattern> </servlet-mapping>映射可以使用通配符:
1 以*开头,以扩展名结尾:*.do2 以/开头,/adc/*匹配优先级:绝对优先级》/》*
servlet中的线程安全问题:当存在全局变量时,就会出现线程安全问题,如果要使用全局变量,就要使用同步,代码运行的效率低下。ServletConfig 对象用于获取配置参数:
配置参数代码:
<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中的类的类的配置标签内配置属于该类的参数
用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"));