Servlet学习笔记(六)-----数据共享和页面跳转


本文主要介绍了如下几个内容:

1.3种共享变量的区别以及SetAttribute()和GetAttribute()函数

2.request.getAttribute()和request.getParameter()的区别

3.request.getParameter()和request.getParameterValues()的区别

4.两种页面跳转的方式:request.getRequestDispatcher()和 response.sendRedirect()的具体含义和区别


该笔记在编写的时候参考了几个文章,在文末已经贴出了链接,需要的朋友可以去参考。



1.3种共享变量

1.1介绍

request:一次请求的范围  ,过了这次请求所有数据失效
request.setAttribute(name,value)
request.getAttribute(name)
请求转发时:session、getParameter都有值
重定向时:session、getParameter都无值


session:会话范围 :当前浏览器范围,只要不关闭浏览器 数据一直存在
request.getsession().setAttribute(name,value)
request.getsession().getAttribute(name)
请求转发时:session、getParameter都有值
重定向时:session有值、getParameter无值


servletContext:整个应用范围:服务器范围,只要服务器不关闭,数据一致存在
request.getsession().getServletContext().setAttribute(name,value)
request.getsession().getServletContext().getAttribute(name)
请求转发时:session、getParameter都有值
重定向时:session有值、getParameter无值

原则:能在request 就不要 放session 能在session  就不要在servletContext
原因:服务器可能一跑跑几年,浏览器页面也可能玩一天才关闭,只有请求是一次性的

 
  

1.2 实例代码

.1.2.1创建了一个SetShareVar的类,用来设置3个参数。

代码如下:

Servlet学习笔记(六)-----数据共享和页面跳转_第1张图片

运行结果:

 
  

1.2.2还要创建一个测试类GetShareRequest。代码如下:

Servlet学习笔记(六)-----数据共享和页面跳转_第2张图片

运行结果:因为request在SetShareVar中,所以在运行GetShareRequest后会出现request=null;

 
  
 
  

1.2.3适当修改代码,添加forward的跳转,可以实现request的保留。在setShareVar

中增加如下代码:


运行结果如下:

Servlet学习笔记(六)-----数据共享和页面跳转_第3张图片


1.2.4 如果在其他的浏览器中运行,那么session也会是null。


2.两个区别

1.request.getAttribute()与request.getParameter()区别?

getParameter()方法是在服务器端接受客户端传递过来的数据时使用;

getAttribute()方法是在服务器内部使用,数据通过getParameter()获取进来后,在另一个页面还想继续使用这个数据就要把这个数据通过setAttribute()保存起来,需要使用的时候通过getAttribute()使用。

具体解释:

getParamter()方法的作用是获取到客户端通过表单或者utl请求参数所发送过来的参数值,是客户端和服务器端之间的交互,服务器端想要获取到客户端发送来的数据,就需要使用该方法。

getAttribute()与setAttribute()一般成对出现,通过set获取属性和属性值,通过get读取该值,(一般获取后需要向下转型)。两个函数都是在服务器端进行,客户端不知道其过程。


2、request.getParameterValues()与 request.getParameter()区别?

   2.1区别。

request.getParameterValues(String   name)是获得如checkbox类(名字相同,但值有多个)的数据。   接收数组变量 ,如checkobx类型  

 

request.getParameter(String   name)是获得相应名的数据,如果有重复的名,则返回第一个的值 . 接收一般变量 ,如text类型


2.2实例

1. 三个名字相同的text标签


 
 

request.getParameterValues("test")   ----------------- [1, 2, 3]

request.getParameter("test")             ------------------ 1

${paramValues.test}

${param.test}

2. checkbox

 看书

 电影

 游戏

request.getParameterValues("habit")


2.3与此相关的话题------隐含对象

JSP隐含对象(Implicit Object)


     所谓隐含对象,是指当编写jsp网页时,不必做任何声明就可以直接使用的对象。 JSP2.0定义了九个隐含对象

request response pageContext session application out conifg page exception

这里只提一下request 和 response 两个对象

       request 对象表示客户端请求的内容,比如我们从request中取得了用户输入的内容,实现了javax.servlet.http.HttpServletRequest接口

      response对象表示响应客户端的结果。

