servlet之间传递数据的方式

Posted torchstar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet之间传递数据的方式相关的知识,希望对你有一定的参考价值。

Servlet传递数据方式

 

基本概述

 

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

1、静态变量

2、HttpServletResponse的sendRedirect()方法

3、HttpServletRequest的getRequestDispatch()方法

4、HttpServletRequest的getSession()方法

5、HttpServletRequest的setAttribute()方法

 

静态变量

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

案例:

public class MyData{

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

}

 

HttpServletResponse的sendRedirect()方法

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

基本语法:

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

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

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

在接受数据的Servlet中:

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

 

基本原理图

技术分享图片

 

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

 

HttpServletRequest的getRequestDispatch()方法

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

基本语法:

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

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

 

基本原理图

技术分享图片

 

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

注意事项:

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

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

 

 

HttpServletRequest的getSession()方法

 

    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”);

 

 

HttpServletRequest的setAttribute()方法

 

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

基本语法:

setAttribute(name, value);

 

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

 

 

比较sendRedirect()和forward(request,response)

 

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

2、实际发生的位置不一样

    sendRedirect 发生在浏览器

    forward 发生在web服务器

3、使用用法不一样

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

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

4、能够去URL范围不一样

sendRedirect可以去任意URL

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

 

 

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

 抄袭于http://blog.csdn.net/q547550831/article/details/50446453

以上是关于servlet之间传递数据的方式的主要内容,如果未能解决你的问题,请参考以下文章

miniui两种请求servlet方法传递参数的不同

ajax与controller之间传递数据的方法

纯 Javascript fetch() 方法到 java Servlet,我如何获取和传递数据?

在C语言中,函数实参与形参之间的数据传递方式是( )传递方式。

【Android 开发】 : Activity之间传递数据的几种方式

jsp与servlet之间的参数传递转