[list]
[*]如果需要使一个对象在上下文的所有servlet和jsp中都可用,就可以将此对象绑定于ServletContext。
[*]如果应用程序要求对象(如“购物车”)绑定于会话,就可以将对象设置为会话属性
[*]如果应用程序要求两个servlet通过一个RequestDispatcher共享一个对象,那么这些servlet可以使用绑定于“请求”范围的对象请求。
[/list]
[color=red]实例:[/color]
ServletContext对象
将ContextObject对象绑定于ServletContext.
在Servlet中读取ServletContext属性
在Servlet中设置请求属性
/displayServlet为在web.xml中映射的Servlet路径
在Servlet中访问请求属性
[*]如果需要使一个对象在上下文的所有servlet和jsp中都可用,就可以将此对象绑定于ServletContext。
[*]如果应用程序要求对象(如“购物车”)绑定于会话,就可以将对象设置为会话属性
[*]如果应用程序要求两个servlet通过一个RequestDispatcher共享一个对象,那么这些servlet可以使用绑定于“请求”范围的对象请求。
[/list]
[color=red]实例:[/color]
ServletContext对象
package myServlet;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class ContextObject {
private Map map;
public ContextObject()
{
map=Collections.synchronizedMap(new HashMap());
}
public void put(Object key,Object value)
{
if(key==null||value==null)
{
throw new IllegalArgumentException("invalid parameters passed to the contextObject.put");
}
map.put(key,value);
}
public String getValues()
{
StringBuffer buf=new StringBuffer("");
/*
Set set=map.keySet();
synchronized(map)
{
Iterator iterator=set.iterator();
while(iterator.hasNext())
{
buf.append((String)iterator.next()+"<br>");
}
}
*/
synchronized(map)
{
Iterator i=map.entrySet().iterator();
while(i.hasNext())
{
Map.Entry me=(Map.Entry)i.next();
buf.append("key:"+me.getKey()+"<br>value:"+me.getValue());
}
}
return buf.toString();
}
public String toString()
{
return getClass().getName()+"["+map+"]";
}
}
将ContextObject对象绑定于ServletContext.
package myServlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class servletContext extends HttpServlet {
/**
* Constructor of the object.
*/
public servletContext() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext context=getServletContext();
ContextObject co=new ContextObject();
co.put(request.getRemoteAddr(), new java.util.Date());
context.setAttribute("map1", co);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
在Servlet中读取ServletContext属性
package myServlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ContextAccesser extends HttpServlet {
/**
* Constructor of the object.
*/
public ContextAccesser() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ContextObject co=(ContextObject)getServletContext().getAttribute("map1");
String values=co.getValues();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println("<h2>"+values+"</h2>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
在Servlet中设置请求属性
package myServlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RequestBinder extends HttpServlet {
/**
* Constructor of the object.
*/
public RequestBinder() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ContextObject co=new ContextObject();
co.put("cy", "myname");
request.setAttribute("requestMap",co);
RequestDispatcher dispatcher=request.getRequestDispatcher("/displayServlet");
dispatcher.forward(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
/displayServlet为在web.xml中映射的Servlet路径
在Servlet中访问请求属性
package myServlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class displayServlet extends HttpServlet {
/**
* Constructor of the object.
*/
public displayServlet() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ContextObject co=(ContextObject)request.getAttribute("requestMap");
String kv;
if(co!=null)
{
kv=co.getValues();
}
else
{
kv="no value";
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println("<h2>"+kv+"</h2>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}