Servlet的应用--- ServletConfig和ServletContext
1.Servlet类配置初始化参数------ServletConfig
(1)在配置文件中设置:
在web.xml中设置
(2)在servlet类中获取配置文件中的值的读取
第一种:
ServletConfig sc = this.getServletConfig();
String name = sc.getInitParameter("corporation");
String str = sc.getServletName();
第二种:
String name = this.getInitParameter("corporation");
//获取注册名字
String str = this.getServletName();
注:(1)每一个serlvet都有一个自己的ServletConfig对象,不同的类不能访问不同的部署文件
(2)配置文件中的设置可以是只在一个servlet类中设置,也可以是设置一个,在< web-app>标签中设置,可在同一个站点下访问
(3)init()方法和初始化的区别
如果要想读取servlet.Config中的文件时,必须在初始化的时候用init()方法
如果不用读取serflet.config中的文件时,可以用构造方法
一般是修改无参的父类,带参数的一般不修改
2. 配置Web应用上下文初始化参数-------servletContext
(1)在web.xml中设置和获取
设置:
获取:
String encoding = this.getInitParameter("encoding");
(2)在server中的设置
注:一个web应用程序只有一个ServletContext
(3)设置属性名和属性值
setAttribute()设置属性名和属性值
getAttribute()获取属性名和属性值
(1)在容器源中设置属性
ServletContext context = this.getServletContext();
//设置上下文属性
context.setAttribute("username", username);
response.sendRedirect("secuss");
(2)在跳转的页面中读取属性
//通过获取上下文对象的ServletContext的对象来输入输入正确的合法用户信息
ServletContext context = this.getServletContext();
String name = (String) context.getAttribute("username");
3.ServletConfig 和servletContext的区别:
(1)整个Web应用只有一个ServletContext,在部署Web应用的时候,容器会建立这一个ServletContext对象,这个上下文对Web应用中的每个Servlet和JSP都可用。
(2)Web应用中的各个Servlet都有自己的ServletConfig,它只对当前Servlet有效。.
4.Servlet的线程安全问题
• 使用synchronized
– 使用synchronized关键字同步操作成员变量和共享数据的代码,就可以防止可能出现的线程安全问题。
• 尽量少使用成员变量和共享数据
– ServletContext是可以多线程同时读/写成员变量和共享数据的,线程是不安全的。
– ServletRequest对象在service方法的范围内是有效的,不要试图在service方法结束后仍然保存请求对象的引用。
– Servlet本身就是多线程的,在Servlet中再创建线程,将导致执行情况复杂化,出现多线程安全问题。
5.获取请求行的相关消息
getMethod方法返回http请求消息中的请求方式
getContextPath方法是返回请求资源所属于的web的虚拟路径
//获取提交的方式
System.out.println(request.getMethod());
//获取服务器的名称
System.out.println(request.getServerName());
//请求的资源的URL
System.out.println(request.getRequestURI());
//查询字符串 get方法在地址栏上输入的信息
System.out.println(request.getQueryString());
//获取版本
System.out.println(request.getProtocol());
//获取上下文的路径
System.out.println(request.getContextPath());
//获取
System.out.println(request.getServletPath());
如果在web.xml中设置的为*,则输入的值都可以访问到
访问方式:http://localhost:8080/demoWeb/servlet/sshdkf
5.获取网络连接信息
getRemoteAddr方法是返回客户机的IP地址,格式是“192.168.0.3”
getRemoteHost方法是返回客户机的主机名
System.out.println(request.getRemoteAddr());
System.out.println(request.getRemoteHost());
System.out.println(request.getRemotePort());
//获取本机的IP地址
System.out.println(request.getLocalAddr());
//获取本机的名称
System.out.println(request.getLocalName());.
6.获取请求头
//获取所有请求头的字段的名称
Enumeration enName = request.getHeaderNames();
//判断如果有更多的元素
while(enName.hasMoreElements()){
String headerName = (String) enName.nextElement();
System.out.println(headerName+":"+request.getHeader(headerName));
}