四大域对象均含有的方法
1,pubic void setAttribute(String name,*Object value*):向域中存储数据,指定名称
2,public *Object* getAttribute(String name):获取域对象中指定name的值
3,public void removeAttribute(String name):删除域对象中指定name的值
Servletcontext域对象
生命周期:
- 创建:当服务器启动时,服务器会为服务器上的每一个web项目创建一个ServletContext域对象
- 销毁:服务器关闭的时候或者项目从服务器上移除的时候
- 作用范围:只要项目运行着都可以使用,是最大的域对象,所有的servlet都可以访问
servletContext的作用:
- 应用范围域对象:
分别创建三个servlet,分别进行存储,获取,删除数据,测试servletcontext域对象对当前所有servlet有效
代码展示:
step1:
创建链接:
<body>
<a href="${pageContext.request.contextPath}/ContextServlet">存储数据</a>
<a href="${pageContext.request.contextPath}/Context1Servlet">获取数据</a>
<a href="${pageContext.request.contextPath}/Context2Servlet">删除数据</a>
</body>
step2:
创建ContextServlet:
@WebServlet("/ContextServlet")
public class ContextServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//告诉浏览器响应的数据类型
response.setContentType("text/html;charset=utf-8");
//获取servletContext域对象,方法是从父类中继承过来的
ServletContext sc = getServletContext();
//存放数据到域对象中
sc.setAttribute("wp","666");
response.getWriter().write("存储成功!");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
step3:
创建Context1Servlet:
@WebServlet("/Context1Servlet")
public class Context1Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//告诉浏览器响应的数据类型
response.setContentType("text/html;charset=utf-8");
//获取servletContext域对象,方法是从父类中继承过来的
ServletContext sc = getServletContext();
//获取servletContext域对象中的数据
String wp = (String) sc.getAttribute("wp");
response.getWriter().write("获取到的数据是:"+wp);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
step4:
创建Context2Servlet:
@WebServlet("/Context2Servlet")
public class Context2Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//告诉浏览器响应的数据类型
response.setContentType("text/html;charset=utf-8");
//获取servletContext域对象,方法是从父类中继承过来的
ServletContext sc = getServletContext();
//删除域对象中name为“wp”的数据
sc.removeAttribute("wp");
response.getWriter().write("删除成功!");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
结果:当点击存储数据时将数据存入servletContext域对象中,此时点击获取数据,显示数据666,当点击删除数据之后,再点击获取数据显示null。
- 获取应用级的参数配置(全局配置参数,只有xml方式)
常用方法:
1,public String getInitParamter(String name):获取指定name的配置参数信息
2,public Enumeration<String> getInitParamterNames():获取所有的应用级参数
代码展示:
step1:
在web.xml配置应用级别的参数:
<context-param>
<param-name>wp</param-name>
<param-value>66</param-value>
</context-param>
<context-param>
<param-name>wpp</param-name>
<param-value>666</param-value>
</context-param>
step2:
创建Deno1Servlet:
@WebServlet("/Demo1Servlet")
public class Demo1Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取servletContext域对象
ServletContext sc = getServletContext();
//获取wp的取值
String wp = sc.getInitParameter("wp");
System.out.println(wp);
//获取所有的配置参数
Enumeration<String> ipn = sc.getInitParameterNames();
//遍历
while (ipn.hasMoreElements()){
String s = ipn.nextElement();
System.out.println(sc.getInitParameter(s));
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
输出结果:
66
666
66
- 获取web资源的真实路径
常用方法:
1,public string getRealPath(“/路径”):获取真实路径(servlet3.0之前必须/开头)
2,public inputstream getresourceAsStream(“/路径”):获取到此的输入流对象
代码展示:
@WebServlet("/Demo2Servlet")
public class Demo2Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取servletContext域对象
ServletContext sc = getServletContext();
//获取真实路径
String realPath = sc.getRealPath("/images/5.jsp");
System.out.println("真实路径:"+realPath);
//输出结果:真实路径:E:\idea工作区间\javaweb129\out\artifacts\MyTest_war_exploded\images\5.jpg
//getrealpath()方法不管路径存不存在,都可以获取到真实路径
//需要注意的是,此图片的路径在web下的images文件夹下
InputStream is = sc.getResourceAsStream("/images/5.jpg");
ServletOutputStream os = response.getOutputStream();
int len;
byte[] b=new byte[1024];
while ((len=is.read(b))!=-1){
os.write(b,0,len);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
HttpSession域对象
生命周期:
- 创建:java中,在一次会话中第一次调用getSession()时由服务器创建;jsp中,在一次会话中第一次访问任意一个jsp界面时就会创建
- 销毁:
调用invalidate()方法时
服务器超时时:web服务器指定了默认超时时间,tomcat是30分钟
//此代码在tomcat的conf目录的web.xml中
<session-config>
<session-timeout>30</session-timeout>
</session-config>
-
服务器关闭时:服务器关闭时,我们可以通过钝化(将session数据保存到硬盘中)和活化(将session数据回复到session中)
-
作用范围:一次会话中,涉及的servlet和jsp都可以使用
HttpServletRequest域对象
生命周期:
- 创建:浏览器请求时由服务器创建
- 销毁:响应生成时由服务器销毁
- 作用范围:只在一次请求中
- 注意!request域对象中的数据在转发时可以在两个servlet中共享数据,但是在重定向中不可以
HttpServletRequest的作用:
- 请求范围域对象:
分别创建两个servlet,在Demo3Servlet中向域对象中存储数据,在Demo4Servlet域对象中取出数据
代码演示:
step1:
创建Demo3Servlet向域对象中存储数据
@WebServlet("/Demo3Servlet")
public class Demo3Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//向httpservletrequest域对象中存储数据
request.setAttribute("data","一对数据");
//转发到Demo4Servlet
request.getRequestDispatcher("Demo4Servlet").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
step2:
在此域对象中获取到了转发来的数据
@WebServlet("/Demo4Servlet")
public class Demo4Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取域中的数据
String data = (String) request.getAttribute("data");
//输出:一对数据
System.out.println(data);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
- 获取请求内容
-获取请求行内容
常用方法:
1,public string getMethod():获取请求方式
2,public string getRequestURI():获取浏览器端的请求uri
3,public stringbuffer getRequestURL():获取浏览器端的请求url(协议,主机端口,资源地址)
4,public string getProtocol():获取浏览器端使用的协议和版本号
5,public string getContextPath():获取虚拟路径
6,public string getRemoteAttr():获取来访者的ip地址
代码展示:
@WebServlet("/Demo5Servlet")
public class Demo5Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getMethod();
System.out.println("浏览器端的请求方式是:"+method);
String requestURI = request.getRequestURI();
System.out.println("浏览器端的uri地址是:"+requestURI);
StringBuffer requestURL = request.getRequestURL();
System.out.println("浏览器端的url地址是:"+requestURL);
String protocol = request.getProtocol();
System.out.println("浏览器端的协议及其版本号是:"+protocol);
String contextPath = request.getContextPath();
System.out.println("虚拟地址是:"+contextPath);
String remoteAddr = request.getRemoteAddr();
System.out.println("浏览器端的ip地址是:"+remoteAddr);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
结果:
浏览器端的请求方式是:GET
浏览器端的uri地址是:/mytest/Demo5Servlet
浏览器端的url地址是:http://localhost:8080/mytest/Demo5Servlet
浏览器端的协议及其版本号是:HTTP/1.1
虚拟地址是:/mytest
浏览器端的ip地址是:0:0:0:0:0:0:0:1
-获取请求消息头内容
常用方法:
1,public string getHeader(String name):获取指定name的消息头
2,public long getDateHeader(String name):获取取值为毫秒值的消息头
3,public int getIntHeader(String name):获取取值为整数类型的消息头
4,public enumeration getHeaderNames():获取所有的请求消息头
5,public enumeration getHeaders(String name):获取指定name的有多个值的消息头
-获取请求正文内容
注意!只有post方式才有请求正文,请求数据类型必须是application/x-www-form-urlencoded
常用方法:
1,public servletinputstream getInputstream():以字节输入流的形式获取正文
2,public bufferedreader getreader():以字符流的形式获取正文
3,public String getparameter(String name):获取指定name的参数值
4,public String[] getparametervalues(String name):获取指定name的参数值(多个值)
5,public enumeration<String> getparameterNames():获取所有的参数名
6,public map<String,String[]> getparameterMap():获取所有的请求参数,键为string,值为数 组类型
PageContext域对象
生命周期:
-
创建:当对jsp的请求开始时创建
-
销毁:当响应结束后销毁
-
作用范围:整个页面(是四大域对象中作用范围最小的)
作用: -
获取其他八大内置对象
getException()返回Exception。
getPage()返回Page。
getRequest()返回request。
getResponse()返回response。
getServletConfig()返回config。
getServletContext()返回application。
getSession()返回session。
getOut()返回out -
作为域对象
-
可以在当前界面操作其他三大域对象
setAttribute(String key,String value,int 哪个域) :
getAttribute(String key,int 哪个域)
removeAttribute(String key,int 哪个域)
findAttribute(String key) :依次从jsp的四个域中从小到大(域的范围)挨个查找指定的key.若找到直接返回,终止查找,若没 有返回null