上面我们使用了request的两个方法getParameter 和 getParameterValues,其实request还有其他几个比较重要的方法,这里只涉及几个获取请求参数的方法

String getParameter(String name)                     取得name的参数值

String[] getParameterValues(String name)        取得所有name的参数值

Enumeration getParameterNames()                  取得所有的参数名称

Map getParameterMap()        取得request的所有参数的一个映射

//

Returns a Java.util.Map of the parameters of this request. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data. 
Returns: 
an immutable java.util.Map containing parameter names as keys and parameter values as map values. The keys in the parameter map are of type String. The values in the parameter map are of type String array. 

//


3.页面跳转


       页面跳转一共有两种方式,分别为response.sendRedirect(重定向)和

request.getRequestDispatchaer(请求转发)


3.1具体含义:

3.1.1 response:

response是服务器对客户端的反馈,其对页面重定向的流程是:当客户端向服务器发起请求时,服务器重新给客户端一个URL地址,让客户端重新发起一个新的请求,在这个过程中,客户端第一次请求所携带的头信息将消失,在重定向之后而且地址栏显示的是重定向的页面,这是一种客户端行为。

可以通过sendRedirect重定向到服务器任何一个URL。 若使用绝对路径,其中的根路径是服务器根目录,如URL="/xxx",则实际定向到http://localhost:8080/xxx 。一般可使用request.getContextPath() + "/xxx"来访问webapp根目录下的资源。
注意:通过重定向无法访问WEB-INF中的资源,因为重定向是客户端行为,相当于浏览器重新输入URL,而WEB-INF中的内容无法通过输入URL来访问。


形式:重定向:response.sendRedirect("/项目名/路径名");

代码为:
[html]  view plain  copy
  1. response.sendRedirect("test.jsp");   

3.1.2 request:

request是客户端对服务器的请求,其跳转页面的流程是,当客户端向服务器发起跳转请求时,服务器帮助客户端把跳转的页面加载到当前页面中来,地址栏显示的还是跳转之前的页面,而跳转之前客户端发起请求的头信息还是存在的。这是一种服务器行为。所以经过多次指令后,request中存储的的属性还是保留的。通过Forward只能发送请求道webapp下的资源。

若使用绝对路径,其中根路径是相对于webapp的,URL="/xxx",则实际发送请求到http://localhost:8080/webapp/xxx

形式:请求转发:request.getDispatcher("相对路径").forward(request,response)

代码为:

[java]  view plain  copy
  1. request.getRequestDispatcher("test.jsp").forward(request, response);  

3.2五个区别:

1.response.sendRedirect(url)-----重定向到指定URL ,前后页面不是一个request
  request.getRequestDispatcher()  -------是请求转发,前后页面共享一个request

2.response.sendRedirect(url)-----是客户端跳转,地址栏中的网址将改变
  request.getRequestDispatcher(url).forward(request,response) -----是服务器端跳转,地址栏中的网址不改变

3.response.sendRedirect(url)跳转到指定的URL地址后,上个页面(跳转之前的原来页面)中的请求全部结束,原request对象将会消亡,数据将会消失。紧接着,当前新页面会新建request对象,即产生新的request对象
   request.getRequestDispatcher(url).forward(request,response)是采用请求转发方式,在跳转页面的时候是带着原来页面的request和response跳转的,request对象始终存在,不会重新创建

4.response.sendRedirect()时如果需要传递参数,那只能在url后加参数,如:url?id=1,而不能通过request或response方式
  request.getRequestDispatcher().forward(request,response)如果需要传递参数,可以在程序内通过response.setAttribute("name",name)来传至下一个页面.而不能在后面带参数传递

5.sendRedirect()方法可以让你重定向到任何URL
  request.getRequestDispatcher().forward(request,response)方法只能重定向到同一个Web应用程序中的某个资源


参考:https://www.cnblogs.com/1020182600HENG/p/6092926.html

参考:https://blog.csdn.net/l_bestcoder/article/details/53559717

参考:https://blog.csdn.net/qq_27668813/article/details/51394736

参考:https://blog.csdn.net/qq_27668813/article/details/51394736


你可能感兴趣的:(java)