ServletContext 上下文对象 了解
用于关联多个Servlet
是多个Servlet之间 通信的桥梁, 用于多个Servlet之间信息额的共享 等等!
ServletContext 在JSP技术中,我们称其为 application!
我们的tomcat启动时,会为每一个项目创建且仅创建一个ServletContext对象!在服务器关闭或应用被卸载时,对象会被销毁!
我们在项目的Servlet中,可以通过一些方法,得到这个对象,并进行数据的存储,修改,删除,获取操作!
如何从Servlet中 得到一个ServletContext对象
在Servlet中,通过一个getServletContext方法 获取上下文对象
格式:
ServletContext context = getServletContext();
ServletContext常用方法
1.设置&替换数据
context.setAttribute(String key,Object value);
2.获取数据
Object value = context.getAttribute(String key);
3.删除数据
context.removeAttribute(String key);
4.获取项目运行时所在的文件路径
String 路径 = context.getRealPath("/");
ServletConfig 对象 了解
是一个Java类,每一个Servlet都拥有一个ServletConfig对象
获取对象的两种方式(这两种方式是互斥的):
- 在Servlet中,通过ServletConfig() 获取!
- 通过重写init方法,使用参数列表中的config对象!
我们可以通过web,xml 向每一个Servlet添加配置信息,在Servlet中可以通过ServletConfig得到这些配置信息!
格式:
<servlet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
<init-param>
<param-name>key</param-name>
<param-value>值</param-value>
</init-param>
</servlet>
通过ServletConfig如何获取初始化的参数数据
String value = config.getInitParameter(String key);
获取所有的key
String[] arr = config.getInitParameterNames();
Servlet 创建时机
web.xml中 Servlet的配置中
可以通过<load-on-startup> 节点 来指定Servlet启动顺序
当节点值为负值 或 不写时,表示用户第一次请求时,创建此Servlet !
当节点值等于0或大于0时,在Tomcat启动时,创建此Servlet !
如果存在多个等于0或大于0的Servlet,启动顺序是:==值越小越早创建 ==!
值相同时,自上而下顺序创建!
请求重定向 与 请求转发
请求转发与重定向,在一次业务中,可以进行多次!
请求转发与重定向,必须存在结束的操作,也就是必须存在响应!
请求转发*****
一个web组件, 将未处理完成的请求,通过tomcat转交给另一个web组件进行处理!
步骤:
//1.获取请求转发器
RequestDispatcher rd = request.getRequestDispatcher("转发的地址");
//2.进行转发操作
rd.forward(request,response);
//简写
request.getRequestDispatcher("转发的地址").forward(request,response);
特点:
- 在转发过程中,多个web组件之间共享一个请求对象 与 响应对象!
- 在转发的流程中,浏览器只发起了一次请求,所以浏览器地址不会发生改变!
- 转发不能跨项目实现
- 相较于重定向来说,效率较高!
请求重定向****
一个web组件,处理完毕请求后,告知浏览器,将请求转向下一个web组件!
格式:
response.sendRedirect("重定向的地址");
原理:
当客户端请求服务器时,服务器给浏览器响应一个302的状态码,以及一个location地址。
浏览器每连接到302状态码时,就会自动寻找响应中的location,并向这个location发起新的请求!
特点:
- 产生了两次请求。
- 浏览器地址发生改变。
- 重定向可以跨服务器实现(例如我们的项目,可以请求重定向至百度)
- 性能较低
HttpServletRequest 常用操作
- request.getMethod() 得到请求的方式
- getRequestURI() :获取请求地址
- getRemoteAddr() :获取客户端的IP地址
- getRemoteHost() : 获取客户端的机器名称
- getServerName() :获取服务器的名称
- getServerPort() :获取放服务器运行的端口号
- getQueryString() :获取GET请求的 网址? 后的字符串