Servlet传递数据方式

基本概述

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

1、静态变量

2、HttpServletResponsesendRedirect()方法

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传递数据方式 - CSDN博客
http://blog.csdn.net/q547550831/article/details/50446453

Servlet传递数据方式的更多相关文章

  1. vue 父向子组件传递数据,子组件向父组件传递数据方式

    父组件向子组件传递数据通过props,子组件引入到父组件中,设置一个值等于父组件的数据,通过:bind将数据传到子组件中,子组件中通过props接收父组件的数据,这样就可以使用父组件的数据了,循环组件 ...

  2. 关于那个.get .post .ajax ztree 还有后台servlet传递数据

    servlet给前台传递data串 用的方法是 PrintWriter out = response.getWriter(); // response.sendRedirect("test. ...

  3. servlet之间传递数据的方式

    Servlet传递数据方式 基本概述 Servlet传递数据的方式有很多,这里提供五种方式: 1.静态变量 2.HttpServletResponse的sendRedirect()方法 3.HttpS ...

  4. Activity之间传递数据的方式及常见问题总结

    Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...

  5. .NET MVC控制器向视图传递数据的四种方式

    .NET MVC控制器向视图传递数据的四种方式: 1.ViewBag  ViewBag.Mvc="mvc"; 2.ViewData ViewBag["Mvc"] ...

  6. 安卓通过putExtra传递数据的几种方式

    通过intent传递数据时,使用以下代码报错: hMap<string, object=""> map=(Map<string, object="&qu ...

  7. ASP.NET MVC2中Controller向View传递数据的三种方式

    转自:http://www.cnblogs.com/zhuqil/archive/2010/08/03/Passing-Data-from-Controllers-to-View.html 在Asp. ...

  8. 【Android 复习】 : Activity之间传递数据的几种方式

    在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...

  9. Fragment和Activity之间通过广播的方式传递数据

    四大组件之间传递数据可以用广播,但是有次面试官说太重了,用eventbus代替.下面的广播传递数据方法仅当学习参考. 1.管理类 /** * 广播管理类:注册广播.注销广播.发送广播 * @autho ...

随机推荐

  1. 1BIT,1BYTE,1KB,1MB,1GB,1TB等计量单位换算

    http://iask.sina.com.cn/b/8961090.html知识   在数字世界里没有电影.没有杂志.没有一首首的乐曲,只有一个个的数字“1”和“0”.以前人们对于数字世界中的这两个数 ...

  2. 一种把dll放在不同目录的巧妙方法

    想必C#的开发者都遇到过这个问题,引用的dll都放在根目录下,随着项目的日益增大,根目录下充满了各种各样的dll,非常的不美观. 如果能够把dll按照想要的目录来存放,那么系统就美观多了,以下是我常用 ...

  3. sprint3 【每日scrum】 TD助手站立会议第四天

    站立会议 组员 昨天 今天 困难 签到 刘铸辉 (组长) 和楠哥学习了通过AlarmManager 来实现闹钟,由于要用到BroadcastReceiver广播协议,所以正在学习中,暂时只是按照教程写 ...

  4. Source-php-request-2

    php比較坑的地方就是实现相同的目的,能够使用超级多种手段.比方(file_get_contents和fopen以及如今提到的curl以及fsockopen当然还有socket)这对于一个经验少的程序 ...

  5. intellij 开发webservice

    最近项目中有用到WebService,于是就研究了一下,但是关于intellij 开发 WebService 的文章极少,要不就是多年以前,于是研究一下,写这篇博文.纯属记录,分享,中间有不对的地方, ...

  6. Maven一大坑——缓存

    在Spring进行配置的时候,通常是分模块的,也就是一个配置文件会被另外一个配置文件所import. 但是今天的项目中我明明就都已经配置好了,文件也引入了,但是尼玛这个接口就是没有注入...... 后 ...

  7. 【特征匹配】SIFT原理与C源代码剖析

    相关: KD树+BBF算法解析 SURF原理与源代码解析 SIFT的原理已经有非常多大牛的博客上做了解析,本文重点将以Rob Hess等人用C实现的代码做解析,结合代码SIFT原理会更easy理解.一 ...

  8. Docker入门系列8

    commit docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser ...

  9. eclipse集成tomcat改动字符集參数

    问题: 在eclipse 4.4(Luna)中集成tomcat时,直接改动原tomcat文件夹中的配置文件,不起作用. 有时.我们会修改字符集參数为utf-8,以解决中文乱码问题,修改之后依旧乱码-- ...

  10. BZOJ 1597: [Usaco2008 Mar]土地购买 斜率优化

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MB Description 农夫John准备扩大他的农场,他正在考虑N ...