*.ServletConfig接口
ServletConfig:代表当前Servlet在web.xml中的配置信息
1.ServletConfig的四个方法
- String getServletName() — 获取当前Servlet在web.xml中配置的名字
- String getInitParameter(String name) — 获取当前Servlet指定名称的初始化参数的值
- Enumeration getInitParameterNames() — 获取当前Servlet所有初始化参数的名字组成的枚举
ServletContext getServletContext() — 获取代表当前web应用的ServletContext对象
2.ServletConfig的作用(3个)
获取当前Servlet在web.xml中配置的名字
- 获取当前Servlet指定名称的初始化参数的值
- 获取代表当前web应用的ServletContext对象
3.初始化参数的设置
在web.xml里的标签里使用 设置 ```xml
<a name="aS0dB"></a>## *.ServletContext接口**ServletContext是什么?**1、ServletContext 是一个接口,它表示 Servlet 上下文对象 <br />2、一个 web 工程,只有一个 ServletContext 对象实例。 <br />3、ServletContext 对象是一个域对象(对象数据操作的范围)。 <br />4、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁<a name="b6z72"></a>### 1.ServletContext 类的四个作用1、获取 web.xml 中配置的上下文参数 context-param (getInitParameter())<br />2、获取当前的工程路径,格式: /工程路径 (context.getContextPath())<br />3、获取工程部署后在服务器硬盘上的绝对路径 (getRealPath(String path))<br />4、像 Map 一样存取数据(setAttribute(String key,Object value))(Servlet的通信)<a name="HSVMk"></a>### 2.ServletContext常用的方法<a name="grBJR"></a>#### (1)(域对象)属性相关的方法(4个)设置和获得ServletContext的Attribute属性,这个属性是全工程的servlet共用的。<br />1)设置属性setAttribute(String key,Object value)<br />2)获得属性getAttribute()<br />3)removeAttribute(String name)<br />4)getAttributeNames()```java//设置属性名称//设置属性setAttribute()context.setAttribute("attribute01","servletContext的attribute01");//获得属性getAttribute()String contextStr = (String)context.getAttribute("attribute01");Object attribute = context.getAttribute("javax.servlet.context.tempdir");//删除一个removeAttribute(String name)context.removeAttribute(String name)//获得所属性的名称getAttributeNames()context.setAttribute("attribute02","servletContext的attribute02");Enumeration<String> attributeNames = context.getAttributeNames();//结果输出System.out.println("属性:"+contextStr);while (attributeNames.hasMoreElements()){System.out.println("属性名称:"+attributeNames.nextElement());}执行结果:属性:servletContext的attribute01属性名称:javax.servlet.context.tempdir属性名称:org.apache.catalina.resources属性名称:org.apache.tomcat.util.scan.MergedWebXml属性名称:org.apache.tomcat.InstanceManager属性名称:org.apache.catalina.jsp_classpath属性名称:attribute02属性名称:attribute01属性名称:javax.websocket.server.ServerContainer属性名称:org.apache.jasper.compiler.ELInterpreter属性名称:org.apache.jasper.compiler.TldCache属性名称:org.apache.tomcat.JarScanner属性名称:org.apache.jasper.runtime.JspApplicationContextImpl
(2)初始化参数方法
获得在web.xml里配置的context初始化参数信息
1)getInitParameter(String key)
/*设置servletContext的初始化参数<context-param><param-name>context</param-name><param-value>initContext</param-value></context-param>*///设置初始化参数(需要在ServletContext初始化前使用)//context.setInitParameter("contextStr", "contextStr");//获得初始化参数getInitParameter()String InitParameter = context.getInitParameter("context");//获取所有初始化参数的名称getInitParameterNames()Enumeration<String> initParameterNames = context.getInitParameterNames();//结果输出System.out.println("获取初始化参数值:"+IgetContext(String uripath)nitParameter);while (initParameterNames.hasMoreElements()){System.out.println("获取初始化参数的名称:"+initParameterNames.nextElement());}执行结果:获取初始化参数值:initContext获取初始化参数的名称:context获取初始化参数的名称:context2
(3)getContext(String uripath)
返回ServletContext对应于服务器上指定 URL的对象。根绝uriPath可以获得服务器布置的所有ServletContext对象
(4) getRequestDispatcher(String path)
返回一个RequestDispatcher对象,该对象充当位于给定路径的资源的包装器。可以转发请求
(5)getServletContextName()
返回与此 ServletContext 相对应的此 Web 应用程序的名称,该名称由 display-name 元素在此 Web 应用程序的部署描述符中指定。
(6) getRealPath(String path)
*.HttpServletRequest 类
1.HttpServletRequest 类的作用
每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。 然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的 信息。
2.HttpServletRequest 类的常用方法
i. getRequestURI() 获取请求的资源路径
ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)
iii. getRemoteHost() 获取客户端的 ip 地址
iv. getHeader( ) 获取请求头
v. getParameter() 获取请求的参数
vi. getParameterValues() 获取请求的参数(多个值的时候使用)
vii. getMethod() 获取请求的方式 GET 或 POST
viii. setAttribute(key, value) 设置域数据
ix. getAttribute(key) 获取域数据
x. getRequestDispatcher() 获取请求转发对象
3.请求的中文乱码解决
(1)doGet 请求的中文乱码解决
// 获取请求参数String username = req.getParameter("username");//1 先以 iso8859-1 进行编码//2 再以 utf-8 进行解码username = new String(username.getBytes("iso-8859-1"), "UTF-8");
(2)POST 请求的中文乱码解决
// 设置请求体的字符集为 UTF-8,从而解决 post 请求的中文乱码问题//需要在参数获取之前设置,才由效req.setCharacterEncoding("UTF-8");
4.请求的转发
什么是请求的转发?
请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。
代码:
//获得调度器RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");//前往调取器里的调度地址requestDispatcher.forward(req,resp);
5.base 标签的作用
给相对路径地址设置一个路径参考点,如果没设置此标签,则相对路径参考浏览器里的路径地址。
<!DOCTYPE html> <html lang="zh_CN"><head><meta charset="UTF-8"><title>Title</title><!--base 标签设置页面相对路径工作时参照的地址 href 属性就是参数的地址值 --><base href="http://localhost:8080/07_servlet/a/b/"></head><body>这是 a 下的 b 下的 c.html 页面<br/> <a href="../../index.html">跳回首页</a><br/></body></html>
6.Web 中的相对路径和绝对路径
在 javaWeb 中,路径分为相对路径和绝对路径两种:
相对路径是:
. 表示当前目录
.. 表示上一级目录
资源名 表示上一级目录 资源名
绝对路径:
http://ip:port/工程路径/资源路径
在实际开发中,路径都使用绝对路径,而不简单的使用相对路径。
1、绝对路径
2、base+相对
7.web 中 / 斜杠的不同意义
在 web 中 / 斜杠 是一种绝对路径。
/ 斜杠 如果被浏览器解析,得到的地址是:http://ip:port/
<a href=”/“>斜杠</a>
/ 斜杠 如果被服务器解析,得到的地址是:http://ip:port/工程路径
1、<url-pattern>/servlet1</url-pattern>
2、servletContext.getRealPath(“/”);
3、request.getRequestDispatcher(“/”);
特殊情况: response.sendRediect(“/”);
把斜杠发送给浏览器解析。得到 http://ip:port/
*.HttpServletResponse 类
1.HttpServletResponse 类的作用
HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个 Response 对象传 递给 Servlet 程序的service发放区使用。HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息, 我们如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse 对象来进行设置,封装到HttpServletResponse 对象中,经web容器解析成htto信息发给浏览器,让浏览器解析HTTP 协议信息,再展现出来。
2.两个输出流的说明
字节流 getOutputStream() 常用于下载(传递二进制数据)
字符流 getWriter() 常用于回传字符串(常用)
两个流同时只能使用一个。
使用了字节流,就不能再使用字符流,反之亦然,否则就会报错
3.响应的乱码解决
(1)分别设置服务器、浏览器的编码集
// 设置服务器字符集为 UTF-8resp.setCharacterEncoding("UTF-8");// 通过响应头,设置浏览器也使用 UTF-8 字符集resp.setHeader("Content-Type", "text/html; charset=UTF-8");
(2)同时设置服务器、浏览器的编码集(推荐)
// 它会同时设置服务器和客户端都使用 UTF-8 字符集,还设置了响应头// 此方法一定要在获取流对象之前调用才有效resp.setContentType("text/html; charset=UTF-8");
4.请求重定向
请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说。我给你一些地址。你去新地址访问。叫请求
重定向(因为之前的地址可能已经被废弃)。
(1)请求重定向的第一种方案:
// 设置响应状态码 302 ,表示重定向,(已搬迁)resp.setStatus(302);// 设置响应头,说明 新的地址在哪里resp.setHeader("Location", "http://localhost:8080");
(2)请求重定向的第二种方案(推荐使用):
resp.sendRedirect("http://localhost:8080");
