servlet映射,线程安全,servletconfig对象,servletcontext对象

▼魔方 西西 提交于 2019-12-09 23:21:18

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 以*开头,以扩展名结尾:*.do
2 以/开头,/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"));

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!