ServletConfig----ServletContext----ServletResponse----获取资源路径的三种方式

一、ServletConfig接口
1、作用:获取针对某个Servlet的参数及取值
对Servlet的参数配置在web.xml中进行的,如下所示
<servlet>
    <servlet-name>ServletDemo2</servlet-name>
    <servlet-class>com.itheima.servlet.ServletDemo2</servlet-class>
    <init-param>
    <param-name>encode0</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
    <param-name>encode1</param-name>
    <param-value>GBK</param-value>
    </init-param>
    <init-param>
    <param-name>encode2</param-name>
    <param-value>GB2312</param-value>
    </init-param>
  </servlet>


2、ServletConfig对象是由容器产生的,怎么获取该对象的引用呢?
在编写的Servlet中,覆盖掉init(ServletConfig config),用个变量引用该对象
private ServletConfig config;
pubic void init(ServletConfig config){
this.config = config;
}
由于以上代码GenericServlet中已经做过了,
在自己的Servlet中只需要使用父类中的getServletConfig就可以得到对象的引用了。


3、常用的方法
String getInitParameter(String param):获取指定参数的取值。没有该参数返回null
Enumeration getInitParameterNames():获取所有的参数名称。


注:每一个Servlet的ServletConfig对象都不同。


*****二、ServletContext
1、每个JavaWeb应用在容器启动时都有一个对应的ServletContext对象。
针对一个JavaWeb应用,只有一个ServletContext对象,代表了当前的web应用。
ServletContext对象是在当前应用启动时就创建的。
2、ServletContext对象是由容器产生的,怎么获取该对象的引用呢?
方式一:通过ServletConfig getServletContext()获取该对象的引用
方式二:直接使用getServletContext()获取应用,该方法是在GenericServlet中定义的,实际上还是通过方式一获取的。


3、域对象:域对象就是一个Map<String,Object>.ServletContext 是一个域对象,说明其内部维护了一个Map<String,Object>


java.lang.Object getAttribute(java.lang.String name) :根据名称key获取某个对象
java.util.Enumeration getAttributeNames()  :获取域中的所有名称
void removeAttribute(java.lang.String name) : 从域中删除某个对象
void setAttribute(java.lang.String name, java.lang.Object object) :添加或修改某个对象。
4、ServletContext生命周期与JavaWeb应用的生命周期一致的。作为JavaWeb全局对象。


三、获取资源的绝对路径
1、ServletContext
getRealPath(String path):path要求必须以"/"开头,代表当前应用
path写相对于当前应用的相对路径就能通过该方法获取绝对路径。
特点:
只能用于Web环境下
能获取当前应用中的任何资源。


2、ResourceBundle(国际化)
getBundle(String basename)
basename:文件的主文件名,不含扩展名
特点:
用于非web环境下
只能获取classes目录下的properties配置文件。


3、使用类加载器读取配置文件


特点:
用户非web环境下
只能获取classes目录下的任何资源文件


四、HttpServletResponse
1、以字节流输出中文
原则:输出时查哪个码表进行编码,浏览器就必须用什么码表进行解码,否则乱码
如果输出中文时指定了码表getBytes("UTF-8");
告知浏览器使用UTF-8进行解码:
方式一:response.setHeader("Content-Type","text/html;charset=UTF-8");
方式二:response.getOutputStream().write("<meta http-equiv='Content-Type' content='text/html;charset=UTF-8'>".getBytes());
方式三:response.setContentType("text/html;charset=UTF-8");
核心原理就是方式一


2、以字符流输出中文
PrintWriter out = response.getWriter();
字符流默认会查ISO-8859-1码表进行中文编码
response.setCharacterEncoding(String charset):更改字符流输出时的默认码表
不要忘记通知客户端以什么码表去解码。


response.setContentType("text/html;charset=UTF-8")有2个作用:
字符流:响应输出时使用的编码,告知了客户端使用的编码
3、在一个方法内,要么只使用字节流要只是用字符流,而这互斥的。


response的输出流输出的数据都是到自身的缓存中。
容器会从respnse中的缓存中取出数据,与响应头、响应行一起组织成HTTP协议的响应格式后再给客户端。
容器会自动关闭response的输出流

ServletConfig----ServletContext----ServletResponse----获取资源路径的三种方式_第1张图片

你可能感兴趣的:(Web,servlet,String,properties,浏览器,Path)