java servlet类_[Java教程]与Servlet相关的类

[Java教程]与Servlet相关的类

0

2017-08-31 17:00:15

bc91bb04e6e9c61e24c974e4440db8f2.gif

有4个有关的类,通过servlet可以获得其中的三个,然后通过ServletConfig间接获取ServletContext。

1、 ServletConfig

该类是在Servlet容器初始化Servlet时,将初始化参数交给servlet的init()方法;另外它还可以获得ServletConfig类的实例。类里两个方法比较常用,就是获得初始化参数。

首先我们要知道怎么配置初始化参数?两个办法:@WebServlet(name="testServlet", urlPatterns="/testServlet", loadOnStartup=1,

initParams={

@WebInitParam(name="user", value="lmy"),

@WebInitParam(name="pass", value="123")

}

)

public class TestServlet implements Servlet {}

通过web.

TestServlet

com.javaservlet.servlet.TestServlet

age

21

address

nicai

1

注意初始化参数要放在load-on-startup前面,否则会出错,这是由由于参数都是以键值对形式存在,可以获取参数:System.out.println("user : " + servletConfig.getInitParameter("user"));

System.out.println("pass : " + servletConfig.getInitParameter("pass"));

Enumeration enums = servletConfig.getInitParameterNames();

while(enums.hasMoreElements()){

String paramName = enums.nextElement();

String paramValue = servletConfig.getInitParameter(paramName);

System.out.println(paramName + "-" + paramValue);

}

注意,该参数只是属于Servlet自己的,所以配置参数的时候要注意所放的位置。

2、 ServletContext

通过ServletConfig类的getServletConext()方法可以获得ServletContext类实例,该对象表示整个web应用程序,在一个程序中只有一个,程序中所有的servlet共享该对象,可以说是一个全局对象,我们也可以获取web应用的初始化参数,该初始化参数可供所有的servlet使用,首先设置web初始化参数:

country

cn

注意和init-param的区别,获取方式和init-param类似:ServletContext context = servletConfig.getServletContext();

context.getInitParameter("country");

Enumeration contextParams = context.getInitParameterNames();

while(contextParams.hasMoreElements()){

String paramName = contextParams.nextElement();

String paramValue = context.getInitParameter(paramName);

System.out.println(paramName + "-" + paramValue);

}

其中还有一些其他的方法可以使用:

获取web程序名称:// 获取当前web程序的context path,也可以说是程序名称

System.out.println(context.getContextPath());      //output result: /JavaServlet

获取当前web应用的某一个文件在服务器上的绝对路径,而不是部署前的路径,也就不是你的IDE里的路径。System.out.println(context.getRealPath("readme.txt"));

工程目录如下:

bc91bb04e6e9c61e24c974e4440db8f2.gif

输出结果:C:\Program Files\tomcat7\wtpwebapps\JavaServlet\readme.txt

这其实是文件在Servlet容器上的路径,在eclipse中可以看到server的路径说明

可以看出该文件的路径是Server path + deploy path + 应用程序中的路径,记得和师兄之前还讨论过这个问题,当时真是傻死了!!

获取当前web应用的一个文件输入流:

getResourceAsStream(String path):注意其中的path也是相对于web程序根目录的路径,即也是在部署之后的路径,不是部署之前的路径;

与Classloader的方法对比如下:InputStream is1 = context.getResourceAsStream("readme.txt");

System.out.println("inputStream1 : " + is1);

InputStream is2 = this.getClass().getClassLoader().getResourceAsStream("readme.txt");

System.out.println("inputStream2 : " + is2);

InputStream is3 = context.getResourceAsStream("/WEB-INF/classes/readme.txt");

System.out.println("inputStream3 : " + is3);

输入如下:

bc91bb04e6e9c61e24c974e4440db8f2.gif

可以看出第一个使用部署前的路径根本没有获取到资源,而使用相对于部署后的web程序的根目录(从/WEB-INF开始)则成功获取到了资源。

总之就是一句话,在web程序中获取路径时一定要小心,因为获取到的路径很多都是根据程序部署之后相对于服务器部署目录的路径,开发时的路径是不会获取到的,即开发和部署两个阶段中调试程序是有差异的。

还有两个重要的方法,getAttribute()和getAttributeNames(),跟下一篇的说ServletRequest对象时一起进行对比。

3、 其他两个对象

因为ServletRequest和ServletResponse和Http的通信联系紧密,所以把它们放到下一篇说明。

本文网址:http://www.shaoqun.com/a/322281.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值