博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
servlet映射,线程安全,servletconfig对象,servletcontext对象
阅读量:6388 次
发布时间:2019-06-23

本文共 2729 字,大约阅读时间需要 9 分钟。

hot3.png

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"));

转载于:https://my.oschina.net/u/1589656/blog/266064

你可能感兴趣的文章
c++将bool变量以文字形式打印
查看>>
洛谷P1111 修复公路 并查集 图论 最小生成树
查看>>
微名汇-微信公众平台功能开发(微信聊天机器人)
查看>>
A2W和W2A :很好的多字节和宽字节字符串的转换宏
查看>>
_T和_L的区别
查看>>
我个人的javascript和css命名规范
查看>>
android ANR产生原因和解决办法
查看>>
kylin的安装与配置
查看>>
我的java学习之路--Reflect专题
查看>>
Android Intent的setClass和setClassName的区别
查看>>
php-fpm nginx 使用 curl 请求 https 出现 502 错误
查看>>
西宁海关首次对外展示截获500余件有害生物标本
查看>>
泸州移动能源产业园首片薄膜电池组件成功下线
查看>>
韩国瑜会见陆委会主委陈明通:别给高雄念紧箍咒
查看>>
交通部:加大人工售票力度保障农民工春运出行
查看>>
物联网的学术层、应用层和行为层的基本介绍
查看>>
初探github(一)
查看>>
源码分析之 LinkedList
查看>>
免SDK实现微信/支付宝转账打赏功能
查看>>
安卓.9图片制作
查看>>