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

最新文章

  1. Net作业调度(四)—quartz.net持久化和集群
  2. Python3实现简单的爬虫功能
  3. C/C++ sizeof函数解析——解决sizeof求结构体大小的问题
  4. java常量池存放在哪里
  5. AX Dynamic 2012 SSRS autorepot中取当前公司名、打印时间、打印页码
  6. android 资源ID
  7. Xamarin for Visual Studio 破解日志
  8. DevExpress控件使用系列--ASPxGridView+Popup+Tab
  9. JSP学习笔记(一)
  10. 查询可用的Nuget服务地址
  11. HTML&CSS基础学习笔记1.21-语义化标签
  12. PHP 上传图片,生成水印,支持文字, gif, png
  13. Javascript匿名函数
  14. Log4.Net 在Winfrom、MVC、ashx程序里的使用,ashx程序里使用异步
  15. 2017/11/25 2D变换
  16. ConcurrentHashMap实现原理
  17. C#操作DataTable类
  18. ES7 之 Async/await 的使用
  19. PHP魔术方法实例
  20. CentOS 7下KVM支持虚拟化/嵌套虚拟化配置

热门文章

  1. vuex mapGetters
  2. 试验笔记 - 使用7-ZIP压缩来减小APK安装包体积
  3. Bootstrap学习速查表(二) 排版及表格
  4. EventListener中的handleEvent
  5. nginx支持pathinfo模式
  6. Java过滤特殊字符
  7. 【selenium+python】之Python Flask 开发环境搭建(Windows)
  8. 深入Asyncio(四)Coroutines
  9. React系列之--props属性
  10. 解决Oracle用户被锁定的方法