目录
一、Servlet对象参数之间的作用域
1.request-Request对象
1)域范围:在当前请求的链接有效
2)存属性:setAttribute(String attName, Object attValue) 键值对作为一个有对象的属性
3) 取值: getAttribute("attName"); 获得所有属性的名称
2.session-HttpSession对象
1)域范围:对于(一次请求)请求转发,或是(两次请求)重定向,seesion的作用域都是有效的。
2) seesion域对象:session表示一次会话,一次会话中的数据是共享的,这时session作为域对象的存在,可以通过setAttribute(name,value)方法来向域中添加数据,同时也可以通过getAttribute(name)方法从域中获取数据,removeAttribute(name)从域中移除数据。
3)两个不同session之间的数据是不可以共享的。
3.application-ServletContext对象
1)ServletContext的生命周期:从创建开始,到服务器关闭
2)ServletContext作用域:可以将它看成一个公共空间,所有的客户都可以从这个空间里读数据,取数据,删除数据,修改数据,这是一个所有人都有权限的空间。
二、servlet与servlet之间的跳转以及参数传输
Servlet和Servlet之间的跳转,我们可以通过两种方法来实现,一种是请求转发,一种是请求重定向,请求转发我们用的是ResquestDispatcher(对象).forward()方法,重定向我们使用的是HttpServletResponse(对象).sendRedirect()方法。请求转发服务器只会对servle发出一次请求,剩下的都是在servle内部进行任务的传输交接,而重定向则是服务器会对servlet进行两次或者多次的请求,下面放出两张图可以帮助大家理解一下
这里再给大家列举一个请求转发的样例,实现的是将输入数据进行开根号再乘十的处理。
这是第一个servlet服务
package requestParam;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
/**
* @author fhzheng
* <li>只做一件事情的组件:开根号处理
*
*/
public class OperServlet extends HttpServlet
{
public void init(){}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
response.setContentType("text/html;charset=utf-8");
//获得控制台打印权限
PrintWriter out=response.getWriter();
//获取请求参数
String strcount=request.getParameter("count");
int count = (int)Double.parseDouble(strcount);
//int count = (int)Integer.parseInt(strcount);
//进行开根号处理
count = (int)Math.sqrt(count);
String str=String.valueOf(count);
//打印第一个servlet处理以后的数字
System.out.println("第一个servlet处理以后的数据"+str);
//设置请求上属性的参数
request.setAttribute("count",str);
// 转发给另一个Servlet来处理
request.getRequestDispatcher("operTwoServlet").forward(request,response);
}
}
这是第二个Servlet服务
package requestParam;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
/**
* @author fhzheng
* <li>只做一件事情的组件:乘10
*
*/
public class OperTwoServlet extends HttpServlet
{
public void init(){}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
//设置输出格式
response.setContentType("text/html;charset=utf-8");
//获得控制台打印权限
PrintWriter out=response.getWriter();
// 获取请求属性上的参数
String strcount=(String)request.getAttribute("count");
int count=Integer.parseInt(strcount);
// 进行乘10处理
count *= 10;
// 再次置入请求属性的参数
request.setAttribute("count",String.valueOf(count));
//打印第二个servlet处理以后的数字
System.out.println("第二个serv处理以后的数据:"+count);
// 转发给另一个Servlet来处理
request.getRequestDispatcher("showServlet").forward(request,response);
}
}j
这是第三个Servlet服务
package requestParam;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
/**
* @author fhzheng
* <li>只做一件事情的处理,显示,即往客户端推流
*
*/
public class ShowServlet extends HttpServlet
{
public void init(){}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//获取请求属性上的参数
String strcount=(String)request.getAttribute("count");
String prefix = "开方十乘处理后的结果是:";
out.println(prefix+strcount);
System.out.println("第三个servlet服务处理以后的最终数据"+strcount);
}
}
我们启动服务器运行以后,看看页面
此时页面和终端都是因为第一次启动,数据都是null,服务器已经启动,我们可以通过网址直接进入我们服务目录下的dataOperation文件下的index.html文件中,进行数据的输入
这里我们输入一个数据4以后,让我们看看网页和console端的输出
网页通过第三个Servlet服务显示出了经过前两个Servlet服务处理以后的数据,在console端,我们通过插旗的方法,把数据在每个Servlet服务中处理以后的数据显示出来 ,观察服务器运行过程。那么这三个Servlet服务器又是怎么进行数据的传输呢
我们可以看到,在第一个第二个Servlet服务的代码中,都有这么一行代码
// 转发给另一个Servlet来处理
request.getRequestDispatcher("operTwoServlet").forward(request,response);
我们调用request的getRquestDispatcher对象,再调用Dispathcher的forward请求转发的方法,我们将这个Servlet的request和response打包发给另外一个Servlet服务进行剩下的处理,这样就完成了不同Servlet服务之间的数据交接。
这基本就是不同Servlet服务之间的跳转了。
这次分享就到这里了,学习路上,诸君共勉,下次见。