Servlet传递数据方式

Servlet传递数据方式

基本概述

    Servlet传递数据的方式有很多,这里提供五种方式:

1、静态变量

2HttpServletResponsesendRedirect()方法

3HttpServletRequestgetRequestDispatch()方法

4HttpServletRequestgetSession()方法

5HttpServletRequestsetAttribute()方法

 

静态变量

    通过建立一个数据类来进行传递。

案例:

public class MyData{

    public static String data; //通过使用该类来实现数据传递

}

 

HttpServletResponsesendRedirect()方法

    sendRedirect()方法是让浏览器重定向到另一个链接。其内部原理是设置状态码为303,并设置相应的Location响应头。

基本语法:

response.sendRedirect("/Web应用名/资源名?uname="+username+"&pwd="+password);

response.sendRedirect(“servlet的地址?参数名=参数值&参数名=参数值...”);

参照值是String , 参数名应当使用 字母组合

在接受数据的Servlet中:

String 参数=request.getParameter(“参数名”);

 

基本原理图

Servlet传递数据方式_第1张图片

PS:使用重定向不能使用PrintWriteServletOutputStream这样的流。因为重定向已经将消息返回给浏览器,其数据流也就没必要使用了。

 

HttpServletRequestgetRequestDispatch()方法

    getRequestDispatch()方法是使WEB服务器从当前Servlet转发到当前应用下的另一个Servlet

基本语法:

request.getRequestDispatcher(资源地址).forward(request,response);

资源地址:不需要项目名。因为它只能在WEB服务器内部转发。

 

基本原理图

Servlet传递数据方式_第2张图片

PSgetRequestDispatcher()请求转发可以一直转发下去,只要最终会处理并给服务器相应内容就行了。而且请求转发不会改变浏览器的URLsendRedirect()会改变URL

注意事项:

1使用forward不能转发到该WEB应用外的URL

2、因为forward发生在文本服务器内,所以Servlet1Servlet2等等,只要一直转发,使用的都是相同的requestresponse


HttpServletRequestgetSession()方法

    getSession()方法会获取一个会话,这个内容会在另一篇博客会话技术中详细说明。

基本语法:

1放入session:request.getSession.setAttribute("loginUser",username); 

2取出session:request.getSession.getAttribute("loginUser");

PS:该方法可以传递对象

案例:

放入:

User user= new User();

user.setName(“zs”);

user.setPassWord(“123”);

request.getSession.setAttribute("userObj",userObj); 

取出:

User user=(User)request.getSession.getAttribute(“userObj”);

 

HttpServletRequestsetAttribute()方法

    setAttribute()方法可以设置一个键值对,该键值对在该request的有效期内都可以使用。相应的还有removeAttribute()注销键值对的方法。该方法经常和getRequestDispatch()一起使用。

基本语法:

setAttribute(name, value);

 

PSrequestAttribute在一次请求中有效。一次请求:没有将响应消息返回给浏览器就视为一次请求。


比较sendRedirect()forward(request,response)

1sendRedirect()重定向,forward()转发

2实际发生的位置不一样

    sendRedirect 发生在浏览器

    forward 发生在web服务器

3、使用用法不一样

request.getRequestDispatcher(“/资源URI”).forward(request,response)

response.sendRedirect(“/web应用/资源URI”);

4能够去URL范围不一样

sendRedirect可以去任意URL

forward 只能去当前的WEB应用的资源

 

 

----------参考《韩顺平.细说Servlet


你可能感兴趣的:(sendRedirect,setAttribute,Servlet传递数据方式)